没手光看都能学会的css02

233 阅读8分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

本章内容

1.结构伪类选择器

2.伪元素

3.浮动

4.清除浮动

5.定位

结构伪类选择器nth-child || nth-of-type

根据HTML结构选择标签,减少对类名的依赖.

结构伪类选择器的权重是0010

<ul>
        <li>我是li里的第1个孩子</li>
        <li>我是li里的第2个孩子</li>
        <li>我是li里的第3个孩子</li>
        <li>我是li里的第4个孩子</li>
        <li>我是li里的第5个孩子</li>
        <li>我是li里的第6个孩子</li>
        <li>我是li里的第7个孩子</li>
        <li>我是li里的第8个孩子</li>
        <li>我是li里的第9个孩子</li>
        <li>我是li里的第10个孩子</li>
    </ul>
/* 匹配父元素里面的第一个孩子 */
        ul li:first-child {
            background-color: red;
        }

        /* 匹配父元素里面的最后一个孩子 */
        ul li:last-child {
            background-color: skyblue;
        }
        /* 匹配父元素里面的某一个孩子 */
        ul li:nth-child(6){
            background-color: purple;
        }
        /* 匹配父元素里面倒数第几个孩子 */
        ul li:nth-last-child(3){
            background-color: pink;
        }

nth-child(n)

1.n 可以是数字, 数字是几,就选择第几个孩子。

ul li:nth-child(6) { }  选择第6个孩子

2.n 还可以是 关键字 比如 odd even

 /* 选中偶数的孩子 */
        ul li:nth-child(even) {
            background-color: pink;
        }

        /* 选中奇数的孩子 */
        ul li:nth-child(odd) {
            background-color: skyblue;
        }

3.n 还可以是 公式。

  • n 是从 0开始 012345...
  • 2n 是 偶数
  • 2n + 1 是 奇数
  • 5n 5的倍数
  • n+5 从第五个开始 包含第五个 一直到最后.
  • -n+5 选中前5个 包含第五个
/*2n */
ol li:nth-child(2n) {
            background-color: tomato;
 }
/*2n+1 */
ol li:nth-child(2n+1){
            background-color: violet;
}
/*5n  */
ol li:nth-child(5n){
            background-color: yellowgreen;
        }
/* n+5    从第五个开始 包含第五个 一直到最后.*/
ol li:nth-child(n+5) {
            background-color: yellowgreen;
        }
/*-n+5   选中前5个 包含第五个*/
ol li:nth-child(-n+5) {
            background-color: yellowgreen;
        }

伪元素

伪元素就是利用css来创建标签.伪元素创建出来的标签属于行内元素

在父元素内容的最前面添加一个伪元素
E:::before{
     content: '';
}
在父元素内容的最后面添加一个伪元素
E::::after{
     content: '';
}
使用委员插入必须要指定content属性

浮动

浮动的特点

  1. 浮动元素会脱离标准流(简称脱标),不占位置,被后面的标准流占有
<div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
* {
            margin: 0;
            padding: 0;
        }

        div {
            width: 200px;
            height: 200px;
        }

        .box1 {
            background-color: pink;
        }

        .box2 {
            /* 右浮动 */
            float: right;
            background-color: red;
        }

        .box3 {
            background-color: green;
        }
  1. 浮动的元素比标准流高半个级别,可以覆盖标准流的元素
* {
            margin: 0;
            padding: 0;
        }

        div {
            width: 200px;
            height: 200px;
        }

        .box1 {
            background-color: pink;
        }

        .box2 {
            /* 左浮动 */
            float: left;
            background-color: red;
        }

        .box3 {
            padding: 40px;
            background-color: green;
        }

3.浮动找浮动(同方向浮动) ,下一个浮动元素会在上一个浮动元素后面左右浮动

* {
            margin: 0;
            padding: 0;
        }

        div {
            float: left;
            width: 200px;
            height: 200px;
        }

        .box1 {
            background-color: pink;
        }

        .box2 {
            background-color: red;
        }

        .box3 {
            background-color: green;
        }
  1. 浮动的元素会受到上面元素边界的影响
* {
            margin: 0;
            padding: 0;
        }

        div {
            width: 200px;
            height: 200px;
        }

        .box1 {
            float: left;
            background-color: pink;
        }

        .box2 {
            /* 右浮动 */
            float: right;
            background-color: red;
        }

        .box3 {
            background-color: green;
        }

5.浮动的元素有特殊效果(浮动元素具有行内块元素特性并且顶部对齐)

一行可以显示多个,可以设置宽高

块级元素浮动之后不设置宽高,默认由内容撑开

行内元素浮动之后设置宽高有效

<div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    <span>设置宽高有效</span>
    <p>块级元素浮动之后不设置宽高默认由内容撑开</p>
 * {
            margin: 0;
            padding: 0;
        }

        div {
            float: left;
            width: 200px;
            height: 200px;
        }

        .box1 {
            background-color: pink;
        }

        .box2 {
            background-color: red;
        }

        .box3 {
            background-color: green;
        }

        span {
            float: left;
            width: 200px;
            height: 200px;
            background-color: purple;
        }

        p {
            width: 200px;
            height: 200px;
            float: left;
            background-color: yellow;
        }

浮动注意事项:

1 浮动的盒子搭配标准流的父元素一起使用.(标准流:垂直布局 ;浮动:水平布局)

2 浮动的时候,当父元素装不下浮动的子元素,此时子元素会换行显示.

3 子浮父不浮 子一起浮

后期还是以(Flex布局)为主

清除浮动

清除浮动本质

清除浮动的本质是清除浮动元素造成的影响:浮动的子标签无法撑开父盒子的高度

注意:

  • 如果父盒子本身有高度,则不需要清除浮动
  • 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。
  • 父级有了高度,就不会影响下面的标准流了

清除浮动样式

选择器{clear:属性值;} 

我们实际工作中, 几乎只用 clear: both;

清除浮动的策略是: 闭合浮动

清除浮动的多种方式

额外标签法

额外标签法也称为隔墙法,是 W3C 推荐的做法

使用方式:

额外标签法会在浮动元素末尾添加一个空的标签。

例如 <div style="clear:both"></div>,或者其他标签(如<br />等)。

优点: 通俗易懂,书写方便

缺点: 添加许多无意义的标签,结构化较差

注意: 要求这个新的空标签必须是块级元素。

父级添加 overflow 属性

可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。

overflow:hidden | auto | scroll;

优点:代码简洁

缺点:无法显示溢出的部分

注意:是给父元素添加代码

父级添加after伪元素

:after 方式是额外标签法的升级版。给父元素添加:

.clearfix:after {  
   content: ""; 
   display: block; 
   height: 0; 
   clear: both; 
   visibility: hidden;  
 } 
 .clearfix {  /* IE6、7 专有 */ 
   *zoom: 1;
 }   

优点:没有增加标签,结构更简单

缺点:照顾低版本浏览器

代表网站: 百度、淘宝网、网易等

父级添加双伪元素

给父元素添加

.clearfix:before,.clearfix:after {
   content:"";
   display:table; 
 }
 .clearfix:after {
   clear:both;
 }
 .clearfix {
    *zoom:1;
 }   

优点:代码更简洁

缺点:照顾低版本浏览器

代表网站:小米、腾讯等

定位

定位的应用场景

为什么需要使用定位?

1 解决盒子之间的层叠(叠加)问题,可以层叠到其它盒子上面

2 页面滚动,盒子固定在页面某个位置不动.

定位的使用步骤:

1 设置定位的方式

2 设置偏移值

定位的语法

.blue {
            /* 定位的使用步骤 */
            /* 1 设置定位的方式  绝对定位*/
            position: absolute;
            /* 2 设置偏移值 */
            top: 150px;
            left: 150px;
            background-color: blue;
        }

静态定位

 position: static;
特点:
1 静态定位就是普通的标准流
2 静态定位设置偏移值无效.

相对定位

 position: static;
特点:
1 静态定位就是普通的标准流
2 静态定位设置偏移值无效.

相对定位

position: relative;
特点:
1 需要配合方位属性来移动位置
2 想对于自身原来的位置进行移动
3 在页面中占位置-没有脱标

绝对定位

position: absolute;
特点
1 需要配合方位属性来移动位置
2 祖先元素如果没有定位,默认相对于浏览器进行移动;祖先元素有定位,相对于最近一级带有定位的祖先元素移动位置.
3 在页面中不占位置-已经脱标

子绝父相

子绝父相:

子元素用绝对定位,父元素使用相对定位,让子元素相对于父元素进行移动.那父元素是相对定位,对网页的布局影响比较小.

子绝父绝:

实际开发中在子绝父相的时候,发现父元素有绝对定位,此时父元素里面的孩子直接子绝即可.

绝对定位的盒子水平垂直居中

绝对定位使盒子居中(记得设置宽高)

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

固定定位

position: fixed;
特点
 1 需要配合方位属性来移动位置
 2 相对于浏览器的可视区域进行移动位置
 3 不占位置-脱标

定位的特殊性

行内元素加了绝对/固定定位可以设置宽高

块级元素加了绝对/固定定位,如果不给宽度,宽度由内容撑开

嵌套块级元素加了绝对/固定定位,不会有塌陷问题.

元素层级

不同布局方式元素的层级关系:

标准流 <浮动 <定位

定位元素之间的层级关系相同(相对定位 绝对定位 固定定位)

z-index属性可以修改定位元素之间的层级关系

z-index: 数字(默认值是auto );

z-index属性的属性值千万不要加单位

数字越大,层级越高.只有定位的盒子才有 z-index属性

<div class="blue"></div>
<div class="green"></div>
<div class="red"></div>
* {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        div {
            width: 300px;
            height: 300px;

        }

        .red {
            /* 相对定位 */
            position: relative;
            left: 0;
            top: 0;
            z-index: 2;
            background-color: red;
        }

        .blue {
            /* 绝对定位 */
            position: absolute;
            left: 100px;
            top: 100px;
            z-index: 1;
            background-color: blue;

        }

        .green {
            /* 固定定位 */
            position: fixed;
            left: 200px;
            top: 200px;
            z-index: 9999;
            background-color: green;
        }

最后是原图(●ˇ∀ˇ●)

wallhaven-l3p81y.jpg