博主信息
博文 7
粉丝 0
评论 0
访问量 6616
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
相邻选择器与兄弟选择器、nth-child() 和 :nth-of-type()选择器的异同;padding 对盒模型的影响与解决以及margin中的同级塌陷, 嵌套传递与自动挤压的方案解决和应用--2019年9月3日22时
非常烟贩的博客
原创
805人浏览过

问题目录

1、实例演示相邻选择器与兄弟选择器,并分析异同

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

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

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

  • 1. 相邻选择器:选择该元素相邻一个元素。用+*

<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>

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

1.jpg

      兄弟选择器:又称相邻兄弟选择器。选择该元素后面所有的元素。用~*

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

2.jpg

  • 2.伪类:子元素选择器 ul空格 (根据位置来进行选择。相邻和兄弟选择器必须失效后才能用)。如:nth-child()




ul :nth-child(6) {
    /* 选中某一个元素 ,括号中为索引,从1开始*/
    background-color: coral;
}

3.jpg

       伪类: 类型选择器 ul li。推荐使用。如:nth-of-type ()

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

4.jpg

         二者功能一样,但关注点不同, 如果关注点是位置: 用nth-child。既关注位置, 又关注类型, 用 nth-of-type

  • 3.内边距padding会撑开盒子,box-sizing默认为内容content宽度。当盒子有border或者padding时,盒子box的宽度就不是我们所设置的那样,而是盒子的实际宽度= width + border + padding;盒子的内容content宽度=width盒子内容的实际宽度 content = width - padding - border;

    改变的方法:

    (1)宽度分离:给box设置一个父级div。当在给box在设置border,padding时就会在div内部改变,而不会改变box的宽度,这个时候box的宽度等于父级元素div的宽度。

/*宽度分离*/
.wrap {    /*父级div宽度*/
    width: 300px;
}

.box2 {
    padding: 50px;
    background-color: lightblue;
    border: 1px solid black;
}

<!--宽度分离-->
<div class="wrap">
    <div class="box2">
        <img src="static/images/girl.jpg" alt="小姐姐" width="200">
    </div>
</div>

5.jpg


实际的宽度=300px;

实际的内容content宽度=300-50-50-1-1px;

(2)用box-sizing  :将盒子Box的宽度从content-box内容宽度定义为border-box宽度。

<!--box-sizing-->
<div class="box3">
    <img src="static/images/girl.jpg" alt="小姐姐" width="200">
</div>

/*box-sizing*/
.box3 {
   width: 300px;
   box-sizing: border-box;
   padding: 50px;
   background-color: pink;
   border: 1px solid black;
}

6.jpg

实际的宽度=300px;

实际的内容content宽度=300-50-50-1-1px;

  • 4.margin中的同级塌陷、嵌套传递、自动挤压

(1)同级塌陷:垂直方向上的高度塌陷,以margin大者为相距。应用情景---容器与容器之间的布局定位。

    <!--1. 同级塌陷-->
    <div class="box1"></div>
    <div class="box2"></div>

/* 1.同级塌陷 */
.box1 {
    width: 100px;
    height: 100px;
    background-color: lightblue;
}
.box2 {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
}
.box1 {
    margin-bottom: 50px;
}
.box2 {
    margin-top: 30px;
}

7.jpg

(2)嵌套传递:两个块级元素成嵌套级关系,子元素的外边距margin会自动传递到父元素。应用情景---相互嵌套的容器之间的布局定位。

    <!--2. 嵌套传递-->
    <div class="box3">
        <div class="box4"></div>
    </div>


/* 2.嵌套传递 */
.box3 {
    /* box-sizing: border-box; */
    width: 200px;
    height: 200px;
    background-color: lightblue;
}

.box4 {
    width: 100px;
    height: 100px;
    background-color: lightcoral;
}

.box4 {
    margin-top: 50px;
}

8.1.jpg

8.2.jpg

解决办法:在父级盒子上将我们子元素上面的外边距转为父级盒子上的内边距

8.3.jpg


(3)自动挤压:某个元素设置它所有的外边距时候,它会产生一个自动挤压,将指定位置的空间留给对方,尽可能的扩大。应用情景---单个容器的布局定位。

  <!--3. 自动挤压-->
    <div class="box5"></div>

/********** 3. 自动挤压 **********/

.box5 {
    /*box-sizing: border-box;*/
    width: 150px;
    height: 150px;
    background-color: lightblue;
}

.box5 {
    margin: 30px auto;
    /* 上下外边距30,左右居中 */
}

9.jpg

















批改状态:合格

老师批语:这都是css布局中最基本的常识, 一定要记住
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学