选择器
标签选择符:
用标签名来表示,用来描述网页元素类型的;通常与其他选择符组合使用,返回一组元素
p{text-align:center;} /*段落 文本居中*/
id选择符:
用'#'表示,用来选择网页中用id属性声明的元素,只返回一个元素
#header{backgroud-color:#ccc;} /*设置背景为灰色*/
类选择符:
用英文的'.'来表示,用来选择使用了class属性声明的元素,通常返回一组相关元素
.blue{color:blue;} /*设置元素文本颜色为蓝色*/
属性选择符:
除class和id,style以外的属性都可以,属性放在一对方括号中[],可以指定多个属性,还可以以对属性值进行正则查询。
[title="http://www.php.cn"]{font-size:20px;}/*将具有该属性的元素文本大小设置为20像素*/
群组选择符:
可以设置多个元素共用样式,用逗号分隔每个选择符
h1,h2,h3,h4,h5,h6{font-weight:lighter;}/*去掉标题元素的加粗样式*/
后代选择符:
根据元素隶属关系来选择,多个选择符之间,用空格分隔
section h1{color:red;}/*将section元素下面所有h1元素文本设置为红色*/
子代选择符:
只选择当前元素直接子元素,用'>'表示,非常复杂,应用了大量伪类元素,是学习的重点。
div > h1{ color: green;}/*将div元素下面子级h1元素文本设置为绿色*/
伪类选择符:
伪类主要应用在特定标签上,表示当前元素的状态。例如a标签的4种状态,未访问,已访问,鼠标悬停,点击中等
a:visited { color: gray;} /*将访问过的链接文本颜色设置为灰色*/
伪元素选择符,设置首字母下沉效果,或者首行的显示效果,主要适合英文,中文应用不多,了解即可
first-letter:设置段落首行的首字母样式
first-line:设置段落首行文本的样子
通用选择符*与同辈选择符+(不推荐使用)
*{font-size: 12px;}: /*设置网页中文本均为12像素*/
可以一次性设置所有标签的统一样式,效率低,影响到了样式继承
p + a{color: pink;}: /*设置p和相邻a标签文本为粉色*/
通常用其他更高效的选择符代替他
实例演示相邻选择器与兄弟选择器,并分析异同
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>选择器</title> <style> ul { margin: 0; /*将外边距清零*/ padding-left: 0; /*将左侧的内边距清零*/ border: 1px dashed red; /*设置红色虚线*/ } ul li { list-style-type: none; /*将li标签的黑色圆点类型去掉*/ width: 40px; height: 40px; /*宽高都设置为40px*/ background-color: wheat; /*设置背景色*/ /*border: 1px solid black;*/ /*边框*/ /*水平和垂直的居中*/ text-align: center; /*水平*/ line-height: 40px; /*垂直居中的技巧:当前元素的高度和行高设置成一样的(单行文本)*/ border-radius: 50%; /*设置圆角,50%*/ /*将一个块级元素转为内联元素*/ display: inline-block; /*阴影,向右向下偏移两个像素,扩散一个像素,阴影的色彩为回*/ box-shadow: 2px 2px 1px #888; } /*相邻选择器*/ #bg-blue + * { background-color: yellow; } /*兄弟选择器*/ #bg-blue ~ * { /*background-color: green;*/ } </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> </ul> <div> <p>猪哥</p> <li>朱老师</li> <p>西门大官人</p> </div> <div> <p id="bg-blue">欧阳克</p> <li>金莲妹妹</li> <a href="">百度</a> </div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
分析:代码中注释了兄弟选择器,只有相邻选择器,#bg-blue + * { background-color: yellow;} 会将id为bg-blue的元素的下一个同级元素的背景变为黄色,代码中有两处,打开代码中的兄弟选择器#bg-blue ~ * {/*background-color: green;*/},运行,会发现id为bg-blue的元素的后面所有的同级元素都变成了绿色。由此可见,兄弟选择器的优先级大于相邻选择器。
实例演示:nth-child() 和 :nth-of-type()选择器,并分析异同
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>选择器</title> <style> ul { margin: 0; /*将外边距清零*/ padding-left: 0; /*将左侧的内边距清零*/ border: 1px dashed red; /*设置红色虚线*/ } ul li { list-style-type: none; /*将li标签的黑色圆点类型去掉*/ width: 40px; height: 40px; /*宽高都设置为40px*/ background-color: wheat; /*设置背景色*/ /*border: 1px solid black;*/ /*边框*/ /*水平和垂直的居中*/ text-align: center; /*水平*/ line-height: 40px; /*垂直居中的技巧:当前元素的高度和行高设置成一样的(单行文本)*/ border-radius: 50%; /*设置圆角,50%*/ /*将一个块级元素转为内联元素*/ display: inline-block; /*阴影,向右向下偏移两个像素,扩散一个像素,阴影的色彩为回*/ box-shadow: 2px 2px 1px #888; } /*伪类: 子元素选择器*/ ul :first-child { /*注意ul后的空格*/ background-color: blue; } ul :last-child { background-color: red; } ul :nth-child(6) { /*索引从1开始*/ background-color: pink; } /*倒数第3个*/ ul :nth-last-child(4) { background-color: green; } </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看nth-child()选择器在线实例
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>选择器</title> <style> ul { margin: 0; /*将外边距清零*/ padding-left: 0; /*将左侧的内边距清零*/ border: 1px dashed red; /*设置红色虚线*/ } ul li { list-style-type: none; /*将li标签的黑色圆点类型去掉*/ width: 40px; height: 40px; /*宽高都设置为40px*/ background-color: wheat; /*设置背景色*/ /*border: 1px solid black;*/ /*边框*/ /*水平和垂直的居中*/ text-align: center; /*水平*/ line-height: 40px; /*垂直居中的技巧:当前元素的高度和行高设置成一样的(单行文本)*/ border-radius: 50%; /*设置圆角,50%*/ /*将一个块级元素转为内联元素*/ display: inline-block; /*阴影,向右向下偏移两个像素,扩散一个像素,阴影的色彩为回*/ box-shadow: 2px 2px 1px #888; } /*伪类: 类型选择器*/ ul li:first-of-type { background-color: darkorange; color: white; } ul li:last-of-type { background-color: darkgreen; color: white; } ul li:nth-of-type(5) { background-color: darkgreen; color: white; } /*将每个div中的第二个子元素背景设置绿色*/ div :nth-child(2) { background-color: lightgreen; } /*选择文档中的第二个p标签的内容*/ p:nth-of-type(2) { background-color: yellow; } /*选中第一个div中的第三个元素*/ div:first-of-type :nth-child(3) { /*background-color: lightblue;*/ } /*打开上面注释,发现第二个标签变为了蓝色,因为他也是第一个div中的第三个元素,两者结合的优先级会更高*/ </style> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul> <div> <p>猪哥</p> <li>朱老师</li> <p>西门大官人</p> </div> <div> <p id="bg-blue">欧阳克</p> <li>金莲妹妹</li> <a href="">百度</a> </div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看nth-of-type()选择器在线实例
关注点不同, 如果关注点是位置: 用nth-child
既关注位置, 又关注类型, 用 nth-of-type
两者结合使用的优先级会更高于单个的使用
padding 对盒子大小的影响与解决方案, 使用宽度分离或box-sizing
使用三种方式写一个加上边框为300px的块,内部图片为200*200px,边框为10px
一般方式:
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>调皮的内边距padding</title> <style type="text/css"> .box1 { width: 200px; height: 200px; border: 10px solid black; /*照片的宽度是200px*/ background-color: lightgreen; padding: 40px; /*padding变大时,盒子也会变大*/ } </style> </head> <body> <!--将图片显示在容器中间--> <div class="box1"> <img src="https://img.php.cn/upload/avatar/000/492/469/5d65e10f25a6f328.jpg" alt="头像" width="200" height="200"> </div> <br /> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
padding变大时,盒子也会变大,padding是在content大小的基础上扩大的,和图片的大小无关,图片会显示在content的左上角,如果要将图片显示在正中间,需要计算,300px的块,边框为10,则content为200*200,padding为40.
宽度分离:
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>调皮的内边距padding</title> <style type="text/css"> .wrap { width: 300px; height: 300px; } .box2 { border: 10px solid black; padding: 40px; background-color: lightblue; } </style> </head> <body> <!--宽度分离--> <div class="wrap"> <div class="box2"> <img src="https://img.php.cn/upload/avatar/000/492/469/5d65e10f25a6f328.jpg" alt="头像" width="200" height="200"> </div> </div> <br /> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
嵌套div,将外侧的div的content固定宽高为300*300,然后编辑内部的div,border为10px,padding为40px。
box-sizing
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>调皮的内边距padding</title> <style type="text/css"> .box3 { width: 300px; height: 300px; box-sizing: border-box; /*padding: 80px;*/ padding: 40px; background-color: pink; border: 10px solid black; } </style> </head> <body> <!--box-sizing--> <div class="box3"> <img src="https://img.php.cn/upload/avatar/000/492/469/5d65e10f25a6f328.jpg" alt="小姐姐" width="200" height="200"> </div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
使用了box-sizing: border-box;盒子的边框固定为300*300px,border为10,padding为40图片居中,如果padding为80,则图片完全紧贴右下角。
实例演示: margin中的同级塌陷, 嵌套传递与自动挤压, 并提出解决方案或应用场景
同级塌陷:
两个盒子同级排列时,比如:一个盒子在上一个在下时,设置上方盒子A的margin-button为50px,下方盒子B的margin-top为50px,控制台查看时,A的下方外边距依然是50px,B的上方外边距依然是50px,但是在视觉上两个之间的距离依然是50px,此时更改B盒子的上方外边距为30px,控制台查看时,A的下方外边距依然是50px,B的上方外边距依然是30px,但是在视觉上两个之间的距离依然是50px,B盒子的上外边距塌陷到A盒子的下外边距中。
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style type="text/css"> .box1 { /*box-sizing: border-box;*/ width: 150px; height: 150px; background-color: lightblue; margin-bottom: 50px; } .box2 { width: 150px; height: 150px; background-color: lightgreen; margin-top: 30px; } </style> <title>捉摸不定的外边距maring</title> </head> <body> <div class="box1"></div> <div class="box2"></div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
嵌套传递:
两个块级元素程父级或嵌套关系,子元素的margin会传递到父元素上
解决方法:如想要子元素距父元素的上方50px,设置外边距会传递,此时可以设置父级元素的内边距为50px
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style type="text/css"> .box3 { box-sizing: border-box; width: 150px; height: 150px; background-color: lightblue; padding-top: 50px; } .box4 { width: 100px; height: 100px; background-color: lightgreen; /*margin-top: 50px;*/ } </style> <title>捉摸不定的外边距maring</title> </head> <body> <div class="box3"> <div class="box4"></div> </div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
自动挤压:
外边距的自动挤压,margin-left:auto;元素会尽可能的压到右边,margin-right:auto;元素会尽可能的压到左边,同时作用会挤压到中间,页面布局时,可以margin:30px auto;居中并且距离顶部30px
实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <style type="text/css"> .box5 { box-sizing: border-box; width: 150px; height: 150px; background-color: lightblue; margin: 30px auto; } </style> <title>捉摸不定的外边距maring</title> </head> <body> <div class="box5"></div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
总结:
在不同情况下选择合适的选择器会事半功倍。
盒子的内边距相关展示内容时,需要计算,注意边框。
盒子的外边距的三种情况需要在布局时多加注意
总是感觉对盒子的理解及使用掌握依旧不是很好,依旧要好好学习。