zoukankan      html  css  js  c++  java
  • CSS权重;慎用!important

    初初接触样式的前端开发者在碰到样式覆盖时,最先选择的往往是!important。

    但是这种做法不好,应该优先考虑从样式的级联属性或者位置来解决问题。

    切记以下情况永远不要使用!important:

    1. 全局样式

    2.组件(插件)样式

    可以使用!important:

    1. 覆盖组件或者插件中的style或者important的样式

    2. 自定义的一些页面用于覆盖全局样式等

    如何覆盖!important:

    1. 使用比原来的important样式优先级更高的选择器。

    /*原来样式*/
    #example {color: #f00!important} 
    /*覆盖样式*/
    div#example { color: #ff0!important}

    2. 使用相同的选择器,但是位置在原来的选择器之后

    css的引入方式

    按照优先级由高到低:

    1. 行内样式 <div style=""></div>

    2.内联样式 <head><style></style></head>

    3.引入外部css

    CSS权重(优先级)

    css优先级由css选择器种类和数量决定。

    css选择器

    css选择器种类按照权重从低到高有:

    0. 统配选择符,*

       关系选择, 如 + > ~   

       否定伪类  :not()

    权重:0

      ⚠️: 该等级的符号不影响优先级。但是:not()内部的会影响。

    :not 否定伪类在优先级计算中不会被看作是伪类. 事实上, 在计算选择器数量时还是会把其中的选择器当做普通选择器进行计数.

    div.outer p {
      color:orange;
    }
    div:not(.outer) p {
      color: blueviolet;
    }
    <div class="outer">
      <p>This is in the outer div.</p>
      <div class="inner">
        <p>This text is in the inner div.</p>
      </div>
    </div>

    1. 类型选择器(元素原则器), 如h1,div;

      伪元素选择器 ,如 ::before

    权重1

    2. 类选择器, 如 .colorRed

       属性选择器, 如 [type='radio]

       伪类,如 :hover

    权重10

    ⚠️1中的选择器级别相同,2中的也是相同的优先级。

    3. ID 选择器, 如: #example

    权重100

    4. 行内样式, style

    权重1000

    5. !important

    权重最高

    css权重计算

    1    * { }                           -> 0               
    2    li { }                          -> 1 
    3    li:first-line { }               ->2 (一个元素,一个伪元素)
    4    ul li { }                       -> 2 (两个元素)
    5    ul ol+li { }                    ->3 (3个元素)
    6    h1 + *[rel=up] { }              -> 11 (一个元素,一个属性选择器)
    7    ul ol li.red { }                ->13 (三个元素,一个类)
    8    li.red.level { }                ->21 (一个元素,两个类)
    9    style=“”                        ->1000 (一个行内样式)
    10   p { }                           ->1 (一个元素)
    11   div p { }                       -> 2 (两个元素)
    12   .sith                           -> 10 (一个类)
    13   div p.sith { }                  -> 12 (两个元素,一个类)
    14   #sith                           ->100 ( 一个id)
    15   body #darkside .sith p { }      -> 112 (一个元素+ 一个ID + 一个类 + 一个元素 ;1+100+10+1)

    css权重规则

    1. 不同权重,权重高的样式优先 (注意权重相同,但是选择器级别不同的情况)

     1 <html>
     2 <head>
     3 <style type="text/css">
     4  div div div div div div div div div div div{ color: blue} /*权重11*/
     5 .red{ color: red} /*权重10*/
     6 
     7 </style>
     8 </head>
     9 
    10 <body>
    11 <div>
    12   <div>
    13     <div>
    14       <div>
    15         <div>
    16           <div>
    17             <div>
    18               <div>
    19                 <div>
    20                   <div>
    21                     <div class="red">
    22                       12
    23                     </div>
    24                   </div>
    25                 </div>
    26               </div>
    27             </div>
    28           </div>
    29         </div>
    30       </div>
    31     </div>
    32   </div>
    33 </div>
    34 </body>
    35 
    36 </html>

    如上图所示,高等级的权重永远大于低等级的,即使低等级的权重和大于高等级的权重值。

    2. 相同权重,位置靠后面的优先

    3. css引入方式: 行内>内敛>外部

    css选择器性能(参考搬运)

    css选择器如何工作?

    css提升性能

    1. 效率--> 搜索个数

      id选择器<类<元素

    2. 次数--> 搜索层数 

      1)不使用级联,使用BEM(block_element-modifier)的命名方式。

        不使用.nav .rightbar . inner

        使用.nav_rightbar_inner

      2)使用面向属性的命名方式

    .l{ float: left }
    .tc{ text-align:center; }
    .auto{ margin-left:auto; margin-right:auto; }
  • 相关阅读:
    为 WordPress 标签添加 rel="nofollow" 属性
    Discuz X3.2 SEO设置 title 不支持空格的解决方法
    LANMP 如何禁止访问 .htaccess 文件
    Discuz 哪些文件和文件夹需要777权限
    WordPress 模板常用函数
    CSS控制 table 的 cellpadding,cellspacing
    从 Typecho 自定义字段的调用代码看去
    Linux 服务器如何修改 DNS
    Linux 服务器如何禁止 ping 以及开启 ping
    Asp.Net 加载不同项目程序集
  • 原文地址:https://www.cnblogs.com/lyraLee/p/11210983.html
Copyright © 2011-2022 走看看