美文网首页
CSS-选择器

CSS-选择器

作者: Imkata | 来源:发表于2022-03-04 11:27 被阅读0次

    标签选择器

    标签选择器是指用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,不选中 */
    .login_btn button[disabled] {
      background-color: #8bda81;
    }
    

    相关文章

      网友评论

          本文标题:CSS-选择器

          本文链接:https://www.haomeiwen.com/subject/jwzurrtx.html