CSS问class为main的div的高度

<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
    .main div {
      font-size: 14px;
      height: 12px;
    }
    .title {
      position: absolute;
      height: 20px;
    }
    .test {
      height: 20px;
    }
    .test2 {
      visibility: hidden;
    }
    .test3 {
      display: none;
    }
  </style>
</head>
<body>
  <div class="main">
    <div class="title">title</div>
    <div class="test">test</div>
    <div class="test2">test2</div>
    <div class="test3">test3</div>
  </div>
</body>

main的高度是24px,请问这题要怎么分析,类选择器的优先级不是要比标签选择器更高吗

阅读 4.4k
4 个回答

 css权重可以这么算:

  1. !important,权值为10000;
  2. 内联样式,如 style="",权值为1000;
  3. ID选择器,如 #id="", 权值为 100;
  4. class |伪类 | 属性 选择器,如 .class | :hover,:link,:target | [type], 权值 10;
  5. 标签 | 伪元素 选择器,如 p | ::after, ::before, ::fist-inline, ::selection, 权值 1;
  6. 通用选择器(*)、子选择器(>)、相邻选择器(+)、同胞选择器(~),权值为0

.main div权值为10+1=11,.test为10,所以div为.main div的12px
.title有属性 position: absolute;所以不计入值;.test3display: none;也不计入;
.test.test2都为12px(visibility: hidden即使不可见的元素也会占据页面上的空间),所以main的高度是24px

优先级其实就是精确度 因为.main div的精确度最高最具有针对性,而带有.test的dom可能有很多个 所以.main div 的优先级高于.test,所以main的高度是24px

你把 .title, .test3 元素删掉, 效果也是一样的。

absolute 脱离文档流, display: none 的也不计入高度。

24 就是.test, .test2 的累加。

你写的.test 20 没有生效是因为优先级没有.main div 高, 优先级计算规则:

https://developer.mozilla.org...

类选择器确实比类型选择器的优先级要搞,但是前提是同等精确度(层数)的情况下。

显然 .main div.title 更加具体,多了一层 .main

如果是同等 层数 的情况下 如 .main div.main .title 则才开始比较哪个选择器的优先级高

扩展:
css 是无视距离的,但是会考虑精确度,也就是我们所说的层数
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题