CSS Selector 就是指 「#main」,「 .price」,「div」这种设定 style 的方式,下面是一个简单的 CSS 写法。
- <style>
- #main {
- font-size: 18px;
- color: red;
- }
- .price {
- font-weight: bold;
- }
- div {
- text-align: left;
- }
- </style>
CSS Selector 不只是有 id , class, tag name 这几个写法,随著时代的进步,现在有了不少新的 selector 方式,,如 :first-child, :before, :after, +, ~, >, =, ^=, ~= 等等,接下来就一一的说明这里 selector 的用法。
「>」比对 Element 下一层
CSS 中常常会对 Parent , Child 下不同的 Style, 「> .class」这个会给下一层的 class 指定 style ,下面是一个简单的范例, list 4 虽然也是用 span 包起来,但是 list 4 的 span 并不是在 「.e1」的下一层,而是 child 的 child 两层,所以他的 style 不会被影响到。
- <style>
- .e1 > span {
- color: red;
- }
- </style>
- <div class="e1">
- <span> list 1</span><br />
- <span> list 2</span><br />
- <span> list 3 </span><br />
- <div> <span>list 4</span> </div><br />
- </div>
list 2
list 3
「+」比对 Element 下一个
下面是一个简单的范例, .e2 的下一个 div 是 list 1,而 list 3 的 tag name 是 span,并不是我们指定的 div 所以不受影响, list 4 则是因为在 .e2 的下两个 element ,所以也不会被影响到。
- <style>
- .e2 + div {
- color: red;
- }
- </style>
- <div class="e2"></div>
- <div> list 1</div>
- <div> list 2</div>
- <br />
- <div class="e2"></div>
- <span> list 3</span><br />
- <div> list 4</div>
list 3
「~」比对 Element 的同一层
「~」会去比对所有同一层的 element ,并且这些 element 必须在原 element 的后面,来看下面的范例, list 1 是在 .e3 的上面,所以不符合这个规则, 「list 2」, 「list 3」,「list 5」都与 .e3 同一个阶层,并目在 .e3 后面。
「~」和上一个 「+」有一点类似,但还是有差别的,「div + span」这个只会比对 div 的下一个 span ,而 「div ~ span」则是比对 div 后面的全部 span。
- <style>
- .e3 ~ div {
- color: red;
- }
- </style>
- <div> list 1</div>
- <div class="e3"></div>
- <div> list 2</div>
- <div> list 3</div>
- <span> list 4</span><br />
- <div> list 5</div>
「=」 Element Attribute
先定义一下 element 是指 「div」,「span」,「input」 这种 HTML Tag Name。
- <style>
- input[type="text"] {
- color: red;
- }
- </style>
- <input type="text" value="test" />
「~=」Element Attribute 部分相同
Attribute ~= word ,这个 selector 是指 attribute 中要存在 word 这个单字,上一个范例是要字串完全一样,但是 「~= 」这个方式只要整个句子里,其中一个单字相同即可,测试过中文后,发现中文也是有效果的。
- <style>
- input[value ~= "string"] {
- color: red;
- }
- .word[data ~= "department"]{
- color: red;
- }
- .word[data ~= "中文"]{
- color: red;
- }
- </style>
- <input type="text" value="test string" />
- <div class="word" data="house department">a b c d</div>
- <div class="word" data="中文 测试">中文也会有效果</div>
「^=」Element Attribute 比对开头字母
「^=」 这个指比对开头的字母,只要开头的部分相同,这个 Selector 就成立,例如下面这个范例,「test」这个字因为开头是 te 所以 CSS Selector 会影响到这个 input ,而将文字变成红色。
- <style>
- input[value^="te"] {
- color: red;
- }
- </style>
- <input type="text" value="test" />
「$=」Element Attribute 结尾相同
「$=」 这个指比对结尾的字母,只要结尾的部分相同,这个 Selector 就成立,例如下面这个范例,「test」这个字因为结尾是 st所以 CSS Selector 会影响到这个 input ,而将文字变成红色。
- <style>
- input[value$="st"] {
- color: red;
- }
- </style>
- <input type="text" value="test" />
「*=」Element Attribute 部分文字相同
「*=」 这个指比对片段的字母,只要部分字母相同,这个 Selector 就成立,例如下面这个范例,「itisalonglongstring」这个字因为有出现 along 所以 CSS Selector 会影响到这个 input ,而将文字变成红色,若是我把文字切开成「It is a long long string."」,那这个比对就会失败,因为比对的字串 「along」没有「空白」。
- <style>
- input[value*="along"] {
- color: red;
- }
- </style>
- <input type="text" value="Itisalonglongstring" />
- <input type="text" value="It is a long long string." />
「|=」Element Attribute 内容用「-」 接起来
[class|=test] 代表 class 一定要是 test 或 prefix 为 test-。
- <style>
- input[name|=user] {
- color: red;
- }
- [class|=user] {
- color:red;
- }
- </style>
- <input name="user-firstName" value="John"/> <br /><br />
- <div class="user-firstName">
- John
- </div>
- <div class="user">
- John Chen
- </div>
「:empty」Element 完全空白
:empty 是用在整个 element 中完全没有任何其他的 Element ,也没有任何的文字或是空白,像一般网站的搜寻结果页面,如果搜寻出来的结果是空白,通常我们都会再挂上一个 className 来写法空白页的 style ,现在你只须要使用「:empty」,就能很简单的做到这个效果。
下面范例,一个 div 是空的,另一个 div 有输入一些文字,这两个 div 就能看出,第一个空白的 div 背景色被改成了红色。
- <style>
- div:empty {
- width: 100px;
- height: 20px;
- background: #c00;
- }
- </style>
- <div></div>
- <div>Not Empty</div>
「:first-child」第一个 Element
:first-child 这个是指只取得第一个 Element ,例如我有 1 个 div,里面有 1 个 span ,但是这个 span 一定要是 div 内的第一个 。
- <style>
- .ea2 div:first-child {
- color: red;
- }
- </style>
- <div class="ea2">
- <div>list 1</div>
- </div>
- <div class="ea2">
- <span>list 2</span><br />
- <div>list 3</div>
- </div>