欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

css 元素样式来源,基本选择器,上下文选择器与权重(重要)解析

程序员文章站 2022-05-26 12:17:43
...

元素样式来源:

  1. 浏览器默认样式

  2. 用户自定义样式

  • 行内样式:
    style=“ ”
  • 文档样式
    <style></style>
  • 外部样式(使用 link 标签引入)
    style.css

3 优先级:行内样式>文档样式>外部样式
另外样式优先级还与书写顺序有关,后写的会覆盖前面写的(权重一样的情况下)

基本选择器:根据元素自身特点来选择

以下面实例代码来演示各个类型的基本选择器:

  1. <h2>item1</h2>
  2. <h2 title="hello">item2</h2>
  3. <h2 id="a">item3</h2>
  4. <h2 id="a">item4</h2>
  5. <h2 class="b">item5</h2>
  6. <h2 class="b">item6</h2>
  1. 标签选择器
  1. <style>
  2. h2 {
  3. color: red;
  4. }
  5. </style>
  1. 属性选择器
  1. <style>
  2. 属性写到中括号里面
  3. h2[title="hello"] {
  4. color: green;
  5. }
  6. 可以简化不写属性值也有效
  7. h2[title] {
  8. color: green;
  9. }
  10. id: 用于唯一元素
  11. id 的唯一性由开发者确保
  12. h2[id="a"] {
  13. color: blue;
  14. }
  15. class: 用于多个元素
  16. h2[class="b"] {
  17. color: violet;
  18. }
  19. id, class 是高频属性(用的特别多)
  20. id 简写使用 “#”
  21. h2#a {
  22. color: cyan;
  23. }
  24. class 简写使用 “.”
  25. h2.b {
  26. color: orange;
  27. }
  28. 推荐尽可能只用 class 权重比较低
  29. </style>
  1. 群组选择器
    中间使用逗号隔开,选择多个
  1. <style>
  2. h2#a,
  3. h2.b {
  4. background-color: yellow;
  5. }
  6. </style>
  1. 通配选择器:
  1. <style>
  2. html body {
  3. background-color: gray !important;
  4. }
  5. </style>

如果需要调试,加高权重,使用“!important”,优先级别最高

上下文选择器(也叫层级选择器):

以下面实例代码来演示上下文选择器:

  1. <ul class="list">
  2. <li class="item">item1</li>
  3. <li class="item second">item2</li>
  4. <li class="item">
  5. item3
  6. <ul class="inner">
  7. <li>itemsun-1</li>
  8. <li>itemsun-2</li>
  9. <li>itemsun-3</li>
  10. </ul>
  11. </li>
  12. <li class="item">item4</li>
  13. <li class="item">item5</li>
  14. <li class="item">item6</li>
  15. <li class="item">item7</li>
  16. <li class="item">item8</li>
  17. </ul>
  1. 子元素:
    只选择子元素,不选择孙元素,如不选择 item3 下面的 itemsun-1 到 3 使用 “>” 号
  1. <style>
  2. .list > li {
  3. border: 1px solid #000;
  4. }
  5. </style>
  1. 后代元素: 使用空格
  1. <style>
  2. .list li {
  3. border: 1px solid #000;
  4. }
  5. </style>
  1. 相邻兄弟: 使用 “+” 号
    .item 中间空格去掉 second 换成“.”链接起来,否则就是后代元素了
    如果用的背景色,内部的孙元素会继承背景色,使用其他属性则不会。
  1. <style>
  2. .item.second + * {
  3. background-color: lightcyan;
  4. }
  5. </style>
  1. 所有兄弟: 使用 “~” 号
    从某个起到后面所有的选中,例如第二个起到后面所有。
  1. <style>
  2. .item.second ~ * {
  3. background-color: yellow;
  4. }
  5. </style>

选择器的权重

*:!important
第一等:内链 style=””
第二等:id 选择器 #h3
第三等:class 选择器 .h3
第四等:空格选择器 div h3
通配符:子选择器、相邻选择器等

1 示例:<h3 id="a" class="b" ></h3>
选择当前的 h3 有 3 种选择器,我们将 id,class,tag 想象成三位整数,初始为 0,0,0

id class tag
百位 十位 个位
0 0 0

由示例可看出大致权重

  1. <style>
  2. /* 权重:(1,1,1) */
  3. h3.b#a {
  4. background-color: red;
  5. }
  6. /* 权重:(0,1,1) */
  7. h3.b {
  8. background-color: green;
  9. }
  10. /* 权重:(0,0,1) */
  11. h3 {
  12. background-color: blue;
  13. }
  14. </style>

2 为什么不推荐使用id和tag,而是class

  • 为什么不推荐用 id?
    因为权重太高, 为了让你的代码具有弹性,尽可能用 class

  • 为什么不用权重最低的标签呢?
    语义化标签太少了,数量有限,class 可以无限数量,任意命名