布局

1. 结构伪类选择器

作用:根据元素在html中的结构关系查找元素

场景:用于查找某父级选择器中的子元素

E:first-child{}  匹配父元素中第一个子元素,并且时E元素
E:last-child{}   匹配父元素中最后一个子元素,并且时E元素
E:nth-child(n){}   匹配父元素中第n个子元素,并且时E元素
E:nth-last-child(n){} 匹配父元素中倒数第n个子元素,并且时E元素

n为0,1,2,3,4,5,6....
偶数  2n  even
奇数  2n+1  2n-1 odd
找到前5个    -n+5
找到从第5个往后   n+5

1.1 匹配第一个li元素 (first-child)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 选择第一个li */
        li:first-child{
            background-color: green;
        }
    </style>
</head>
<body>
    <ul>
        <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>
    </ul>
</body>
</html>

1.2 匹配最后一个li元素 (last-child)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 选中最后一个li */
        li:last-child {
            background-color: red;
        }
    </style>
</head>
<body>
    <ul>
        <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>
    </ul>
</body>
</html>

1.3 匹配第3个li元素(nth-child)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 选中第三个li */
        li:nth-child(3) {
            background-color: blue;
        }
    </style>
</head>
<body>
    <ul>
        <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>
    </ul>
</body>
</html>

1.4 匹配前5个li元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 选中前五个 */
        li:nth-child(-n+5) {
            background-color: aqua;
        }
    </style>
</head>
<body>
    <ul>
        <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>
    </ul>
</body>
</html>

1.5 匹配偶数行 / 奇数行 的li元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>

       /* 选中偶数行 */
       li:nth-last-child(odd) {
           background-color: aqua;
       }

       /* 选中奇数行 */
       li:nth-last-child(even) {
           background-color: brown;
       }
    </style>
</head>
<body>
    <ul>
        <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>
    </ul>
</body>
</html>

1.6 匹配第n个li元素后所有的li元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>结构伪类选择器</title>
    <style>
        /* 选中第五开始的li */
        li:nth-child(n+5) {
            background-color: aqua;
        }
     

    </style>
</head>
<body>
    <ul>
        <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>
    </ul>
</body>
</html>

1.7 匹配第一个li元素下的第三个a标签

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>匹配父元素中倒数第n个子元素后所有的该子元素</title>
    <style>
        li:first-child a:nth-child(3) {
            color: aqua;
            background-color: yellow;
        }
    </style>
</head>

<body>
    <ul>
        <li>
            <a href="#">这是第1个li元素的第一个a标签</a>
            <a href="#">这是第1个li元素的第二个a标签</a>
            <a href="#">这是第1个li元素的第三个a标签</a>
            <a href="#">这是第1个li元素的第四个a标签</a>
            <a href="#">这是第1个li元素的第五个a标签</a>
            <a href="#">这是第1个li元素的第六个a标签</a>

        </li>
        <li><a href="#">这是第2个a标签</a></li>
        <li><a href="#">这是第3个a标签</a></li>
        <li><a href="#">这是第4个a标签</a></li>
        <li><a href="#">这是第5个a标签</a></li>
        <li><a href="#">这是第6个a标签</a></li>
        <li><a href="#">这是第7个a标签</a></li>
        <li><a href="#">这是第8个a标签</a></li>
    </ul>
</body>

</html>

2.伪元素

一般页面中的非主体内容可以使用伪元素

元素:html设置的标签 <标签名></标签名>

伪元素:由css模拟出的标签效果

::before  在父元素内容的前面添加一个伪元素
::after   在父元素内容的最后添加一个伪元素

注意:

必须设置content属性才能生效

伪元素默认是行内元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪元素</title>
    <style>
        .father::before {
            /* content属性必须添加  否则伪元素不生效 */
            content: '老鼠';
            color: red;
        }

        .father::after {
            content: '大米';
            color: green;
            /* 默认是行内元素  宽高不生效 */
            /* width: 1000px; */
            background-color: yellow;
            /* display: block; */
        }
    </style>
</head>
<body>
    <!-- 老鼠爱大米 -->
    <div class="father">爱</div>
</body>
</html>

3.标准流

标准流:又称为 文档流,标签默认的排版规则

常见的标准流排版规则:

1:块级元素:从上往下,垂直布局,独占一行

2:行内元素 或行内块元素 : 从左往右,水平布局 空间不够自动折行


4.浮动

浮动的作用:让垂直布局的盒子变成水平布局; 比如一个在左,一个在右

float:left;
left   左浮动
right  右浮动

4.1 特点

-1:浮动元素会脱离标准流.在标准流中不占位置

-2:浮动元素比标准流多半个级别,可以覆盖标准流中的元素

-3:浮动找浮动,下一个浮动元素会在上一个浮动元素后面左右浮动

-4:浮动元素有特殊的显示效果

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

注意点:浮动的元素不能通过text-align:center或者margin:0 auto;

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动</title>
    <style>
        /*  浮动的标签  顶对齐 */
        /*  浮动:在一行排列  宽高生效--浮动后的标签具有行内块特点 */
        .one {
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
        }

        .two {
            width: 200px;
            height: 200px;
            background-color: green;
            float: left;
            /* 因为有浮动 ,不能生效   盒子无法水平居中 */
            margin: 0 auto;
        }

        .three {
            width: 300px;
            height: 300px;
            background-color: blue;
        }
    </style>
</head>

<body>
    <div class="one">one</div>
    <div class="two">two</div>
    <div class="three">three</div>
</body>

</html>

4.2 小米布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小米布局</title>
</head>
<style>
    * {
        margin: 0;
        padding: 0;
    }

    ul {
        list-style: none;
    }
    .top {
        height: 40px;
        background-color: #333333;
    }

    .header {
        margin: 0 auto;
        width: 1226px;
        height: 100px;
        background-color: #ffc0cb;
    }

    .content {
        margin: 0 auto;
        width: 1226px;  
        height: 460px;
    }
    .content .left {
        float: left;
        width: 234px;
        height: 460px;
        background-color: #ffa500;
    }

    .content .right {
        float: left;
        width: 992px;
        height: 460px;
        background-color: #87ceeb;
    }

    .box {
        margin: 0 auto;
        width: 1226px;
        height: 614px;
    }

    .box .left {
        float: left;
        width: 234px;
        height: 614px;
        background-color: #800080;
    }

    .box .right {
        float: right;
        width: 978px;
        height: 614px;
    }

    .box .right li {
        float: left;
        margin-right: 14px;
        margin-bottom: 14px;
        width: 234px;
        height: 300px;
        background-color: #87ceeb;
    }

    .box .right li:nth-child(4n) {
        margin-right: 0;
    }

 
</style>
<body>
    <div class="top"></div>
    <div class="header"></div>
    <div class="content">
        <div class="left"></div>
        <div class="right"></div>
    </div>
    <div class="box">
        <div class="left"></div>
        <div class="right">
            <ul>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
                <li></li>
            </ul>
        </div>
    </div>
</body>
</html>

4.3 导航栏

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>导航案例</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        ul {
            list-style: none;
        }

        a {
            text-decoration: none;
        }
        .nav {
            margin: 30px auto;
            width: 640px;
            height: 50px;
            background-color: #ffc0cb;
        }

         .nav li {
            float: left;   
            width: 80px;
            height: 50px;
            line-height: 50px; 
        } 

        .nav li a {
            display: block; 
            font-size: 16px;
            color: #fff ;
            text-align: center;
        } 

        .nav li:hover {
            background-color: #008000;
        }
    </style>
</head>
<body>
    <div class="nav">
        <ul>
            <li><a href="">新闻1</a></li>
            <li><a href="">新闻2</a></li> 
            <li><a href="">新闻3</a></li>
            <li><a href="">新闻4</a></li>
            <li><a href="">新闻5</a></li>
            <li><a href="">新闻6</a></li>
            <li><a href="">新闻7</a></li>
            <li><a href="">新闻8</a></li>
        </ul>
    </div>
</body>
</html>

5.清除浮动

子元素浮动了,此时子元素不能撑开标准流的块级父元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .top {
            width: 1000px;
            /* height: 300px; */
            background-color: green;
        }

        .top .left {
            float: left;
            width: 300px;
            height: 300px;
            background-color: red;
        }

        .top .right {
            float: right;
            width: 600px;
            height: 300px;
            background-color: grey;
        }

        .bottom {
            width: 1000px;
            height: 400px;
            background-color: aqua;
        }
    </style>
</head>
<body>
    <div class="top">
        <div class="left"></div>
        <div class="right"></div>
    </div>
    <div class="bottom"></div>
</body>
</html>


方法

1直接设置父元素的高度

优点:简单方便

缺点:有些布局不能固定父元素高度

2:额外标签法

在父元素内的最后添加一个块级元素,给添加的块级元素设置clear:both

缺点:会在页面中添加额外的标签,会让页面html结构变得复杂

3:伪元素清除法【推荐使用】

用伪元素替代了额外标签

.clearfix::after{
   content:'';
   display:block;
   clear:both;
   
   height:0;
   visibility:hidden;  
}

优点:项目中使用,直接给标签加类即可清除浮动

4:给父元素设置overflow:hidden

优点:方便

posted @ 2022-03-01 20:11  cjw1219  阅读(215)  评论(0编辑  收藏  举报