Blogger Information
Blog 5
fans 0
comment 0
visits 2642
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
9月3日作业(相邻选择器、兄弟选择器、伪类选择器、padding对于盒模型的影响以及margin对于盒模型的影响)
卢骏的博客
Original
393 people have browsed it

9月3日作业:
1. 实例演示相邻选择器与兄弟选择器,并分析异同

为了实例演示出相邻选择器和兄弟选择器的功能,我们设计了10个li标签组成的小球,其中,1、3、4、5、6号小球被定义为class=“bg-green”,2号小球被定义为id=“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">
    <link rel="stylesheet" href="css/style.css">
    <title>伪类中子元素选择器和类型选择器的差异</title>
</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 class="bg-green">5</li>
        <li class="bg-green">6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
        <li>10</li>
    </ul>


</body>

</html>

运行实例 »

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

通过群组选择器,我们将这6个小球都定义为蓝色边框

#bg-blue, .bg-green {
    border: 2px solid blue;
}

1.png

通过定义相邻选择器

#bg-blue + * {
    background-color: yellow;
}

第2个li标签的下一个相邻标签,也就是第3个li标签背景颜色将被定义为黄色,结果如下:

2.png

我们可以看到,如果将+替换为~,与#bg-blue相邻的同级元素(第3个开始的同一级的元素,背景色全部变为灰色。)

#bg-blue ~ * {

    background-color: grey;
}

而我们这里也需要特别注意,兄弟选择器的属性优先级高于相邻选择器,我们可以注意到,#bg-blue的黄色背景被灰色背景替换了。

4.png

总结:相邻选择器和兄弟选择器是对相邻元素的选择定义,可以理解为与他相邻的下一个元素定义属性值,相邻选择器一般采用“ 选择器 + * {   }”方式定义,只能针对下一个元素定义属性值;

兄弟选择器是对选择器相邻的(下一个的)所有同级元素的定义,一般来说,兄弟选择器采用 “ 选择器 ~ * {    }”方式定义,可将属性值应用到相邻同级的全部元素上 。

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

nth-child() 和 :nth-of-type() 同属于伪类选择器,其中:

:nth-child() 属于子类选择器,从字面上看,child可以理解为对于子元素的控制,()是指定的子元素位置,从1开始;

还是以上面的小球举例,我们针对ul标签下的子元素进行定义,下面共计10个标签,我们选择将其中的第5个子元素的背景颜色改为亮粉色,只需要:

/* 伪类:子元素选择器,如果我们需要指定第几个,采用:nth-child(),其中()内填入的就是第几个,此处是从1开始 */
/* 例如,我们希望对第5个球的背景色指定为lightpink,可以改为 */
ul :nth-child(5) {
    background-color: lightpink;
}

5.png

:nth-of-type() 属于类型选择器,of-type可以从字面上理解为对于同类型的元素的选择,同样()也是对于元素的索引,从1开始,例如,我们针对li类型的第5个li元素的背景和字体颜色进行设置。

ul li:nth-of-type(5) {
    background-color: gray;
    color: white;
}

6.png

在实际使用中,如果关注点在于位置,那么采用:nth-child() 即可,如果既关注位置,又关注类型,采用:nth-of-type()。


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

我们首先设置了一个宽度为400px的div,然后将一张300像素的图片放置到容器中,并将padding设置为50px,从理论上,图片将会居中显示,但实际情况却不是,padding将容易撑大了,增加了100个px。

<body>
    <div class="box1">
        <img src="images/girl.jpeg" alt="妹纸" width="300">
    </div>
</body>
.box1 {
    width: 400px;
    border: 1px solid black;
    background-color: lightgreen;
}
.box1 {
    padding: 50px;
    /* width: 300px; */
}

1.png

在本例中,如果我们需要将将图片居中显示,而又不改变显示效果的情况下,有三种方式:

a、采用修改div容器的大小,将box1的宽度改成300px,与图片相同,再周边增加50的padding值,最后时限400像素容器,图片居中显示的效果。

.box1 {
    width: 300px;
    border: 1px solid black;
    background-color: lightgreen;
}
.box1 {
    padding: 50px;
    /* width: 300px; */
}


2.png

b、采用宽度分离方式,宽度分离实际是在div的外层再嵌套一个div作为中间件,设置外层div宽度,内层div仅仅设置padding值来实现宽度分离效果,这种方式已经被淘汰,并不建议使用。

    <div class="box1">
        <img src="images/girl.jpeg" alt="妹纸" width="300">
    </div>
    <div class="wrap">
        <div class="box2">
            <img src="images/girl.jpeg" alt="妹纸" width="300">
        </div>
    </div>
.wrap {
    width: 400px;
}
.box2 {
    background-color: lightblue;
    padding: 50px;
    border: 1px solid black;
}

3.png

c、采用box-sizing方法,box-sizing是一种在css3中常见的定义盒模型大小的方式,特点是一旦采用这种方式定义大小,padding和broder等都会被考虑进去,padding挤压出多余宽度高度的情况被有效避免,是一种现阶段最常用的定义大小的方式。

    <div class="box1">
        <img src="images/girl.jpeg" alt="妹纸" width="300">
    </div>
    <div class="wrap">
        <div class="box2">
            <img src="images/girl.jpeg" alt="妹纸" width="300">
        </div>
    </div>
    <div class="box3">
        <img src="images/girl.jpeg" alt="妹纸" width="300">
    </div>
/* box-sizing */
.box3 {
    width: 400px;
    box-sizing: border-box;
    padding: 50px;
    background-color: bisque;
    border: 1px solid black;
}

4.png

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

当出现上下两个并列的div块,上面div的margin-bottom和下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值,例如在本例子中,当box1的外边距为50像素,box2的上外边距为30像素时,两个box之间的间距并非50+30,而是取其中最大的50px作为值。

    <!-- 1.同级塌陷; 2.嵌套传递; 3.自动挤压。 -->
    <div class="box1"></div>
    <div class="box2"></div>
.box1 {
    width: 100px;
    height: 100px;
    background-color: lightblue;
}
.box2 {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
}
.box1 {
    margin-bottom: 50px;
}
.box2 {
    margin-top: 30px;
}

5.png

b、嵌套传递,是指在当一个div嵌套另一个div时,当设置里面子div的margin值,会传递给父div,例如本例中,div4设置的margin值,会传递给div3,当我们设置div4的margin-top为50px,div4没有如我们的期望的,距离div3的上边框50px,而是和div3一起,距离顶端出现50px。这就是margin的嵌套传递。

    <!-- 2嵌套传递 -->
    <div class="box3">
        <div class="box4"></div>
    </div>
.box3 {
    width: 200px;
    height: 200px;
    background-color: lightblue;
}
.box4 {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    margin-top: 50px;
}

8.png

如果我们希望将div4距离div3的上边距30px,我们可以采用2种方式解决:

第一种方式是设置div3的padding值,div4的外边距对于他的父级元素div3来说,就是内边距,因此,我们设置DIV3的padding-top即可实现将div4下移。

.box3 {
    width: 200px;
    height: 200px;
    background-color: lightblue;
    padding-top: 50px;
}
.box4 {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    /* margin-top: 50px; */
}

8.png

从图中我们可以看到,div4已经距离div3的上边距30px,但同时,div3被撑大,为了实现不撑大的效果,我们需要将div3的高度减去增加的50px,将高度设置为150px,可以实现我们希望的效果。

1.png

.box3 {
    width: 200px;
    height: 150px;
    background-color: lightblue;
    padding-top: 50px;
}
.box4 {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
    /* margin-top: 50px; */
}

c、自动挤压,当我们对一个margin设置auto属性时,他会依据我们设置的左右来判断是给左侧还是右侧最大的数值,例如margin-left:auto时,div将会被挤到浏览器的最右侧显示,当margin-right:auto的时候,div将被挤压到最左侧显示。

当我们同时设置margin-left:auto ,margin-right:auto的时候,div将居中显示,一般此时我们会简写为margin:auto

.box5 {
    width: 150px;
    height: 150px;
    background-color: lightblue;
}
.box5 {
    /* margin: auto; 会自动居中*/
    margin-left: auto;
    margin-right: auto;
}


Correction status:qualified

Teacher's comments:选择器掌握几个常用的基本够用了, 太多的伪类并不好,但也要知道怎么用. padding和margin非常有意思, 值得研究研究
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
Author's latest blog post