>  기사  >  웹 프론트엔드  >  CSS 선택기 정리

CSS 선택기 정리

高洛峰
高洛峰원래의
2017-02-09 11:23:321617검색

많은 사람들이 CSS을 매우 간단하다고 생각하지만, 실제로 CSS를 잘 작성하는 것은 쉽지 않습니다. CSS의 각 항목에는 실제로 많은 내용이 들어 있습니다. 🎜> 선택자는 아마도 다섯 가지 범주로 나눌 수 있습니다: CSS

  • 요소 선택기

  • 관계 선택기

  • 속성 선택자

  • 의사 클래스 선택자

  • 의사 객체 선택자

요소 선택자

选择器 名称 描述
* 通配选择器 选择所有的元素
E 元素选择器 选择指定的元素
#idName id选择器 选择id属性等于idName的元素
.className class选择器 选择class属性包含className的元素
요소 선택자는

라고 적으면 자주 사용됩니다. 이 섹션의 내용은 매우 간단하며 특별히 말할 것은 없습니다. CSS

관계 선택기

选择器 名称 描述
E F 包含选择器 选择所有包含在E元素里面的F元素
E>F 子选择器 选择所有作为E元素的子元素F
E+F 相邻选择器 选择紧贴在E元素之后的F元素
E~F 兄弟选择器 选择E元素所有兄弟元素F
여기에서 주목해야 할 몇 가지 사항:

  • 하위 선택기는 단어 요소만 선택할 수 있으며 손자 요소는 선택할 수 없습니다. 포함 선택자는 아들, 손자, 손자의 손자를 포함하여 자격을 갖춘 모든 자손을 선택합니다...

  • 인접 선택자는 형제 선택자가 선택할 조건을 충족하는 인접한 항목만 선택합니다. 조건을 충족하는 모든 형제 요소(반드시 인접한 요소는 아님)

  • Android Browser4.2.* 이하에서는 pseudo-class 선택자

    를 형제 선택자와 함께 사용하면 버그가 발생할 수 있으니 자세한 내용을 확인하세요. :checked

속성 선택기

의사 클래스 선택기

选择器 描述
E:link 设置超链接a在未被访问前的样式
E:visited 设置超链接a在其链接地址已被访问过时的样式
E:hover 设置元素鼠标在其悬停时的样式
E:active 设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式
E:focus 设置元素在成为输入焦点(该元素的onfocus事件发生)时的样式。(一般应用于表单元素)
E:checked 匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时)
E:enabled 匹配用户界面上处于可用状态的元素E。(一般应用于表单元素)
E:disabled 匹配用户界面上处于禁用状态的元素E。(一般应用于表单元素)
E:empty 匹配没有任何子元素(包括text节点)的元素E
E:root 匹配E元素在文档的根元素。在HTML中,根元素永远是HTML
E:not(s) 匹配不含有s选择符的元素E
E:first-child 匹配父元素的第一个子元素E
E:last-child 匹配父元素的最后一个子元素E
E:only-child 匹配父元素仅有的一个子元素E
E:nth-child(n) 匹配父元素的第n个子元素E
E:nth-last-child(n) 匹配父元素的倒数第n个子元素E
E:first-of-type 匹配同类型中的第一个同级兄弟元素E
E:last-of-type 匹配同类型中的最后一个同级兄弟元素E
E:only-of-type 匹配同类型中的唯一的一个同级兄弟元素E
E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E
E:nth-last-of-type(n) 匹配同类型中的倒数第n个同级兄弟元素E

注意事项:

  • 超链接的4种状态(访问前,鼠标悬停,当前被点击,已访问),需要有特定的书写顺序才能生效;a:hover 必须位于 a:link 和 a:visited 之后,a:active 必须位于 a:hover 之后

  • E:first-child选择符,E必须是它的兄弟元素中的第一个元素,换言之,E必须是父元素的第一个子元素。与之类似的伪类还有E:last-child,只不过情况正好相反,需要它是最后一个子元素。

关于:not()的用法

假定有个列表,每个列表项都有一条底边线,但是最后一项不需要底边线。

 li:not(:last-child) {
    border-bottom: 1px solid #ddd;
}

上述代码的意思是:给该列表中除最后一项外的所有列表项加一条底边线。是不是很方便。

关于:nth-child()的用法

要使E:nth-child(n)生效,E元素必须是某个元素的子元素,E的父元素最高是body,即E可以是body的子元素。:first-child:last-child:only-child:nth-last-child(n)也是一样。
nth-child(n)括号里的n可以是一个数字,一个关键字,或者一个公式。

:nth-child(length) /*参数是具体数字 length为整数*/
:nth-child(n) /*参数是n,n从0开始计算*/
:nth-child(n*length) /*n的倍数选择,n从0开始算*/
:nth-child(n+length) /*选择大于等于length后面的元素*/
:nth-child(-n+length) /*选择小于等于length前面的元素*/
:nth-child(n*length+1) /*表示隔几选一*/
:nth-child(2n) / :nth-child(even) /*表示偶数*/
:nth-child(2n+1) / :nth-child(odd) /*表示奇数*/

关于:...-child:...-of-type的差异

这两个系列的属性确实很相似,对于不熟悉的人可能很难区分。

E:first-of-type 总是能命中父元素的第1个为E的子元素,不论父元素第1个子元素是否为E;而E:first-child里的E元素必须是它的兄弟元素中的第一个元素,否则匹配失效。E:last-of-type E:last-child也是同理。
E:nth-of-type(n)总是能命中父元素的第n个为E的子元素,不论父元素第n个子元素是否为E;而E:nth-child(n)会选择父元素的第n个子元素E,如果第n个子元素不是E,则是无效选择符,但n会递增。
关于:nth-child():nth-of-type()的区别可以看这篇文章

:empty区分空元素

选择不包含子元素的p元素:

p:empty

选择包含子元素的p元素:

p:not(:empty)

伪对象选择器

选择器 描述
E:before/E::before 在目标元素E的前面插入的内容。用来和content属性一起使用
E:after/E::after 在目标元素E的后面插入的内容。用来和content属性一起使用
E:first-letter/E::first-letter 设置元素内的第一个字符的样式
E:first-line/E::first-line 设置元素内的第一行的样式
E::placeholder 设置元素文字占位符的样式。(一般用于input输入框)
E::selection 设置元素被选择时的字体颜色和背景颜色

注意事项:

  • ::placeholder在使用时需要加上各个浏览器的前缀;除了Firefox是 ::[prefix]placeholder,其他浏览器都是使用 ::[prefix]input-placeholder

总结

选择器用得好其实可以让我们少些很多代码。其实还有一些东西没有展开来讲,比如:before:after,后面专门写一篇文章来说。


많은 사람들이 CSS을 매우 간단하다고 생각하지만, 실제로 CSS를 잘 작성하는 것은 쉽지 않습니다. CSS의 각 항목에는 실제로 많은 내용이 들어 있습니다. 🎜> 선택자는 아마도 다섯 가지 범주로 나눌 수 있습니다: CSS

  • 요소 선택기

  • 관계 선택기

  • 속성 선택자

  • 의사 클래스 선택자

  • 의사 객체 선택자

요소 선택자

选择器 名称 描述
* 通配选择器 选择所有的元素
E 元素选择器 选择指定的元素
#idName id选择器 选择id属性等于idName的元素
.className class选择器 选择class属性包含className的元素
요소 선택자는

라고 적으면 자주 사용됩니다. 이 섹션의 내용은 매우 간단하며 특별히 말할 것은 없습니다. CSS

관계 선택기

选择器 名称 描述
E F 包含选择器 选择所有包含在E元素里面的F元素
E>F 子选择器 选择所有作为E元素的子元素F
E+F 相邻选择器 选择紧贴在E元素之后的F元素
E~F 兄弟选择器 选择E元素所有兄弟元素F
여기에서 주목해야 할 몇 가지 사항:

  • 하위 선택기는 단어 요소만 선택할 수 있으며 손자 요소는 선택할 수 없습니다. 포함 선택자는 아들, 손자, 손자의 손자를 포함하여 자격을 갖춘 모든 자손을 선택합니다...

  • 인접 선택자는 형제 선택자가 선택할 조건을 충족하는 인접한 항목만 선택합니다. 조건을 충족하는 모든 형제 요소(반드시 인접한 요소는 아님)

  • Android Browser4.2.* 이하에서는 pseudo-class 선택자

    를 형제 선택자와 함께 사용하면 버그가 발생할 수 있으니 자세한 내용을 확인하세요. :checked

속성 선택기

의사 클래스 선택기

选择器 描述
E:link 设置超链接a在未被访问前的样式
E:visited 设置超链接a在其链接地址已被访问过时的样式
E:hover 设置元素鼠标在其悬停时的样式
E:active 设置元素在被用户激活(在鼠标点击与释放之间发生的事件)时的样式
E:focus 设置元素在成为输入焦点(该元素的onfocus事件发生)时的样式。(一般应用于表单元素)
E:checked 匹配用户界面上处于选中状态的元素E。(用于input type为radio与checkbox时)
E:enabled 匹配用户界面上处于可用状态的元素E。(一般应用于表单元素)
E:disabled 匹配用户界面上处于禁用状态的元素E。(一般应用于表单元素)
E:empty 匹配没有任何子元素(包括text节点)的元素E
E:root 匹配E元素在文档的根元素。在HTML中,根元素永远是HTML
E:not(s) 匹配不含有s选择符的元素E
E:first-child 匹配父元素的第一个子元素E
E:last-child 匹配父元素的最后一个子元素E
E:only-child 匹配父元素仅有的一个子元素E
E:nth-child(n) 匹配父元素的第n个子元素E
E:nth-last-child(n) 匹配父元素的倒数第n个子元素E
E:first-of-type 匹配同类型中的第一个同级兄弟元素E
E:last-of-type 匹配同类型中的最后一个同级兄弟元素E
E:only-of-type 匹配同类型中的唯一的一个同级兄弟元素E
E:nth-of-type(n) 匹配同类型中的第n个同级兄弟元素E
E:nth-last-of-type(n) 匹配同类型中的倒数第n个同级兄弟元素E

참고:

  • 하이퍼링크의 4가지 상태(액세스 전, 마우스 오버, 현재 클릭, 방문)를 적용하려면 특정 쓰기 순서가 필요합니다. a:link 및 a:visited 뒤에 위치해야 하며, a:active는 a:hover 뒤에 위치해야 합니다.

  • 선택기인 E는 형제 요소 중 첫 번째 요소여야 합니다. 즉, E는 상위 요소의 첫 번째 하위 요소여야 합니다. 유사한 의사 클래스는 E:first-child이지만 상황은 정반대이므로 마지막 하위 요소여야 합니다. E:last-child

:not()

목록이 있다고 가정하면 각 목록 항목에는 수익이 있지만 마지막 항목에는 수익이 필요하지 않습니다.

 li:not(:last-child) {
    border-bottom: 1px solid #ddd;
}
위 코드는 목록의 마지막 항목을 제외한 모든 목록 항목에 하단 줄을 추가한다는 의미입니다. 매우 편리하지 않습니까?

:nth-child()

의 사용법에 대해 E:nth-child(n)이 적용되려면 E 요소가 특정 요소의 하위 요소여야 하며, E의 최상위 상위 요소는 body이며, 즉, E는 본문 하위 요소일 수 있습니다. :first-child, :last-child, :only-child, :nth-last-child(n)도 마찬가지다.
nth-child(n)괄호 안의 n은 숫자, 키워드 또는 수식일 수 있습니다.

:nth-child(length) /*参数是具体数字 length为整数*/
:nth-child(n) /*参数是n,n从0开始计算*/
:nth-child(n*length) /*n的倍数选择,n从0开始算*/
:nth-child(n+length) /*选择大于等于length后面的元素*/
:nth-child(-n+length) /*选择小于等于length前面的元素*/
:nth-child(n*length+1) /*表示隔几选一*/
:nth-child(2n) / :nth-child(even) /*表示偶数*/
:nth-child(2n+1) / :nth-child(odd) /*表示奇数*/

:...-child:...-of-type

의 차이점에 대해 이 두 시리즈의 속성은 사실 매우 유사하여 익숙하지 않은 분들은 구별하기 어려울 수 있습니다. 그들을.

E:first-of-type 은 상위 요소의 첫 번째 하위 요소가 E이고 E:first-child의 E 요소가 필수인지 여부에 관계없이 항상 상위 요소의 첫 번째 하위 요소인 E를 적중할 수 있습니다. 형제 요소 중 첫 번째 요소입니다. 그렇지 않으면 일치가 실패합니다. E:last-of-type , E:last-child도 마찬가지다.
E:nth-of-type(n)은 상위 요소의 n번째 하위 요소가 E인지 여부에 관계없이 항상 상위 요소의 n번째 하위 요소인 E를 적중할 수 있으며 E:nth-child(n)는 n번째 하위 요소를 선택합니다. 상위 요소의 하위 요소 E, n번째 하위 요소가 E가 아닌 경우 유효하지 않은 선택자이지만 n은 증가됩니다.
:nth-child():nth-of-type()의 차이점은 이 기사를 참조하세요

:empty를 사용하여 빈 요소 구분

포함하지 않는 p 요소 선택 하위 요소:

p:empty

하위 요소가 포함된 p 요소 선택:

p:not(:empty)

의사 객체 선택기

选择器 描述
E:before/E::before 在目标元素E的前面插入的内容。用来和content属性一起使用
E:after/E::after 在目标元素E的后面插入的内容。用来和content属性一起使用
E:first-letter/E::first-letter 设置元素内的第一个字符的样式
E:first-line/E::first-line 设置元素内的第一行的样式
E::placeholder 设置元素文字占位符的样式。(一般用于input输入框)
E::selection 设置元素被选择时的字体颜色和背景颜色

참고:

  • ::placeholder사용 시 각 브라우저의 접두사를 추가해야 합니다. Firefox를 제외하고 ::[prefix]placeholder, 다른 브라우저는 ::[prefix]input-placeholder을 사용합니다.

요약

선택기를 잘 사용하면 실제로 많은 코드를 절약할 수 있습니다. 사실 :before, :after 등 아직 구체적으로 다루지 못한 내용도 있는데, 이에 대해서는 추후 별도의 글에서 다루겠습니다.

CSS 선택자 구성과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.