收集最全面的css和css3选择器 选择器的优先级 属性继承等功能
css选择器
CSS选择器是CSS规则的第一部分
它是元素和其他部分组合起来告诉浏览器哪个HTML元素应当是被选为应用规则中的CSS属性值的方式
选择器所选择的元素,叫做“选择器的对象”
我们从一个Html结构开始
<div id="box"> <div class="one"> <p class="one_1"> </p > <p class="one_1"> </p > </div> <div class="two"></div> <div class="two"></div> <div class="two"></div></div>
关于css属性选择器常用的有:
- id选择器(#box),选择id为box的元素
- 类选择器(.one),选择类名为one的所有元素
- 标签选择器(div),选择标签为div的所有元素
- 后代选择器(#box div),选择id为box元素内部所有的div元素
- 子选择器(.one>one_1),选择父元素为.one的所有.one_1的元素
- 相邻同胞选择器(.one+.two),选择紧接在.one之后的所有.two元素
- 群组选择器(div,p),选择div、p的所有元素
还有一些使用频率相对没那么多的选择器:
- 伪类选择器
:link :选择未被访问的链接:visited:选取已被访问的链接:active:选择活动链接:hover :鼠标指针浮动在上面的元素:focus :选择具有焦点的:first-child:父元素的首个子元素
- 伪元素选择器
:first-letter :用于选取指定选择器的首字母:first-line :选取指定选择器的首行:before : 选择器在被选元素的内容前面插入内容:after : 选择器在被选元素的内容后面插入内容
- 属性选择器
[attribute] 选择带有attribute属性的元素[attribute=value] 选择所有使用attribute=value的元素[attribute~=value] 选择attribute属性包含value的元素[attribute|=value]:选择attribute属性以value开头的元素
在CSS3中新增的选择器有如下:
- 层次选择器(p~ul),选择前面有p元素的每个ul元素
- 伪类选择器
:first-of-type 表示一组同级元素中其类型的第一个元素:last-of-type 表示一组同级元素中其类型的最后一个元素:only-of-type 表示没有同类型兄弟元素的元素:only-child 表示没有任何兄弟的元素:nth-child(n) 根据元素在一组同级中的位置匹配元素:nth-last-of-type(n) 匹配给定类型的元素,基于它们在一组兄弟元素中的位置,从末尾开始计数:last-child 表示一组兄弟元素中的最后一个元素:root 设置HTML文档:empty 指定空的元素:enabled 选择可用元素:disabled 选择被禁用元素:checked 选择选中的元素:not(selector) 选择与 <selector> 不匹配的所有元素
- 属性选择器
[attribute*=value]:选择attribute属性值包含value的所有元素[attribute^=value]:选择attribute属性开头为value的所有元素[attribute$=value]:选择attribute属性结尾为value的所有元素
选择器 | 示例 | 说明 |
class | .test{color: red} | 选择class="test"的标签 |
id | #test{color:red} | 选择id="test"的标签 |
element | p{color: red} | 选择所有 p 标签 |
element, element | div, p {} | 选择所有div和p |
后代 element element | ul li {border: 1px solid red;} | 选择ul的所有li后代(包括儿子 孙子 重孙...) |
:link | a:link {color: black;} | 选择所有未访问链接 |
:visited | a:visited {color: red;} | 选择所有访问过的链接 |
:hover | a:hover {color: #fff} | 鼠标悬浮触发 |
:active | a:active {background: yellow;} | 选择活动链接(按住鼠标不松开触发) (注:在CSS定义中,:active必须位于:hover之后!) |
:first-letter | h1:first-letter{font-size: 200%} | 选择h1中以第一个字 |
:first-line | p:first-line {background: yellow} | 选择每个<p>元素的第一行 |
版本 2
选择器 | 示例 | 说明 |
* | * {padding: 0;} | 选择所有标签 |
父子element>element | .list > li {border: 1px solid red;} | 选择class="list"的所有儿子li |
兄弟element+element | h1+p {color: red} | 在h1后面选一个p兄弟 |
属性 [attribute] | [type] {display: block;} | 选择带有 type 属性的标签 |
属性等于 [attribute=value] | [type=text] {display: block;} | 选择type属性值为text的标签 |
属性包含 [attribute~=value] | [eyes~=小眼睛] {display:none} | 选择所有eyes属性包含小眼睛的元素 (<span eyes="单眼皮 小眼睛">) |
[attribute|=word] | [eyes|="小眼睛"] (常与attribute^=value混淆) | 选择eyes属性为小眼睛开头的元素; 这个值必须是完整的单词(或者后面跟着连字符" - ") 如:eyes="小眼睛-李荣浩" |
:focus | input:focus{backgroundr:yellow;} | 选择具有焦点的输入元素 |
大儿子 element:first-child | h1:first-child{color: red} | 选择一个h1标签并且是其父元素的第一个元素 (h2:first-child 不会选中,因为h2是二儿子) |
:before | span:before | 在每个<span>元素之前插入内容 |
:after | span:after | 在每个<span>元素之后插入内容 |
版本 3
选择器 | 示例 | 说明 |
酒场兄弟 element1~element2 | h1~p {color: red} | 版本2的只能选一个兄弟,版本3能选h1后面所有p兄弟 |
属性开头 [attribute^=value] | [name^="李"]{border: 1px solid red;} | 选择所有name属性以‘李’开头的元素,^ 类似正则 |
属性结尾 [attribute$=value] | img[src$=".png"]{width: 100%} | 选择src 为 .png 结尾的 img 元素 (切记element后面不要带空格) |
属性包含 [attribute*=value] | [name*="李"]{width: 100%} | 选择所有name属性包含‘李’开头的元素 |
:first-of-type | li:first-of-type{} | 选择所有li并且是其父元素的第一个 |
:last-of-type | li:last-of-type{} | 选择所有li并且是其父元素的最后一个 |
:only-of-type | h2:only-of-type{} | 选择一个h2并且它是唯一一个 (h1:only-of-type 不会选中因为不是唯一) |
:only-child | h2:only-child{} | 选择一个h2并且是其父元素的独子 (div1 生了4个所以选不了他的h2) |
:nth-child(n) | div:nth-child(1){} | 选择一个div并且是其父元素的第一个孩子 |
:nth-last-child(n) | div:nth-last-child(2){} | 选择一个div并且是其父元素的倒数第二个孩子 |
:nth-of-type(n) | p:nth-of-type(2) | 选择每个p元素是其父级的第二个p元素 |
:nth-last-of-type(n) | p:nth-last-of-type(2) | 选择每个p元素的是其父级的倒数第二个p元素 |
小儿子 element:last-child | h1:last-child | 选择h1标签并且是其父元素的最后一个孩子 |
:root | :root{background: red} | 文档根元素伪类 |
:empty | h1:empty{} | 选择一个h1标签并且没有子元素(空标签)<h1></h1> |
id:target | #footer:target(:target) | 选择当前处于活动状态的锚点标签(不加id为所有锚点) |
:not(selector) | :not(p) | 选择非 selector 元素的元素(即反选) |
::selection | ::selection{color: red} | 选择光标选中的文字 |
:enabled | 【主要用于表单元素】 input[type="text"]:enabled | 选择器匹配每个启用的的元素 |
:disabled | 【主要用于表单元素】 input[type="text"]:disabled | 选择器匹配每个禁用的的元素 |
:checked | 【主要用于表单元素】 input:checked | 选择器匹配每个选中的输入元素 (仅适用于单选按钮或复选框) |
:out-of-range | 【主要用于表单校验】 input:out-of-range{color: red;} | 选中【超出】设置范围的元素(input) <input type="number" min="5" max="10" /> |
:in-range | 【主要用于表单校验】 input:in-range{color:green} | 选中输入值【未超出】指定范围的元素 |
:read-write | 【主要用于表单元素】 input:read-write{border: 1px solid blue} | 选中【可写】状态的input |
:read-only | 【主要用于表单元素】 input:read-only{background: gray;} | 选中【只读】状态的input |
:optional | 【主要用于表单校验】 input:optional{border: 1px solid black} | 选中【非必填】状态的input |
:required | 【主要用于表单校验】 input:required{border: 1px solid red} | 选中【必填】状态的input <input required /> |
:valid | 【主要用于表单校验】 input:valid{color: green} | 选中 输入email【合法】的input <input type="email" /> |
:invalid | 【主要用于表单校验】 input:valid{border: 1px solid red} | 选中 输入email【不合法】的input <input type="email" /> |
伪类选择器
状态 | 示例 | 说明 |
:link | a:link | 选择所有未被访问的链接 |
:visited | a:visited | 选择所有已被访问的链接 |
:hover | a:hover | 鼠标移动到元素上时 |
:active | a:active | 点击正在发生时 |
:focus | input::focus | 选择获得焦点的 input 元素 |
:root | :root | 改变当前html所有样式 |
:empty | p:empty | 对没有元素没有文本标签选中,如 选中,如果** 双方的 **选不中; |
:first-child | p:first-child | 选中父元素中第一个p,如果父元素第一个不是p选不中,如子元素第一个元素是p也会选中, |
:first-of-type | p:first-of-type | 选中父元素中第一个p,一直往下找,如子元素中有p也会选中,main>p:first-of-type只选取儿子 |
:last-child | p:last-child | 选中父元素中最后一个p,如果父元素最后不是p选不中,如子元素中最后元素是p也会选中,main>p:last-child,只选取儿子 |
:last-of-type | p:last-of-type | 选中父元素中最后一个p,一直往下找,如子元素中有p也会选中最后一个 |
:only-of-type | p:only-of-type | 选择属于其父元素的唯一子元素的p,父元素有其他p选不中。如子元素有唯一p也会选中 |
:only-child | p:only-child | 选择属于其父元素的唯一子元素的p,父元素有其他p选不中。 |
:nth-child(n) | p:nth-child(2) | 选择父元素第二个元素,如果是p选中,反之。如子元素第二元素是p也选中 |
:nth-of-type(n) | p:nth-of-type(2) | 选中父元素中第二个p,一直往下找,如子元素中有二个p也会选中,main>p:first-of-type只选取儿子 |
:nth-last-child(n) | p:nth-last-child(2) | 同上从最后一个算 |
:nth-last-of-type(n) | p:nth-last-of-type(2) | 同上,从最后一个算 |
:not() | :not(p) | 选中父元素除了p所有元素 |
表单伪类
选择器 | 示例 | 说明 |
:enabled | input:enabled | 选择每个启用的 input 元素 |
:disabled | input:disabled | 选择每个禁用的 input 元素 |
:checked | input:checked | 选择每个被选中的 input 元素 |
:required | input:required | 包含required属性的元素 |
:optional | input:optional | 不包含required属性的元素 |
:valid | input:valid | 验证通过的表单元素 |
:invalid | input:invalid | 验证不通过的表单 |
字符伪类
状态 | 示例 | 说明 |
::first-letter | p:first-letter | 选择每个元素的首字母 |
::first-line | p:first-line | 选择每个元素的首行 |
::before | p:before | 在每个元素的内容之前插入内容 |
::after | p:after | 在每个元素的内容之后插入内容 |
p::after{ //在p标签内容后面加上1 content: "123"; }
优先级
相信大家对CSS选择器的优先级都不陌生:
内联 > ID选择器 > 类选择器 > 标签选择器
到具体的计算层⾯,优先级是由 A 、B、C、D 的值来决定的,其中它们的值计算规则如下:
- 如果存在内联样式,那么 A = 1, 否则 A = 0
- B的值等于 ID选择器出现的次数
- C的值等于 类选择器 和 属性选择器 和 伪类 出现的总次数
- D 的值等于 标签选择器 和 伪元素 出现的总次数
这里举个例子:
#nav-global > ul > li > a.nav-link
套用上面的算法,依次求出ABCD的值:
- 因为没有内联样式 ,所以 A = 0
- ID选择器总共出现了1次, B = 1
- 类选择器出现了1次, 属性选择器出现了0次,伪类选择器出现0次,所以 C = (1 + 0 + 0) = 1
- 标签选择器出现了3次, 伪元素出现了0次,所以 D = (3 + 0) = 3
上面算出的A、B、C、D可以简记作:(0, 1, 1, 3)
知道了优先级是如何计算之后,就来看看比较规则:
- 从左往右依次进行比较 ,较大者优先级更高
- 如果相等,则继续往右移动一位进行比较
- 如果4位全部相等,则后面的会覆盖前面的
经过上面的优先级计算规则,我们知道内联样式的优先级最高,如果外部样式需要覆盖内联样式,就需要使用!important
继承属性
在css中,继承是指的是给父元素设置一些属性,后代元素会自动拥有这些属性
关于继承属性,可以分成:
- 字体系列属性
font:组合字体font-family:规定元素的字体系列font-weight:设置字体的粗细font-size:设置字体的尺寸font-style:定义字体的风格font-variant:偏大或偏小的字体
- 文本系列属性
text-indent:文本缩进text-align:文本水平对刘line-height:行高word-spacing:增加或减少单词间的空白letter-spacing:增加或减少字符间的空白text-transform:控制文本大小写direction:规定文本的书写方向color:文本颜色
- 元素可见性
visibility
- 表格布局属性
caption-side:定位表格标题位置border-collapse:合并表格边框border-spacing:设置相邻单元格的边框间的距离empty-cells:单元格的边框的出现与消失table-layout:表格的宽度由什么决定
- 列表属性
list-style-type:文字前面的小点点样式list-style-position:小点点位置list-style:以上的属性可通过这属性集合
- 引用
quotes:设置嵌套引用的引号类型
- 光标属性
cursor:箭头可以变成需要的形状
继承中比较特殊的几点:
- a 标签的字体颜色不能被继承
- h1-h6标签字体的大下也是不能被继承的
无继承的属性
- display
- 文本属性:vertical-align、text-decoration
- 盒子模型的属性:宽度、高度、内外边距、边框等
- 背景属性:背景图片、颜色、位置等
- 定位属性:浮动、清除浮动、定位position等
- 生成内容属性:content、counter-reset、counter-increment
- 轮廓样式属性:outline-style、outline-width、outline-color、outline
- 页面样式属性:size、page-break-before、page-break-after
给大家分享我收集整理的各种学习资料,前端小白交学习流程,入门教程等回答-下面是学习资料参考。
前端学习交流、自学、学习资料等推荐 - 知乎