标签选择器,类选择器,id选择器
css当中最基础的三种选择器。
标签选择器简单明了,就是通过直接搜索标签名对所有该类标签进行样式渲染;
类选择器在标签中申明class并定义值,在css当中通过“ .xxx”来组合寻找并渲染;
id选择器在标签中申明class并定义值,在css当中通过“ #xxx ”来组合寻找并渲染。
复合选择器
常用代码中最常见的一种选择器,通过对三种基础选择器的组合进行更准去的标签选择。
此外我们用到复合选择器,就要理解权重的问题,如果对某一标签重复选择定义,他会根据你选择器的权重来进行渲染,权重最高者方可渲染,行内样式权重最高。若低权重选择器想要成功渲染,可在样式后增加!important进行说明。
后代选择器
若我只想对class=“Mine”当中的p标签进行背景色渲染。通过基础选择器难以实现。
.Mine p {
background-color:pink;
}
因为p被包裹于.Mine标签,所以他就是.Mine的后代,将基础选择器进行组合就可以得到想要的效果,三者任意组合,单最多不建议超过三个后代。
子代选择器
若后代中有多个p标签,但我并不想将所有p标签都进行渲染,这时候,我们就可以选择子代选择器。这里要注意,子代就必须是父盒子的亲儿子。
.Mine>p {
background-color:pink;
}
在选择器中通过>连接,就可以达到只选择子代,即使p的后代中再包含许多p标签,选择器也不会带他们进行效果渲染,他只会找到.Mine中的亲儿子p标签,对它进行单独渲染。
并行选择器
若两个标签并无亲属关系,却在渲染的时候,绝大部分是相同样式,如果仅凭借基础选择器,可能要将相同的代码重复写上两到三次,会造成代码冗余。
.Mine,.Mine2 {
background-color:pink;
}
使用并行选择器,将毫不相干却大面积重复的代码进行统一渲染,这样不仅简洁还很方便。
链接伪类选择器
:link a:link //选择所有未访问链接
:visited a:visited //选择所有访问过的链接
:hover a:hover //选择鼠标在链接上面时
:active a:active //选择活动链接
有关链接的四种选择器,是在a后面通过:来选择不同的语义,切记在输入的时候一定要按顺序定义(LV的包包HAO),否则他就不会展示应有的渲染效果。
以上选择器是属于css当中所包含的所有选择器,在css3中对于选择器有了进一步的扩充。
属性选择器
当大量的相同标签堆在一起,想要把他们单独区分并渲染,在以前我们会想到的是利用类选择器单独定义并渲染,然而css3帮我们进行了简化,比如有一堆input标签,我们可以只选择有value属性的标签进行渲染。
input[value] : {
background-color:pink;
}
但是在属性相同时,例如所有标签都携带value属性,这个时候我们就可以:
input[value="Mine"] : {
background-color:pink;
}
把value等于Mine的input标签单独挑选出来,这样会更加便捷我们的操作。
当然我们还可以通过正则表达式对于属性值做进一步筛选。
input[value^="Mine"] : {
//属性值开头包含Mine的标签
background-color:pink;
}
input[value$="Mine"] : {
//属性值结尾包含Mine的标签
background-color:pink;
}
input[value*="Mine"] : {
//属性值中包含Mine的标签
background-color:pink;
}
nth-child选择器
在后代选择器的基础上,css3为我们又扩充了nth-child选择器,因为后代选择器是有弊端的,先拿子代选择器来说,如果我们只想让第一个子标签进行渲染,我们不可能拿子代选择器直接选出来,除非子代标签都个不相同。而nth-child却可以帮我们做到这一点:
.Mine:first-child: {
//选出父标签下的第一个子标签
background-color:pink;
}
.Mine:last-child: {
//选出父标签下的最后一个子标签
background-color:pink;
}
.Mine:nth-child(n): {
//选出父标签下的第n个子标签
background-color:pink;
}
这里要对第三个选择器单独说明一下,括号里面可以是数值也可以是表达式,若为数值就是第n个子标签,有两个可选属性odd和even,分别代表所选标签为奇数或偶数。使用公式(an+ b).描述:a代表一个循环的大小,N是一个计数器(从0开始),以及b是偏移量。
nth-of-type选择器
.Mine:first-of-type: {
//选出父标签下的第一个子标签
background-color:pink;
}
.Mine:last-of-type: {
//选出父标签下的最后一个子标签
background-color:pink;
}
.Mine:nth--of-type(n): {
//选出父标签下的第n个子标签
background-color:pink;
}
与上一类型的选择器相比,大致的语义是没有什么区别的,但如果是如下操作就会有不同的结果:
.Mine p:nth--of-type(n): {
//选出父标签下的第n个子标签
background-color:pink;
}
.Mine p:nth-child(n): {
//选出父标签下的第n个子标签
background-color:pink;
}
第一个的语义是先按顺序排序,取到第n个标签后再去和前面的p标签匹配,第二个的语义则是先选取子类当中的p标签,再按顺序去进行选取。
css3伪元素选择标签
以前我们在做有些小盒子布局的是后可能需要在盒子的前面放置icon图标,或是在盒子的后面放置下拉小箭头,我们通常想到的做法便是盒子中设置span标签,然后给三标签做样式修改,这样虽然可以达到效果但是难免会是代码繁琐。而通过这个伪元素选择器,我可以直接在css样式中增加标签:
.Mine :: before {
content:"我"
}
.Mine :: after {
content:"某某某"
}
<div>叫</div>
通过这个案例,我们在主体html当中只写了”叫“这个字,然后再后期渲染当中,我们就会发现页面所展示的则是”我叫某某某“。可谓是相当方便,切记在使用标签的时候要跟用content属性,否则无效。
::before ::after属于行类元素,不能设置其宽高,需要手动转换
小结
在前端中最常用的九种css选择器在这里已经详细展示,我们要根据不同的实际情况选取更加合适的选择器,但是css3中所列举的几类选择器是含有兼容性问题的,在选取的时候要额外注意。
选择器 示例 示例说明 CSS
.class .intro 选择所有class="intro"的元素 1
#id #firstname 选择所有id="firstname"的元素 1
* * 选择所有元素 2
element p 选择所有<p>元素 1
element,element div,p 选择所有<div>元素和<p>元素 1
element element div p 选择<div>元素内的所有<p>元素 1
element>element div>p 选择所有父级是 <div> 元素的 <p> 元素 2
element+element div+p 选择所有紧接着<div>元素之后的<p>元素 2
[attribute] [target] 选择所有带有target属性元素 2
[attribute=value] [target=-blank] 选择所有使用target="-blank"的元素 2
[attribute~=value] [title~=flower] 选择标题属性包含单词"flower"的所有元素 2
[attribute|=language] [lang|=en] 选择 lang 属性以 en 为开头的所有元素 2
:link a:link 选择所有未访问链接 1
:visited a:visited 选择所有访问过的链接 1
:active a:active 选择活动链接 1
:hover a:hover 选择鼠标在链接上面时 1
:focus input:focus 选择具有焦点的输入元素 2
:first-letter p:first-letter 选择每一个<p>元素的第一个字母 1
:first-line p:first-line 选择每一个<p>元素的第一行 1
:first-child p:first-child 指定只有当<p>元素是其父级的第一个子级的样式。 2
:before p:before 在每个<p>元素之前插入内容 2
:after p:after 在每个<p>元素之后插入内容 2
:lang(language) p:lang(it) 选择一个lang属性的起始值="it"的所有<p>元素 2
element1~element2 p~ul 选择p元素之后的每一个ul元素 3
[attribute^=value] a[src^="https"] 选择每一个src属性的值以"https"开头的元素 3
[attribute$=value] a[src$=".pdf"] 选择每一个src属性的值以".pdf"结尾的元素 3
[attribute*=value] a[src*="runoob"] 选择每一个src属性的值包含子字符串"runoob"的元素 3
:first-of-type p:first-of-type 选择每个p元素是其父级的第一个p元素 3
:last-of-type p:last-of-type 选择每个p元素是其父级的最后一个p元素 3
:only-of-type p:only-of-type 选择每个p元素是其父级的唯一p元素 3
:only-child p:only-child 选择每个p元素是其父级的唯一子元素 3
:nth-child(n) p:nth-child(2) 选择每个p元素是其父级的第二个子元素 3
:nth-last-child(n) p:nth-last-child(2) 选择每个p元素的是其父级的第二个子元素,从最后一个子项计数 3
:nth-of-type(n) p:nth-of-type(2) 选择每个p元素是其父级的第二个p元素 3
:nth-last-of-type(n) p:nth-last-of-type(2) 选择每个p元素的是其父级的第二个p元素,从最后一个子项计数 3
:last-child p:last-child 选择每个p元素是其父级的最后一个子级。 3
:root :root 选择文档的根元素 3
:empty p:empty 选择每个没有任何子级的p元素(包括文本节点) 3
:target #news:target 选择当前活动的#news元素(包含该锚名称的点击的URL) 3
:enabled input:enabled 选择每一个已启用的输入元素 3
:disabled input:disabled 选择每一个禁用的输入元素 3
:checked input:checked 选择每个选中的输入元素 3
:not(selector) :not(p) 选择每个并非p元素的元素 3
::selection ::selection 匹配元素中被用户选中或处于高亮状态的部分 3
:out-of-range :out-of-range 匹配值在指定区间之外的input元素 3
:in-range :in-range 匹配值在指定区间之内的input元素 3
:read-write :read-write 用于匹配可读及可写的元素 3
:read-only :read-only 用于匹配设置 "readonly"(只读) 属性的元素 3
:optional :optional 用于匹配可选的输入元素 3
:required :required 用于匹配设置了 "required" 属性的元素 3
:valid :valid 用于匹配输入值为合法的元素 3
:invalid :invalid 用于匹配输入值为非法的元素 3
这里列举了css当中所有的选择器可供参考。