CSS-选择器

标签选择器

标签选择器是指用HTML标签名作为选择器,可以把某一类标签全部选择出来,然后为页面中某一类标签指定统一的CSS样式。

比如:将所有的p标签选出来,颜色设置为红色。

p {color:red;}

优点是能快速为页面中同类型的标签统一样式,缺点是不能设计差异化样式。

类选择器

类选择器使用.(英文点号)进行标识,后面紧跟类名(我们自定义的)。

比如有如下标签:

<p class='redClass'></p>

使用类选择器选择标签:

.redClass {color:red;}
  • 类选择器可以为元素对象定义单独或相同的样式,可以选择一个或者多个标签
  • 长名称可以使用中横线或者驼峰来为选择器命名。
  • 尽量不要纯数字、中文、下划线等命名,尽量使用英文字母来表示。

为什么CSS不推荐使用下划线?

  1. 浏览器兼容问题 (比如使用"下划线tips"的选择器命名,在IE6是无效的)
  2. 能良好区分JavaScript变量命名(JS变量命名用"下划线")

注意

我们可以给标签指定多个类名,从而达到给这个标签设置更多属性的目的。各个类名中间用空格隔开,多类名在后期布局比较复杂的情况下,还是较多使用的。

<div class="pink fontWeight font20">亚瑟</div>

id选择器

id选择器使用#进行标识,后面紧跟id名,比如选择如下标签:

<p id="only"> </p>

使用id选择器:

#only {color:red;}

元素的id值是唯一的,只能对应于文档中某一个具体的元素。

W3C标准规定,在同一个页面内,不允许有相同名字的id对象出现,但是允许相同名字的class。

通配符选择器

通配符选择器用*号表示,意思就是选择所有的标签,它是所有选择器中作用范围最广的,能匹配页面中所有的元素。

例如下面的代码,使用通配符选择器定义CSS样式,清除所有HTML标记的默认边距。

* {
  margin: 0;   /* 清除外边距*/
  padding: 0;  /* 清除内边距*/
}

通配符选择器会匹配页面所有的元素,降低页面响应速度,不建议随便使用。

后代选择器

后代选择器用来选择元素的子孙后代,其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔,先写父亲爷爷,再写儿子孙子。

比如选择.redClass类里面的h3标签:

.redClass h3 {color:red;}

当标签发生嵌套时,内层标签就成为外层标签的后代,子孙后代都可以这么选择,或者说它能选择任何包含在内的标签。

子元素选择器

子元素选择器只能选择某元素的子元素(亲儿子),这里的子指的是亲儿子不包含孙子重孙子之类。

其写法就是把父级标签写在前面,子级标签写在后面,中间跟一个 > 进行连接:

.redClass > h3 {color:red;}

交集选择器

交集选择器由两个选择器构成,其中第一个为标签选择器,第二个为类选择器,找到的标签必须满足既有标签一的特点,也有标签二的特点,两个选择器之间不能有空格,也就是没有符号。

交集选择器是 既...又 的意思,如,选择添加了.redClass类名的p标签:

p.redClass {color:red;}

用的相对来说比较少,不太建议使用。

并集选择器

如果某些标签定义相同的样式,就可以利用并集选择器,并集选择器是通过 , 连接而成的,所有被连接的选择器都会执行后面样式,通常用于集体声明。

任何形式的选择器,都可以作为并集选择器的一部分。

比如:.one类、 p、#test 这三个选择器选中的标签都会执行颜色为红色:

.one, p, #test {color:red;}  

结构伪类选择器

结构伪类选择器的本质就是选中第几个子元素,格式如下:

代码演示:

ul li:first-child {
  background-color: lightseagreen;
}

ul li:last-child {
  background-color: lightcoral;
}

/* 匹配 ul 中第三个 li */
ul li:nth-child(3) {
  background-color: aqua;
}
  1. n 可以是数字,如果 n 是数字,就是选中第 n 个,这里的 n 从 1 开始。

  2. n 可以是公式,如果 n 是公式,则公式里的 n 从 0 开始计算,当是第 0 个元素或者超出了元素的个数会被忽略,常见的公式如下:

  1. n 可以是关键字,常见的关键字有 even 偶数、odd 奇数。

示例代码:

<style>
  /* 偶数 */
  ul li:nth-child(even) {
    background-color: aquamarine;
  }

  /* 奇数 */
  ul li:nth-child(odd) {
    background-color: blueviolet;
  }

  /* 匹配 ul 中的所有 li */
  ul li:nth-child(n) {
    background-color: lightcoral;
  }

  /* 偶数 */
  ul li:nth-child(2n) {
    background-color: lightskyblue;
  }

  /* 奇数 */
  ul li:nth-child(2n + 1) {
    background-color: lightsalmon;
  }

  /* 选择第 0 5 10 15... */
  ul li:nth-child(5n) {
    background-color: orangered;
  }

  /* 从第5个开始往后选择 */
  ul li:nth-child(n + 5) {
    background-color: peru;
  }

  /* -n + 5 前五个 */
  ul li:nth-child(-n + 5) {
    background-color: tan;
  }
</style>

补充E:nth-child(n):nth-child(n) 的区别

E:nth-child(n) 选择父元素里面的第n个子元素,并且是 E 类型

:nth-child(n) 选择父元素里面的第n个子元素,不管是什么类型

代码演示:

<style>
  /* 选中 div 中的第2个子元素 */
  div :nth-child(2) {
    background-color: lightpink;
  }

  /* 选中 div 中的第2个子元素,并且元素是 p */
  div p:nth-child(2) {
    background-color: lightpink;
  }
</style>

链接伪类选择器

链接伪类选择器用于向某些选择器添加特殊的效果,比如给a标签添加特殊效果。都是利用交集选择器实现,如下:

a:link {未访问的链接}
a:visited {已访问的链接}
a:hover {鼠标移动到链接上}
a:active {选定的链接}

写的时候,他们的顺序尽量不要颠倒,按照 lvha 的顺序,否则可能引起错误,实际工作开发中,我们很少写全四个状态,一般我们写法如下:

a { /* a是标签选择器 所有的链接 */
    font-weight: 700;
    font-size: 16px;
    color: gray;
}
a:hover { /* a:hover 是链接伪类选择器 鼠标经过 */
    color: red; /* 鼠标经过的时候,由原来的灰色变成了红色 */
}

伪元素选择器

① E::before 和 E::after

在E元素内部的开始位置(before)和结束位置(after)创建一个元素,该元素为行内元素(inline),且必须要结合content属性使用,否则伪元素就不起作用,创建出来的元素在 Dom 中查找不到,所以称为伪元素。

  • 项目中伪元素的使用情况:一般是一个带有文字的标签添加一个其他伪元素(一般是横/竖线、箭头、方框、放大镜等)。
  • ":" 与 "::" 区别在于区分伪类和伪元素。

示例代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
          div::before {   /* 在div内部前面插入 “俺” */
              content: "俺";
          }
          div::after {
              content: "18岁"; /* 在div内部后面插入 “18岁” */
          }
        </style>
    </head>
    <body>
        <div>今年</div>    /* 今年 */
    </body>
</html>

效果如下:

伪元素案例:鼠标经过显示边框

div 里面有个 img,鼠标经过 div,为 div 添加伪元素边框,效果图如下:

代码:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
      div {
        width: 296px;
        height: 180px;
        margin: 20px auto;
        position: relative; /* 父相 */        
      }
      div:hover::before {  /* 鼠标经过之后,在div内部的前面插入一个伪元素 */
        content: "";
        width: 100%;
        height: 100%;
        border: 10px solid rgba(255, 255, 255, .3);
        display: block;  /* 伪元素属于行内元素,要转换 */
        position: absolute; /* 要伪元素不占位,就用绝对定位,不然的话,伪元素在上面,图片在下面 */
        top: 0;
        left: 0;
        box-sizing: border-box;  /* 把padding 和 border 都算入 width 里面 */
      }
        </style>
    </head>
    <body>
    <div>
        <img src="images/mi.jpg" height="180" width="296" alt="">
    </div>
    </body>
</html>

② E::first-letter、E::first-line、E::selection

  • E::first-letter 选择文本的第一个单词或字(如中文、日文、韩文等)
  • E::first-line 选择文本第一行
  • E::selection 鼠标选中文本的样式

示例代码:

<!DOCTYPE html>
<html lang="en">
    <head>
      <meta charset="utf-8">
      <style>
        /* .demo 类选择器
        :first-child 伪类选择器
        ::first-letter 伪元素选择器 */
        p::first-letter {   /* ① 选择第1个字 */
          color: red;
          font-size: 50px;
        }
        p::first-line {   /* ② 选择第1行 */
          color: green;
        }
        p::selection {  /* ③ 当我们选中文字的时候,可以变化的样式(只能是字体颜色与背景颜色) */
          color: pink;
          font-size: 50px;
          background-color: blue;
        }
      </style>
    </head>
    <body>
      <p>英语词汇,一般指即兴的、随性的随意的发挥,例如HIPHOP说唱中的freestyle就是即兴说唱的意思。2017年6        月,因吴亦凡屡次提起而火遍网络。
        吴亦凡爆红的freestyle,其实是嘻哈选手的基本功,也是《中国有嘻哈》节目中的一个环节名称。
发展经过编辑
从吴亦凡口里说出来,freestyle就变得很魔性了,因为他见人都会问一句,你有freestyle吗?两个选手难以选择,还是这句,“你们有freestyle吗”?
      </p>
    </body>
</html>

效果图如下:

属性选择器

属性选择器用于选取带有某些特殊属性的标签,用[],如下:

a[title] {            /* ① 选择具有 title 属性的 a 元素 */
  color: red;
}
input[type=text] {    /* ② 选择具有 type 属性,并且属性值是 text 的 input 元素 */
  color: red;
}
div[class^=font] {    /* ③ 匹配具有 class 属性,并且属性值以 font 开头的 div 元素 */
      color: pink;
}
div[class$=footer] {  /* ④ 匹配具有 class 属性,并且属性值以 footer 结尾的 div 元素 */
      color: skyblue;
}
div[class*=tao] {     /* ⑤ 匹配具有 class 属性,并且属性值中含有 tao 的 div 元素 */
      color: green;
}
[class*=tao] {        /* ⑥ 匹配具有 class 属性,并且属性值中含有 tao 的任意元素 */
      color: green;
}

/* 属性选择器,选择disabled为true的button,如果没有disabled,不选中 */
.loginBtn button[disabled] {
  background-color: #8bda81;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 标签选择器 指用HTML标签名称作为选择器,按标签名进行分类,为页面中的某一类标签指定为同一样式。 类选择器 类选...
    哎呦呦胖子斌阅读 206评论 0 0
  • 通配选择器 *{ margin:0; padding: 0; } 元素选择器 div { background: ...
    zhulichao阅读 193评论 0 0
  • 1、标签选择器 2、id选择器 3、类选择器(注意:一个标签可以有多个类名,用空格隔开,如 我是内容 ) 4、后代...
    大庆无疆阅读 122评论 0 1
  • CSS选择器最主要的基础选择器。 选择器 含义通用元素选择器,匹配页面任何元素。(这也就决定了我们很少使用)...
    杰伊_约翰阅读 226评论 0 0
  • 1、元素/标签/类型选择器 以标签作为选择器 p{color:#f00;} div{ba...
    琛琛的脚后跟阅读 475评论 0 0