在打开一些框架查看源码的时候,我们经常会看到这三个标点符号:“+” 、“>”、“ ,”,别说你没见过,但这些东西都是干啥的有啥用,俺就来给大家说说。
css提供了很多的选择器供开发者更加方便的选择html的dom元素节点,下面我们就来列举一下,被很多初学者忽略的2种选择器和一个选择器分组;
1.,(英文逗号)
选择器分组,将有相同样式的不同dom元素赋值统一样式,可以范围精简代码,和统一页面上的部分控件的交互样式,目前比较流行的前端框架bootstrap就运用了大量的分组。
如:
/* no grouping */ h1 {color:blue;} h2 {color:blue;} h3 {color:blue;} h4 {color:blue;} h5 {color:blue;} h6 {color:blue;}
可以合并为
/* grouping */ h1, h2, h3, h4, h5, h6 {color:blue;}
分组提供了一些有意思的选择。例如,下例中的所有规则分组都是等价的,每个组只是展示了对选择器和声明分组的不同方法:
/* group 1 */ h1 {color:silver; background:white;} h2 {color:silver; background:gray;} h3 {color:white; background:gray;} h4 {color:silver; background:white;} b {color:gray; background:white;} /* group 2 */ h1, h2, h4 {color:silver;} h2, h3 {background:gray;} h1, h4, b {background:white;} h3 {color:white;} b {color:gray;} /* group 3 */ h1, h4 {color:silver; background:white;} h2 {color:silver;} h3 {color:white;} h2, h3 {background:gray;} b {color:gray; background:white;}
2. +(加号)
相邻兄弟选择器(Adjacent sibling selector)可选择紧接在另一元素后的元素,且二者有相同父元素。
PS:这个应该是被大家很容易忽略的东西,博主表示自己平时也没怎么用过。
下面的代码是让h1后面的紧跟的第1个p元素有一个距离顶部50像素的外边距;
<!DOCTYPE HTML> <html> <head> <style type="text/css"> h1 + p {margin-top:50px;} </style> </head> <body> <h1>This is a heading.</h1> <p>This is paragraph.</p> <p>This is paragraph.</p> <p>This is paragraph.</p> <p>This is paragraph.</p> <p>This is paragraph.</p> </body> </html>
运行效果如下:
另外这个元素在一些伪装自定义选择控件时也常常用到,比如:
input[type='radio']:checked+label{}
大家可以看一下ace框架里面的这个自定义多/单选按钮是怎么做的
解释:上面的意思就是给每个选中的单选后面紧跟的label一个样式,当然 label肯定是听过伪类添加的如“:after”,如果不知道伪类的同学可以百度一下“css伪类”!
3.>(小写右尖括号)
子元素选择器(Child selectors)只能选择作为某元素子元素的元素。
为什么用?
答:我们平时都是敲一个空格,那个是后代选择器,后代选择器是遍历当前节点之后的所有元素,这时候就会有两个问题:
第一:如果当前节点的后代过于庞大,使用后代选择器很容易污染后代节点中的样式环境,造成样式冲突;
第二:即便是没有样式冲突,浏览器会逐层渲染样式,后代相对子代会增加几倍甚至几十倍的查找次数,影响页面的性能(当然一般不会,不过难免成为压死骆驼的最后一根稻草0.0);
<!DOCTYPE HTML> <html> <head> <style type="text/css"> h1 > strong {color:red;} </style> </head> <body> <h1>This is <strong>very</strong> <strong>very</strong> important.</h1> <h1>This is <em>really <strong>very</strong></em> important.</h1> </body> </html>
运行效果
共有 0 条评论