前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >css3 选择器

css3 选择器

作者头像
py3study
发布2020-01-15 12:49:51
5050
发布2020-01-15 12:49:51
举报
文章被收录于专栏:python3python3

  以前学习css的时候总是看见一个效果就看一下,没有系统的学习,最近看见了这个css3的网站,打算系统学习下,今天要跟大家分享的是css3的选择器。

我们先来看一张选择器列表图:

一、基本选择器

基本选择器参考传送门:http://www.w3cplus.com/css3/basic-selectors

1、通配符选择器(*)

通配符选择器是用来选择所有元素,也可以选择某个元素下的所有元素,如:

代码语言:javascript
复制
*{     marigin: 0;     padding: 0; } 
代码语言:javascript
复制
.demo * {border:1px solid blue;} 

2、元素选择器(E)

元素选择器,是css选择器中最常见而且最基本的选择器。元素选择器其实就是文档的元素,如html,body,p,div等等,比如下面的li:

代码语言:javascript
复制
li {background-color: grey;color: orange;} 

3、类选择器(.className)

类选择器是以一独立于文档元素的方式来指定样式,使用类选择器之前需要在html元素上定义类名,换句话说需要保证类名在html标记中存在,这样才能选择类

代码语言:javascript
复制
<li class="active important items" >2</li> 

其中“active,important, items”就是我们以类给li加上一个类名,以便类选择器能正常工作,从而更好的将类选择器的样式与元素相关联。

代码语言:javascript
复制
.important {font-weight: bold; color: yellow;} 

类选择器还可以结合元素选择器来使用,也可以具备多类名。

多类选择器(.className1.className2)不被ie6支持。

4、id选择器(#ID)

ID选择器和类选择器相似,在使用ID选择器之前也需要先在html文档中加注ID名称,这样在样式选择器中才能找到相对应的元素,不同的是ID选择器是一个页面中唯一的值,我们在类使用时是在相对应的类名前加上一个“.”号(.className)而id选择器是在名称前使用"#"如(#id)

代码语言:javascript
复制
#first {background: lime;color: #000;} #last {background: #000;color: lime;} 

5、后代选择器(E F)

后代选择器也被称作包含选择器,所起作用就是可以选择某元素的后代元素,比如说:E F,前面E为祖先元素,F为后代元素,所表达的意思就是选择了E元素的所有后代F元素,请注意他们之间需要一个空格隔开。

代码语言:javascript
复制
.demo li {color: blue;} 

6、子元素选择器(E>F)

子元素选择器只能选择某元素的子元素,其中E为父元素,而F为子元素,其中E>F所表示的是选择了E元素下的所有子元素F。这和后代选择器(E F)不一样,在后代选择器中F是E的后代元素,而子元素选择器E > F,其中F仅仅是E的子元素而以。

代码语言:javascript
复制
ul  > li {background: green;color: yellow;} 

IE6不支持子元素选择器。

7、相邻兄弟选择器(E+F)

相邻兄弟选择器可以选择紧接在另一元素后的元素,而且他们具有一个相同的父元素,换句话说,EF两元素具有一个相同的父元素,而且F元素在E元素后面,而且相邻,这样我们就可以使用相邻兄弟元素选择器来选择F元素。

代码语言:javascript
复制
li + li {background: green;color: yellow; border: 1px solid #ccc;} 

IE6不支持相邻兄弟选择器

8、通用兄弟选择器(E~F)

通用兄弟元素选择器是CSS3新增加一种选择器,这种选择器将选择某元素后面的所有兄弟元素,他们也和相邻兄弟元素类似,需要在同一个父元素之中,换句话说,E和F元素是属于同一父元素之内,并且F元素在E元素之后,那么E ~ F 选择器将选择中所有E元素后面的F元素。

代码语言:javascript
复制
.active ~ li {background: green;color: yellow; border: 1px solid #ccc;} 

IE6不支持通用兄弟选择器

9、群组选择器(selector1,selector2,…,selectorN)

群组选择器是将具有相同样式的元素分组在一起,每个选择器之间使用逗号“,”隔开,如上面所示selector1,selector2,...,selectorN。这个逗号告诉浏览器,规则中包含多个不同的选择器,如果不有这个逗号,那么所表达的意就完全不同了,省去逗号就成了我们前面所说的后代选择器,这一点大家在使用中千万要小心加小心。

代码语言:javascript
复制
.first, .last {background: green;color: yellow; border: 1px solid #ccc;} 

二、属性选择器

属性选择器参考传送门:http://www.w3cplus.com/css3/attribute-selectors

IE6不支持属性选择器

CSS3的属性选择器主要包括以下几种:

1、E[attr]:只使用属性名,但没有确定任何属性值;

代码语言:javascript
复制
.demo a[id] {background: blue; color:yellow;font-weight:bold;} 

2、E[attr="value"]:指定属性名,并指定了该属性的属性值;

代码语言:javascript
复制
.demo a[id="first"] {background: blue; color:yellow;font-weight:bold;} 

3、E[attr~="value"]:指定属性名,并且具有属性值,此属性值是一个词列表,并且以空格隔开,其中词列表中包含了一个value词,而且等号前面的“~”不能不写;

代码语言:javascript
复制
.demo a[title~="website"]{background:orange;color:green;} 

属性选择器中有波浪(~)时属性值有value时就相匹配,没有波浪(~)时属性值要完全是value时才匹配。

4、E[attr^="value"]:指定了属性名,并且有属性值,属性值是以value开头的;

代码语言:javascript
复制
.demo a[href^="http://"]{background:orange;color:green;} .demo a[href^="mailto:"]{background:green;color:orange;} 

5、E[attr$="value"]:指定了属性名,并且有属性值,而且属性值是以value结束的;

代码语言:javascript
复制
.demo a[href$="png"]{background:orange;color:green;} 

6、E[attr*="value"]:指定了属性名,并且有属性值,而且属值中包含了value;

代码语言:javascript
复制
.demo a[title*="site"]{background:black;color:white;} 

7、E[attr|="value"]:指定了属性名,并且属性值是value或者以“value-”开头的值(比如说zh-cn);

代码语言:javascript
复制
.demo a[lang|="zh"]{background:gray;color:yellow;} 

三、伪类选择器

伪类选择器参考传送门:http://www.w3cplus.com/css3/pseudo-class-selector

1、动态伪类

动态伪类,因为这些伪类并不存在于HTML中,而只有当用户和网站交互的时候才能体现出来,动态伪类包含两种,第一种是我们在链接中常看到的锚点伪类,如":link",":visited";另外一种被称作用户行为伪类,如“:hover”,":active"和":focus"。先来看最常见的锚点伪类

代码语言:javascript
复制
.demo a:link {color:gray;}/*链接没有被访问时前景色为灰色*/ .demo a:visited{color:yellow;}/*链接被访问过后前景色为×××*/ .demo a:hover{color:green;}/*鼠标悬浮在链接上时前景色为绿色*/ .demo a:active{color:blue;}/*鼠标点中激活链接那一下前景色为蓝色*/ 

对于这四个锚点伪类的设置,有一点需要特别注意,那就是他们的先后顺序,要让他们遵守一个爱恨原则LoVe/HAte,也就是Link--visited--hover--active。如果你把顺序搞错了会给你带来意想不到的错误,大家对于这个应该很熟悉的,如果是初学的朋友,可以私下练习一下。其中:hover和:active又同时被列入到用户行为伪类中,他们所表达的意思是:

  1. :hover用于当用户把鼠标移动到元素上面时的效果;
  2. :active用于用户点击元素那一下的效果(正发生在点的那一下,松开鼠标左键此动作也就完成了)
  3. :focus用于元素成为焦点,这个经常用在表单元素上。

对于:hover在IE6下只有a元素支持,:active只有IE7-6不支持,:focus在IE6-7下不被支持。

2、UI元素状态伪类

我们把":enabled",":disabled",":checked"伪类称为UI元素状态伪类,这些主要是针对于HTML中的Form元素操作,最常见的比如我们"type="text"有enable和disabled两种状态,前者为可写状态后者为不可状态;另外"type="radio"和"type="checkbox""有"checked"和"unchecked"两种状态。来看两个实例,比如说你想将"disabled"的文本框与别的文本框区别出来,你就可以这样应用

代码语言:javascript
复制
input[type="text"]:disabled {border:1px solid #999;background-color: #fefefe;} 

IE6-8不支持":checked",":enabled",":disabled"这三种选择器。

3、CSS3的:nth选择器

这节内容才是关键,也是CSS3选择器最新部分,有人也称这种选择器为CSS3结构类,下面我们通过实际的应用来具体了解他们的使用和区别,首先列出他具有的选择方法:

1):fist-child选择某个元素的第一个子元素;

代码语言:javascript
复制
.demo li:first-child {background: green; border: 1px dotted blue;} 

2):last-child选择某个元素的最后一个子元素;

代码语言:javascript
复制
.demo li:last-child {background: green; border: 2px dotted blue;} 

3):nth-child()选择某个元素的一个或多个特定的子元素;

代码语言:javascript
复制
:nth-child(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);/*表示隔几选一*/ //上面length为整数 

这里的“n”只能是"n",不能使用其他字母代替,不然会没有任何效果的。"length"为整数。

4):nth-last-child()选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算;

代码语言:javascript
复制
.demo li:nth-last-child(4) {background: lime;} 

“:nth-child()”是从元素的第一个开始计算,而“:nth-last-child()”是从元素的最后一个开始计算,他们的计算方法都是一样的。同样在IE6-8和FF3.0-浏览器不支持“:nth-last-child()”选择器。

5):nth-of-type()选择指定的元素;

6):nth-last-of-type()选择指定的元素,从元素的最后一个开始计算;

7):first-of-type选择一个上级元素下的第一个同类子元素;

8):last-of-type选择一个上级元素的最后一个同类子元素;、

:nth-of-type,:nth-last-of-type;:first-of-type和:last-of-type实际意义并不是很大,我们前面讲的:nth-child之类选择器就能达到这此功能,不过大家要是感兴趣还是可以了解一下,个人认为实用价值并不是很大。此类说法仅供参考。

9):only-child选择的元素是它的父元素的唯一一个了元素;

IE6-8浏览器不支持:only-child选择器;

10):only-of-type选择一个元素是它的上级元素的唯一一个相同类型的子元素;

IE6-8和FF3.0-浏览器不支持:only-of-type选择器。

11):empty选择的元素里面没有任何内容。

IE6-8浏览器不支持:empty选择器

4、否定选择器(:not)

否定选择器和jq中的:not选择器一模一样,就拿form中的元素来说明这个选择器的用法,比如你想对form中所有input加边框,但又不想submit也起变化,此时就可以使用:not为实现

代码语言:javascript
复制
input:not([type="submit"]) {border: 1px solid red;} 

否定选择器 :not(),可以让你定位不匹配该选择器的元素。IE6-8浏览器不支持:not()选择器

5、伪元素

CSS中的伪元素大家以前看过::first-line,:first-letter,:before,:after;那么在CSS3中,他对伪元素进行了一定的调整,在以前的基础上增加了一个“:”也就是现在变成了“::first-letter,::first-line,::before,::after”另外他还增加了一个“::selection”,两个“::”和一个“:”css3中主要用来区分伪类和伪元素,到目前来说,这两种方式都是被接受的,也就是说不管使用哪种写法所起的作用都是一样的,只是一个书写格式不同而以。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档