우리에게 더 친숙한 선택자는 #id .class 및 태그 선택자입니다. 하지만 이것만으로는 충분하지 않습니다. 개발을 더욱 편리하게 하기 위해 이 기사에서는 모든 사람에게 도움이 되기를 바라면서 30가지 CSS3 선택자를 요약합니다.
1 *: 범용 선택기
* { margin:0; padding:0; }
* 선택기는 페이지의 모든 요소를 선택하는 기능입니다. 위 코드의 기능은 모든 요소의 여백과 안쪽 여백을 0으로 설정하는 것입니다. 브라우저의 기본 스타일.
* 선택기는 다음 코드와 같은 하위 선택기에 적용될 수도 있습니다.
#container * { border:1px solid black; }
이런 식으로 ID 컨테이너가 있는 모든 하위 태그 요소가 선택되고 테두리가 설정됩니다.
2 #id: id selector
#container { width: 960px; margin: auto; }
id 선택자는 매우 엄격하여 재사용할 수 없습니다. 여전히 사용할 때는 매우 조심해야 합니다. 스스로에게 물어보세요: 요소를 찾으려면 이 요소에 ID를 할당해야 합니까?
3 .class: 클래스 선택기
.error { color: red; }
클래스 선택기입니다. 여러 요소를 대상으로 할 수 있다는 점에서 id 선택기와 다릅니다. 여러 요소의 스타일을 지정하려는 경우 클래스를 사용할 수 있습니다. 특정 요소를 수정하려면 ID를 사용하여 해당 요소를 찾으세요.
4 selector1 selector2: 하위 선택자
li a { text-decoration: none; }
하위 선택자는 더 일반적으로 사용되는 선택자입니다. 요소 찾기에 대해 더 구체적으로 알고 싶다면 이 방법을 사용할 수 있습니다. 예를 들어, 모든 a 요소를 찾을 필요는 없고 li 태그 아래에 a 태그만 찾을 필요가 있다면 어떻게 될까요? 이때 하위 항목 선택기를 사용해야 합니다.
Tip: 선택기가 X Y Z A B.error처럼 보이면 잘못하고 있는 것입니다. 정말 많은 요소를 수정해야 하는지 항상 스스로에게 상기시키세요.
5 tagName: 태그 선택기
a { color: red; } ul { margin-left: 0; }
ID나 '클래스'가 아닌 페이지의 모든 태그를 찾으려면 간단합니다. 유형 선택기를 직접 사용하면 됩니다.
6 선택기:링크 선택기:방문 선택기:호버 선택기:활성 의사 클래스 선택기
일반적으로 선택기는 태그입니다. 위의 4가지 의사 클래스 선택기의 의미는 다음과 같습니다.
링크: 일반 연결 상태.
visited: 연결을 방문한 후입니다.
hover: 연결 위에 마우스를 올려 놓았을 때.
활성: 연결이 눌렸을 때.
링크가 a 라벨로 이동되지 않은 경우: link
링크가 a 라벨로 이동된 경우: link, hover
a 라벨이 있는 링크가 클릭된 경우: link, hover, active
클릭 후 링크가 a 라벨로 이동하지 않음: link, Visit
a 라벨 클릭 후 이동 시: link, Visit, hover
a 라벨 클릭 후 다시 연결 시: link, Visit, hover, 활동적
모든 조합의 스타일입니다.
동일한 스타일이 여러 개 있으면 나중 스타일이 이전 스타일을 덮어쓰게 되므로 이 네 가지 의사 클래스의 정의에는 순서 요구 사항이 있으며, 이러한 이유로 모두가 'lvha'라고 부릅니다.
7 selector1 + selector2: 인접 선택자
ul + p { color: red; }
지정된 요소의 직계 후속 요소만 선택합니다. 위의 예에서는 모든 ul 태그 뒤의 첫 번째 단락을 선택하고 색상을 빨간색으로 설정합니다.
8 selector1 > selector2 : sub-selector
p#container > ul { border: 1px solid black; }
차이점은 후자 명령이 직접 하위 요소를 선택한다는 것입니다. 아래 예를 보세요.
<p id="container"> <ul> <li> List Item <ul> <li> Child </li> </ul> </li> <li> List Item </li> <li> List Item </li> <li> List Item </li> </ul> </p>
#container > ul은 ID가 'container'인 p 아래의 모든 직접 ul 요소만 선택합니다. 첫 번째 li 아래에서 ul 요소를 찾지 않습니다. 어떤 이유로든 하위 노드에서 결합된 선택기를 사용하면 많은 성능 이점이 있습니다. 실제로 이는 JavaScript에서 CSS 선택기를 사용할 때 적극 권장됩니다.
9 selector1 ~ selector2: 형제 선택자
ul ~ p { color: red; }
형제 노드 조합 선택자는 인접 선택자와 매우 유사하지만 그다지 엄격하지는 않습니다. ul + p 선택기는 지정된 요소 바로 뒤에 오는 요소만 선택합니다. 이 선택기는 대상 요소 다음에 일치하는 모든 요소를 선택합니다.
10 selector[title] : 속성 선택자
a[title] { color: green; }
위 예에서는 title 속성이 있는 요소만 선택됩니다. 이 속성이 없는 앵커 태그는 이 코드로 수정되지 않습니다.
11 selector[href="foo"] : 속성 선택기
a[href="http://strongme.cn"] { color: #1f6053; /* nettuts green */ }
위 코드는 href 속성 값이 http://strongme.cn인 앵커 태그를 녹색으로 설정하고 기타 태그는 영향을 받지 않습니다.
참고: 값을 큰따옴표로 묶었습니다. 그런 다음 Javascript를 사용할 때 큰따옴표를 사용하십시오. 가능하다면 표준 CSS3 선택기를 사용하세요.
12 선택기[href*=”strongme”] : 속성 선택기
a[href*="strongme"] { color: #1f6053; }
指定了strongme这个值必须出现在锚点标签的href属性中,不管是strongme.cn还是strongme.com还是www.strongme.cn都可以被选中。
但是记得这是个很宽泛的表达方式。如果锚点标签指向的不是strongme相关的站点,如果要更加具体的限制的话,那就使用^和$,分别表示字符串的开始和结束。
13 selector[href^=”href”] : 属性选择器
a[href^="http"] { background: url(path/to/external/icon.png) no-repeat; padding-left: 10px; }
大家肯定好奇过,有些站点的锚点标签旁边会有一个外链图标,我也相信大家肯定见过这种情况。这样的设计会很明确的告诉你会跳转到别的网站。
用克拉符号就可以轻易做到。它通常使用在正则表达式中标识开头。如果我们想定位锚点属性href中以http开头的标签,那我们就可以用与上面相似的代码。
注意我们没有搜索http://,那是没必要的,因为它都不包含https://。
14 selector[href$=”.jpg”] : 属性选择器
a[href$=".jpg"] { color: red; }
这次我们又使用了正则表达式$,表示字符串的结尾处。这段代码的意思就是去搜索所有的图片链接,或者其它链接是以.jpg结尾的。但是记住这种写法是不会对gifs和pngs起作用的。
15 selector[data-*=”foo”] : 属性选择器
a[data-filetype="image"] { color: red; }
回到上一条,我们如何把所有的图片类型都选中呢png,jpeg,’jpg’,’gif’?我们可以使用多选择器。看下面:
a[href$=".jpg"], a[href$=".jpeg"], a[href$=".png"], a[href$=".gif"] { color: red; }
但是这样写着很蛋疼啊,而且效率会很低。另外一个办法就是使用自定义属性。我们可以给每个锚点加个属性data-filetype指定这个链接指向的图片类型。
a[data-filetype="image"] { color: red; }
16 selector[foo~=”bar”] : 属性选择器
a[data-info~="external"] { color: red; } a[data-info~="image"] { border: 1px solid black; }
这个我想会让你的小伙伴惊呼妙极了。很少有人知道这个技巧。这个~符号可以定位那些某属性值是空格分隔多值的标签。
继续使用第15条那个例子,我们可以设置一个data-info属性,它可以用来设置任何我们需要的空格分隔的值。这个例子我们将指示它们为外部连接和图片链接。
<a href="path/to/image.jpg" data-info="external image"> Click Me, Fool </a>
给这些元素设置了这个标志之后,我们就可以使用~来定位这些标签了。
/* Target data-info attr that contains the value "external" */ a[data-info~="external"] { color: red; } /* And which contain the value "image" */ a[data-info~="image"] { border: 1px solid black; }
17 selector:checked : 伪类选择器
input[type=radio]:checked { border: 1px solid black; }
上面这个伪类写法可以定位那些被选中的单选框和多选框,就是这么简单。
18 selector:after : 伪类选择器
before和after这俩伪类。好像每天大家都能找到使用它们的创造性方法。它们会在被选中的标签周围生成一些内容。
当使用.clear-fix技巧时许多属性都是第一次被使用到里面的。
.clearfix:after { content: ""; display: block; clear: both; visibility: hidden; font-size: 0; height: 0; } .clearfix { *display: inline-block; _height: 1%; }
上面这段代码会在目标标签后面补上一段空白,然后将它清除。这个方法你一定得放你的聚宝盆里面。特别是当overflow:hidden方法不顶用的时候,这招就特别管用了。
根据CSS3标准规定,可以使用两个冒号::。然后为了兼容性,浏览器也会接受一个冒号的写法。其实在这个情况下,用一个冒号还是比较明智的。
19 selector:hover : 伪类选择器
p:hover { background: #e3e3e3; }
不用说,大家肯定知道它。官方的说法是user action pseudo class.听起来有点儿迷糊,其实还好。如果想在用户鼠标飘过的地方涂点儿彩,那这个伪类写法可以办到。
注意:旧版本的IE只会对加在锚点a标签上的:hover伪类起作用。
通常大家在鼠标飘过锚点链接时候加下边框的时候用到它。
a:hover { border-bottom: 1px solid black; }
专家提示:border-bottom:1px solid black;比text-decoration:underline;要好看很多。
20 selector1:not(selector2) : 伪类选择器
p:not(#container) { color: blue; }
取反伪类是相当有用的,假设我们要把除id为container之外的所有p标签都选中。那上面那么代码就可以做到。
或者说我想选中所有出段落标签之外的所有标签
:not(p) { color: green; }
21 selector::pseudoElement : 伪类选择器
p::first-line { font-weight: bold; font-size:1.2em; }
我们可以使用::来选中某标签的部分内容,如第一段,或者是第一个字。但是记得必须使用在块式标签上才起作用。
伪标签是由两个冒号 :: 组成的
定位第一个字:
p::first-letter { float: left; font-size: 2em; font-weight: bold; font-family: cursive; padding-right: 2px; }
上面这段代码会找到页面上所有段落,并且指定为每一段的第一个字。
它通常在一些新闻报刊内容的重点突出会使用到。
定位某段的第一行
p::first-line { font-weight: bold; font-size: 1.2em; }
跟::first-line相似,会选中段落的第一行
为了兼容性,之前旧版浏览器也会兼容单冒号的写法,例如:first-line,:first-letter,:before,:after.但是这个兼容对新介绍的特性不起作用。
22 selector:nth-child(n) : 伪类选择器
li:nth-child(3) { color: red; }
还记得我们面对如何取到堆叠式标签的第几个元素时无处下手的时光么,有了nth-child那日子就一去不复返了。
请注意nth-child接受一个整形参数,然后它不是从0开始的。如果你想获取第二个元素那么你传的值就是li:nth-child(2).
我们甚至可以获取到由变量名定义的个数个子标签。例如我们可以用li:nth-child(4n)去每隔3个元素获取一次标签。
23 selector:nth-last-child(n) : 伪类选择器
li:nth-last-child(2) { color: red; }
假设你在一个ul标签中有N多的元素,而你只想获取最后三个元素,甚至是这样li:nth-child(397),你可以用nth-last-child伪类去代替它。
24 selectorX:nth-of-type(n) : 伪类选择器
ul:nth-of-type(3) { border: 1px solid black; }
曾几何时,我们不想去选择子节点,而是想根据元素的类型来进行选择。
想象一下有5个ul标签。如果你只想对其中的第三个进行修饰,而且你也不想使用id属性,那你就可以使用nth-of-type(n)伪类来实现了,上面的那个代码,只有第三个ul标签会被设置边框。
25 selector:nth-last-of-type(n) : 伪类选择器
ul:nth-last-of-type(3) { border: 1px solid black; }
同样,也可以类似的使用nth-last-of-type来倒序的获取标签。
26 selector:first-child : 伪类选择器
ul li:first-child { border-top: none; }
这个结构性的伪类可以选择到第一个子标签,你会经常使用它来取出第一个和最后一个的边框。
假设有个列表,每个标签都有上下边框,那么效果就是第一个和最后一个就会看起来有点奇怪。这时候就可以使用这个伪类来处理这种情况了。
27 selector:last-child : 伪类选择器
ul > li:last-child { color: green; }
跟first-child相反,last-child取的是父标签的最后一个标签。
例如
标签
<ul> <li> List Item </li> <li> List Item </li> <li> List Item </li> </ul>
这里没啥内容,就是一个了 List。
ul { width: 200px; background: #292929; color: white; list-style: none; padding-left: 0; } li { padding: 10px; border-bottom: 1px solid black; border-top: 1px solid #3c3c3c; }
上面的代码将设置背景色,移除浏览器默认的内边距,为每个li设置边框以凸显一定的深度。
28 selector:only-child : 伪类选择器
p p:only-child { color: red; }
说实话,你会发现你几乎都不会用到这个伪类。然而,它是相当有用的,说不准哪天你就会用到它。
它允许你获取到那些只有一个子标签的父标签下的那个子标签。就像上面那段代码,只有一个段落标签的p才被着色。
<p><p> My paragraph here. </p></p> <p> <p> Two paragraphs total. </p> <p> Two paragraphs total. </p> </p>
上面例子中,第二个p不会被选中。一旦第一个p有了多个子段落,那这个就不再起作用了。
29 selector:only-of-type: 伪类选择器
li:only-of-type { font-weight: bold; }
结构性伪类可以用的很聪明。它会定位某标签下相同子标签的只有一个的目标。设想你想获取到只有一个子标签的ul标签下的li标签呢?
使用ul li会选中所有li标签。这时候就要使用only-of-type了。
ul > li:only-of-type { font-weight: bold;
最后记住:使用像jQuery等工具的时候,尽量使用原生的CSS3选择器。可能会让你的代码跑的很快。这样选择器引擎就可以使用浏览器原生解析器,而不是选择器自己的。
相关推荐: