企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 前言 css选择器,是前端的基本功,只要你是一个前端,这个一定要掌握!今天之所以要重温一下css[选择器](http://www.haorooms.com/search?keyword=%E9%80%89%E6%8B%A9%E5%99%A8),主要是和大家再复习一下css选择器中的一些常用符号的使用,例如“+、~、^、$、>、*”等的使用!之所以要复习呢,是因为我一个写后端的哥们,前端写的也很好,但是他今天突然问我,css中加号和大于号是啥意思?我说,这个貌似jquery中也有吧!好吧,可能这些符号不常用,造成我们对这些符号的陌生!那么今天,我们一起再来复习一下吧! ## 我之前的文章 大家在右侧搜索框中搜索“[选择器](http://www.haorooms.com/search?keyword=%E9%80%89%E6%8B%A9%E5%99%A8)”,会发现,我之前写过css用伪类[nth-child](http://www.haorooms.com/post/css3_nth-child),进行奇偶行的选择。今天,关于css3伪类选择器,我就不多描述了!同时大家也可以看一下我之前写的“[jquery常用选择器总结](http://www.haorooms.com/post/jquery_selecter_zj)”,其实,jquery选择器和css选择器类似!特别是在属性选择和组合选择上面!另外,我在小工具里面,也写了[css选择器](http://www.haorooms.com/tools/css_selecter/),这个比较全,里面包含伪类、伪元素、属性等等!地址是:[http://www.haorooms.com/tools/css_selecter/](http://www.haorooms.com/tools/css_selecter/) 感兴趣的可以看一下! ## css选择器之特殊符号 **1、>(大于号)** 大于号代表选择子元素,这个我们经常用,值得注意的是 h1>strong 和h1 strong的区别 这2个都是选择子元素,但是 h1>strong 只选择某个元素的子元素。例如如下: ~~~ <h1>This is <strong class="haorooms">very</strong> <strong>very</strong> important.</h1> <h1>This is <em>really <strong>very</strong></em> important.</h1> ~~~ h1>strong ,只有第一个h1下面的strong被选中,第二个不起作用。但是 h1 strong,所有的h1下面的strong都被选中了。 **2、+号** 选择相邻兄弟,这点和jquery相同。 例如: ~~~ <h1>This is a heading.</h1> <p>This is paragraph.</p> <p>This is paragraph.</p> h1 + p {margin-top:50px;} //h1后面的第一个p元素会有50px的间距。代表选择紧接在 h1 元素后出现的段落 ~~~ ## 属性选择器 css属性选择器用处也比较多,之前参加第二节css开发者大会的时候,有的老师分享,他们公司基本上都是用属性选择器来写css,这样字面明了,他们都不怎么用class。我感觉这个要分情况,那个老师讲的项目是angularjs的,因此属性选择器比较实用! ### 举几个例子 **1、把包含标题(title)的所有元素变为红色** 如下写: ~~~ *[title] {color:red;} ~~~ **2、将同时有 href 和 title 属性的 HTML 超链接的文本设置为红色** ~~~ a[href][title] {color:red;} ~~~ **3、指定将[http://www.haorooms.com/post/css_wl_wys](http://www.haorooms.com/post/css_wl_wys) 这篇文字颜色变红** ~~~ a[href="http://www.haorooms.com/post/css_wl_wys"] {color: red;} ~~~ 当然也可以多个属性一起,这里就不多举例了! **4、属性与属性值必须完全匹配** 我们来看一个class的div ~~~ <p class="important haorooms">This paragraph is a very important warning.</p> ~~~ 我们用class选择,大家都晓得,很简答,但是用属性选择,我们用如下: ~~~ p[class="important"] ~~~ 是选择不到的,因为还有一个haorooms。因此,必须这样写: ~~~ p[class="important haorooms"] {color: red;} ~~~ **5、根据部分属性值选择** 看到上面多个属性必须完全匹配,很不爽,那么有没有可以部分匹配属性的方法呢?答案是有的。还是上面的例子,我们如下选择就可以了! ~~~ p[class~="haorooms"] {color: red;} ~~~ 如果需要根据属性值中的词列表的某个词进行选择,则需要使用波浪号(~)。 **6、字符串匹配属性选择器** 上面说到了~(波浪号选择),有朋友会把他和*= 搞混,例如,如下例子: ~~~ <p haorooms="importanthaorooms">This paragraph is a very important warning.</p> ~~~ 我们可以用[haorooms * ="haoroom"]来选择,这个和~的区别就是包含,~是几个属性直接有空格,空格中的一个。*=没有空格,但是包含某个字符。除此之外,还有开头选择和结尾选择,和jquery类似: ~~~ [haorooms^="haorooms"] 选择 haorooms 属性值以 "haorooms" 开头的所有元素 [haorooms$="haorooms"] 选择 haorooms 属性值以 "haorooms" 结尾的所有元素 ~~~ **7、特定属性选择类型** 请看下面的例子: ~~~ *[lang|="en"] {color: red;} ~~~ 上面这个规则会选择 lang 属性等于 en 或以 en- 开头的所有元素。因此,以下示例标记中的前三个元素将被选中,而不会选择后两个元素: ~~~ <p lang="en">Hello!</p> <p lang="en-us">Greetings!</p> <p lang="en-au">G'day!</p> <p lang="fr">Bonjour!</p> <p lang="cy-en">Jrooana!</p> ~~~ **8、CSS3 element1~element2 选择器** 同样是~波浪号,上面第五条那么用,代表部分属性选择,假如p~ul 这么用,代表:**所有相同的父元素中位于 p 元素之后的所有 ul 元素**。 例如: ~~~ p~ul { background:#ff0000; } ~~~ html代码如下: ~~~ <div>一个 div 元素。</div> <ul> <li>咖啡</li> <li>牛奶</li> <li>茶</li> </ul> <p>第一段。</p> <ul> <li>咖啡</li> <li>牛奶</li> <li>茶</li> </ul> <h2>另一个列表</h2> <ul> <li>咖啡</li> <li>牛奶</li> <li>茶</li> </ul> ~~~ 上面代码中,大家可以试一下:第一段,之后的2个UL都是红色!第一段前面的一个UL是没有反应的! ## 小结 今天就先总结到这来,css选择器,是比较重要的知识点,希望大家多多复习,温故而知新!希望这篇文章对您有所帮助!