• 选择器


    参考W3C手册:http://www.w3school.com.cn/cssref/css_selectors.asp
     
    css选择器分为简单选择器,伪元素选择器和组合选择器。
      简单选择器又分为:标签选择器(元素选择器)类选择器ID选择器通配符选择器属性选择器伪类选择器
     
    css中权重最高的样式为:行内样式(除了 !important),其次是ID选择器,权重处于第三的是类、伪类和属性选择器,权重较低的是标签选择器和伪元素选择器

    选择器:

    // 简单选择器
    *{...} // 通配符选择器,一般用来设置全局统一的样式
    body html div ul ... // 标签选择器(元素选择器),会统一修改该层级以及该层级以下的所有相同的元素
    .box //类名选择器
    input[type="search"] // 属性选择器
    .box:hover // 伪类选择器
    #father // ID选择器
    
    // 伪元素选择器
    .box::after // 伪元素选择器 
    
    // 组合选择器
    #father>div // 选择父元素id是father 的所有div元素 (只选择一代)
    #value,.text // 同时选择了id是value的元素 和 类名是text的元素  
    .class1.class2 { color: blue; } // 没有空格,是选择到同时拥有.class1和.class2的节点 <span class="class1 class2"></span>
    .father .class2 // 选择父元素father 下的所有叫class2的后代元素 (空格是后代选择器的标识符) 
    span+p // 选中 span 元素后面紧挨着的第一个 p 兄弟元素
    span~p // 选中 span 元素后面所有的 p 兄弟元素
    
    ...

    伪类选择器:(选择器 后面接 一个 冒号 的是伪类)

      伪类其实是弥补了CSS选择器的不足,用来更方便地获取信息。
      dom:
    <div id="father">
        <div class="box"></div>
        <p></p>
    </div>
      css:
    .box:hover
    .box:first-letter //向文本的第一个字母添加特殊样式 css1 .box:first-line //向文本的首行添加特殊样式 css1 .box:first-child //#father 下的第一个 class叫box的元素 css2 p:last-child //选择属于其父元素最后一个子元素每个 <p> 元素。 css3 p:only-child //选择属于其父元素的唯一子元素的每个 <p> 元素。 css3 p:first-of-type // 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。 css3 .box:nth-child(odd) // 等同于 nth-child(2n+1) 奇数行 .box:nth-child(even) // 等同于 nth-child(2n) 偶数行 .box:not(p):not(span) // 所有class = box 的元素,除了 <p></p> 和 <span></span> 元素之外,设置样式
    ...//更多请参考第一行的链接

    伪元素选择器:(选择器 后面接 两个 冒号 的是伪元素选择器)

      而伪元素本质上是创建了一个虚拟容器(元素),我们可以在其中添加内容或样式。
    ul::-webkit-scrollbar{...} //设置滚动条的样式
    ...

    :before, :after 和其它伪元素添加

    div:nth-of-type(2)::before{
        /*必须添加content属性,否则后期不可见*/
        content: ""; // 毕传属性,不然不能显示
        /*默认是行级元素,如果想设置宽高,就必须转换为块级元素*/
        position: absolute;
         20px;
        height: 20px;
        border-radius: 10px;
        left: -10px;
        top: -10px;
    }
    
    div:nth-of-type(2)::after{
        /*必须添加content属性,否则后期不可见*/
        content: "";
        /*默认是行级元素,如果想设置宽高,就必须转换为块级元素*/
        position: absolute;
         20px;
        height: 20px;
        border-radius: 10px;
        left: -10px;
        bottom: -10px;
    }
    
    /*获取第一个字符:实现首字下沉*/
    p::first-letter{
        color: red;
        font-size: 30px;
        float: left;/*文本环绕*/
    }
    
    /*获取第一行内容:如果设置了::first-letter,那么无法同时设置它的样式*/
    p::first-line{
        text-decoration: underline;
    }
    
    /*设置当前选中内容的样式*/
    p::selection{
        color: red;
        /*它只能设置显示的样式,而不能设置内容大小*/
        /*font-size: 30px;*/
    }

      

    在CSS中总有一些你不用不知道,用到才知道的“坑”。比如今天要谈的,把 before, after 伪类用在 <img> 标签上。

    嗯,实际上你用你会发现,在大多数浏览器这是无效的,dom中并不会出现你想要的结果。

    为什么会这样呢?
    让我们回归到 W3C 标准中寻觅一下,在标准中,before, after 伪类的定义如:

    As their names indicate, the :before and :after pseudo-elements specify the location of content before and after an element's document tree content.
    来自 https://www.w3.org/TR/CSS21/generate.html#before-after-content

    我们应该注意到所谓 document tree content,对于 img 这种自闭和标签,似乎不存在 content (内容或后代元素)在标签中,所以选择器没有生效。但这样的解释还不够清晰,实际上标准中还有一行注释:

    Note. This specification does not fully define the interaction of :before and :after with replaced elements (such as IMG in HTML). This will be defined in more detail in a future specification.

    嗯,这回清楚了,对于可替换元素(如 img、input、select 等),标准并没有清晰定义,这也导致了浏览器实现的差异性。

     

     

  • 相关阅读:
    java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'...解决
    Dos命令查看端口占用及关闭教程
    IDEA中Tomcat启动出现乱码
    ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
    MySQL 面试问题分析总结
    深入Cpython (编写一个Cpython 模块)
    使用docker构建简约高效的镜像
    深入理解C
    ELK 起航
    jquery
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/11737621.html
Copyright © 2020-2023  润新知