## 前言
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选择器,是比较重要的知识点,希望大家多多复习,温故而知新!希望这篇文章对您有所帮助!
- CSS知多少
- css知多少——目录
- css知多少(1)——我来问你来答
- css知多少(2)——学习css的思路
- css知多少(3)——样式来源与层叠规则
- css知多少(4)——解读浏览器默认样式
- css知多少(5)——选择器
- css知多少(6)——选择器的优先级
- css知多少(7)——盒子模型
- css知多少(8)——float上篇
- css知多少(9)——float下篇
- css知多少(10)——display
- css知多少(11)——position
- CSS深入理解
- HTML加载顺序
- CSS网页实战案例
- CSS伪类选择器
- 重温css的选择器
- CSS3的nth-child() 选择器,表格奇偶行变色
- CSS选择器演示
- 那些年踩过的坑之:first-child伪类选择器
- CSS border-image
- CSS3 border-image详解、应用及jQuery插件
- css3:border-image边框图像详解
- CSS3 Border-image
- Flex布局
- Flex 布局教程:语法篇
- Flex 布局教程:实例篇
- Flex 布局示例