CSS-选择器

2022-03-04  本文已影响0人  Imkata

标签选择器

标签选择器是指用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

示例代码:

<!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,不选中 */
.login_btn button[disabled] {
  background-color: #8bda81;
}
上一篇下一篇

猜你喜欢

热点阅读