Blogger Information
Blog 27
fans 1
comment 0
visits 22453
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
常用选择器,padding和margin的使用方法-2019年9月3日
思杰的博客
Original
1274 people have browsed it

1. 实例演示相邻选择器与兄弟选择器,并分析异同
2. 实例演示:nth-child() 和 :nth-of-type()选择器,并分析异同
3. 实例演示:padding 对盒子大小的影响与解决方案, 使用宽度分离或box-sizing
4. 实例演示: margin中的同级塌陷, 嵌套传递与自动挤压, 并提出解决方案或应用场景


        (一)实例演示相邻选择器与兄弟选择器,并分析异同

        今天上课讲了常用的选择器,除了id选择器和class选择器外,今天还讲了

属性选择器:

        示例:li[id="bg-blue"] {....}

群组选择器:

        选择不同的元素之间用英文逗号,分隔开来。示例:#bg-blue,.bg-green {...}

相邻选择器:

        用来选中某个元素相邻的下一个元素。示例:#bg-blue + * {...}

兄弟选择器:

        用来选中某个元素相邻的接下来的所有同级的元素。示例:#bg-blue ~ * {...}

        下面是具体的代码演示:

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- <link rel="stylesheet" href="style1.css"> -->
    <style>
        ul {
            margin: 0;
            padding-left: 0;
            border: 1px dashed red;
        }
        
        ul li {
            list-style: none;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background-color: wheat;
            text-align: center;
            line-height: 40px;
            display: inline-block;
            box-shadow: 2px 2px 1px #888;
        }
        /* 相邻选择器 */
        
        #bg-blue+* {
            background-color: blue;
        }
        /* 兄弟选择器 */
        /* #bg-blue~* {
            background-color: yellow;
        } */
    </style>
</head>

<body>
    <ul>
        <li class="bg-green">1</li>
        <li id="bg-blue">2</li>
        <li class="bg-green">3</li>
        <li class="bg-green">4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
    </ul>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例


1.png        

相邻选择器只能选中元素相邻的下一个元素。


实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- <link rel="stylesheet" href="style1.css"> -->
    <style>
        ul {
            margin: 0;
            padding-left: 0;
            border: 1px dashed red;
        }
        
        ul li {
            list-style: none;
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background-color: wheat;
            text-align: center;
            line-height: 40px;
            display: inline-block;
            box-shadow: 2px 2px 1px #888;
        }
        /* 相邻选择器 */
        /* #bg-blue+* {
            background-color: blue;
        } */
        /* 兄弟选择器 */
        
        #bg-blue~* {
            background-color: yellow;
        }
    </style>
</head>

<body>
    <ul>
        <li class="bg-green">1</li>
        <li id="bg-blue">2</li>
        <li class="bg-green">3</li>
        <li class="bg-green">4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
    </ul>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

2.png

兄弟选择器则可以选择相邻的接下去所有的同级元素。

        (二)实例演示:nth-child() 和 :nth-of-type()选择器,并分析异同

        nth-child()跟nth-of-type()用法差不多,区别在于,nth-child选择的是子元素,而nth-of-type选择的是标签的类型。

        如果关注点是位置,则用nth-child,如果既关注位置,又关注类型,则用nth-of-type。

下面是第一个示例,我们要选中下图中两个div中的第二个元素,将背景颜色改为绿色。

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div :nth-last-child(2) {
            background-color: green;
        }
    </style>
</head>

<body>
    <div>
        <p>蛮王</p>
        <p>瑞文</p>
        <li>贾克斯</li>
    </div>

    <div>
        <p>金克丝</p>
        <li>拉克丝</li>
    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

3.png

但是如果我们想只选择上面那个div里面的第二个p标签的话,那么就可以用到nth-of-type选择器。代码如下:

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        /* div :nth-last-child(2) {
            background-color: green;
        } */
        
        p:nth-of-type(2) {
            background-color: yellow;
        }
    </style>
</head>

<body>
    <div>
        <p>蛮王</p>
        <p>瑞文</p>
        <li>贾克斯</li>
    </div>

    <div>
        <p>金克丝</p>
        <li>拉克丝</li>
    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

4.png

        (三)实例演示:padding 对盒子大小的影响与解决方案, 使用宽度分离或box-sizing

        盒子模型里面,如果想要将图片放在容器中间的话,我们可以使用padding的方法去给容器添加内边距,把图片顶到中间去。

方法一:

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>padding</title>
    <style>
        div {
            width: 200px;
            background-color: blueviolet;
            padding: 75px;
        }
        
        div {
            width: 50px;
        }
    </style>
</head>

<body>
    <div>
        <img src="./1.jpg" alt="" width="50px" height="50px">
    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

5.png

方法二-宽度分离:

增加一个中间层,在里面的容器里设置padding

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>padding</title>
    <style>
        .box1 {
            width: 200px;
            background-color: blueviolet;
        }
        
        .box2 {
            padding: 75px;
            width: 50px;
        }
    </style>
</head>

<body>
    <div class="box1">
        <div class="box2">
            <img src="./1.jpg" alt="" width="50px" height="50px">
        </div>

    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

5.png

方法三:box-sizing

通过box-sizing把盒子从content边缘变成border边缘。这样盒子就不会被撑大了。

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>padding</title>
    <style>
        .box1 {
            width: 200px;
            background-color: blueviolet;
            box-sizing: border-box;
            padding: 75px;
        }
    </style>
</head>

<body>
    <div class="box1">
        <img src="./1.jpg" alt="" width="50px" height="50px">

    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

5.png

        (四)实例演示: margin中的同级塌陷, 嵌套传递与自动挤压, 并提出解决方案或应用场景

        margin的问题比较多,分为同级塌陷、嵌套传递和自动挤压。

同级塌陷:

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>同级塌陷</title>
    <style>
        .item1 {
            width: 100px;
            height: 100px;
            margin-bottom: 30px;
            background-color: pink;
        }
        
        .item2 {
            width: 100px;
            height: 100px;
            margin-top: 20px;
            background-color: blue;
        }
    </style>
</head>

<body>
    <div class="item1"></div>
    <div class="item2"></div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

6.png

当上下都有margin属性时,会产生同级塌陷,就是说那个margin属性大,就显示哪个margin属性,另外一个margin属性不显示。

嵌套传递:

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>嵌套传递</title>
    <style>
        .box3 {
            width: 200px;
            height: 200px;
            margin-bottom: 30px;
            background-color: pink;
        }
        
        .box4 {
            width: 100px;
            height: 100px;
            margin-top: 20px;
            background-color: blue;
            margin-top: 50px;
        }
    </style>

</head>

<body>
    <div class="box3">
        <div class="box4"></div>
    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

7.png

明明给里面的div设置了margin属性,但是实际上却是外面的div有了margin属性,这个就叫做嵌套传递。解决方法有给父元素加一个padding属性,把子元素顶下去。

自动挤压:

如果给一个元素设置左边边距为自动值的话,那么浏览器就会把尽可能大的空间给到这个元素。同理,如果是右边距是自动值的话,就右边距给到最大。所以如果左右都是auto的话,那么这个元素就会居中了。

实例

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>自动挤压</title>
    <style>
        .box {
            width: 150px;
            height: 150px;
            background-color: blue;
            margin: auto;
        }
    </style>
</head>

<body>
    <div class="box"></div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

8.png

这个特点以后可以用在想把元素在浏览器居中的时候使用,非常方便。

Correction status:qualified

Teacher's comments:关于选择器, css中定义了太多, 一定要有所重点
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments