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

实战演示元素的样式来源以及基本选择器,和上下文选择器 并对比选择器的权重,并分析了为什么常用class属性少用id和标签属性

程序员文章站 2022-04-17 18:55:16
...

课后作业

实战演示元素的样式来源以及基本选择器,和上下文选择器 并对比选择器的权重,并分析了为什么常用class属性少用id和标签属性

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div>
  11. <h1>作业内容:</h1>
  12. <h5>示例演示元素的样式来源</h5>
  13. <!-- 上面使用的h1和h5是浏览器自带的样式来源,并非用户自定义的样式来源 -->
  14. <!-- 下面为用户自定义来源,来源的方式有三种 -->
  15. <h1 style="color: blue">用户自定义样式来源</h1>
  16. <!-- 理解为行内 -->
  17. <h1 class="h1">内部样式</h1>
  18. <style>
  19. .h1 {
  20. color: brown;
  21. }
  22. </style>
  23. </div>
  24. <!-- 上面理解为内部 -->
  25. <h2 class="h2">引用外部样式</h2>
  26. <link rel="stylesheet" href="demo.css" />
  27. <!-- 引用外部的css -->
  28. <!-- 1. 实例演示: 元素的样式来源结束 -->
  29. <!-- 示例演练以下几种常用的选择器 -->
  30. <h2>基本选择器常用的几种</h2>
  31. <h4>标签选择器</h4>
  32. <p>像常用的标签选择器有div/h1/h2/h3以标签命名</p>
  33. <p>标签选择器实现当前的效果</p>
  34. <style>
  35. h2 {
  36. background-color: brown;
  37. }
  38. p {
  39. color: blue;
  40. }
  41. h4 {
  42. background-color: blueviolet;
  43. }
  44. </style>
  45. <!-- 标签选择器演练结束下面将使用class选择器 -->
  46. <div class="tags">
  47. <p>当前使用了class选择器,当前页面前面已经使用了p标签选择器,</p>
  48. <p>但是我现在又用了class选择器,class选择器的权重比标签选择器高,</p>
  49. <p>来查看下效果吧</p>
  50. </div>
  51. <style>
  52. div.tags p {
  53. color: red;
  54. }
  55. </style>
  56. <!-- 下面将使用id选择器,按照权重的分配,标签选择器的权重比id选择器更低,这里将使用到id选择器 -->
  57. <div id="tags" class="tags">
  58. <p>id选择器具有较高的权限,比默认的浏览器自带的,和class选择器的级别更改,</p>
  59. <p>当前使用了id选择器,在之前的代码中,已经写到了class选择器p标签的颜色,</p>
  60. <p>红色,但是我用id选择器又更改为了另外的颜色</p>
  61. </div>
  62. <style>
  63. #tags p {
  64. color: chocolate;
  65. }
  66. </style>
  67. <!-- 下面为群组选择器的实战演练 -->
  68. <div>
  69. <div>
  70. <a href="">群组选择器1</a>
  71. <a href="">群组选择器2</a>
  72. <a href="">群组选择器3</a>
  73. <a href="">群组选择器4</a>
  74. <a href="">群组选择器5</a>
  75. </div>
  76. </div>
  77. <div>
  78. <li>
  79. <a href="">第二组1</a><a href="">第二组2</a><a href="">第二组3</a><a href="">第二组4</a><a href="">第二组5</a>
  80. </li>
  81. </div>
  82. <style>
  83. div a,
  84. li a {
  85. color: crimson;
  86. }
  87. </style>
  88. <!-- 上面为群组选择器的实战演练 -->
  89. <!-- 下面为通配符选择器演练部分 -->
  90. <style>
  91. html body ul li * {
  92. color: darkgreen;
  93. }
  94. </style>
  95. <ul>
  96. <li>
  97. <a href="baidu.com">百度一下1</a><a href="baidu.com">百度一下2</a><a href="baidu.com">百度一下3</a
  98. ><a href="baidu.com">百度一下4</a><a href="baidu.com">百度一下5</a>
  99. </li>
  100. </ul>
  101. <!-- 上方为通配选择器演练部分 -->
  102. <!-- 下面为上下文选择器实战部分 -->
  103. <!-- 常规的子元素选择器 -->
  104. <ul class="php">
  105. <li>
  106. <a href="php.cn">上级</a>
  107. <li>
  108. <a href="php.cn">1</a><a href="php.cn">2</a><a href="php.cn">3</a
  109. ><a href="php.cn">4</a><a href="php.cn">5</a>
  110. </li>
  111. </li>
  112. </ul>
  113. <style>
  114. ul.php > li > a{color: darkmagenta;}
  115. </style>
  116. <!-- 兄弟元素和和后代元素同时使用,词快穷了 -->
  117. <ul>
  118. <li>后代元素15</li>
  119. <li class="h">后代元素25</li>
  120. <li>后代元素35</li>
  121. <li>后代元素45</li>
  122. <li>后代元素55</li>
  123. </ul>
  124. <style>ul li.h + *{color: darkmagenta;}</style>
  125. <!-- 兄弟后代元素完毕 -->
  126. <div>
  127. <div>
  128. <li>
  129. <a href="" class="a1">证明一下后面的所有元素</a>
  130. <a href="" class="a2">证明一下后面的所有元素</a>
  131. <a href="" class="a3">证明一下后面的所有元素</a>
  132. <a href="" class="a4">证明一下后面的所有元素</a>
  133. <a href="" class="a5">证明一下后面的所有元素</a>
  134. </li>
  135. </div>
  136. </div>
  137. <style>div div li a.a2 ~ *{color: darkturquoise;}</style>
  138. <!-- 后面所有的元素证明完毕 -->
  139. <!-- 最后面选择器的权重 -->
  140. 选择器的权重id>class>标签,而同类相比,数量又居上,
  141. <div>
  142. <div><div><div><div><li>
  143. <a href="">标签权重测试</a>
  144. </li></div></div></div></div>
  145. </div>
  146. <style>
  147. /* 下面属性标签为4个div 一个a标签.标签的值为0 0 5 所以为紫色 */
  148. div div div li a{color: darkviolet;}
  149. /* 如果不注释上面的标签,使用下面的标签 标签的值为0 0 6 */
  150. div div div div li a{color: red;}
  151. </style>
  152. <!-- 上面为标签属性权重对比 -->
  153. <!-- 下面为class权重属性对比 -->
  154. <div>
  155. <div><div class="div"><div><div><li class="li">
  156. <a href="">class权重测试</a>
  157. </li></div></div></div></div>
  158. </div>
  159. <style>
  160. /* 下面属性标签+class为4个div 一个class 一个a标签.标签的值为0 1 5 所以为紫色 */
  161. div div div li.li a{color: darkviolet;}
  162. /* 如果不注释上面的标签,使用下面的标签 标签的值为0 2 6 */
  163. div div.div div div li.li a{color: red;}
  164. </style>
  165. <!-- id属性+class属性+标签属性权重测试 -->
  166. <div>
  167. <div id="nav"><div class="div nav"><div><div><li class="li">
  168. <a href="">综合属性权重测试</a>
  169. </li></div></div></div></div>
  170. </div>
  171. <style>
  172. /* 下面属性标签+class为4个div 一个class 一个a标签.标签的值为0 1 5 所以为紫色 */
  173. div div div li.li a{color: darkviolet;}
  174. /* 如果不注释上面的标签,使用下面的标签 标签的值为0 2 6 */
  175. div div.div div div li.li a{color: red;}
  176. /* 如果不注释上面的标签,使用下面的标签 标签的值为0 3 6 */
  177. div div.div.nav div div li.li a{color: rgb(60, 0, 255);}
  178. /* 如果不注释上面的标签,使用下面的标签 标签的值为1 3 6 */
  179. div#nav div.div.nav div div li.li a{color: orangered;}
  180. </style>
  181. </body>
  182. </html>

以下部分为本人理解部分,老师可以略过.

元素来源:

元素的两大样式来源
  • 浏览器默认样式
  • 用户自定义样式
  1. 浏览器默认样式
    浏览器的默认样式常用的都存在于标签中,如h1/h2/h3/a标签,都是常见的浏览器自默认样式的标签,h1标签对文字增大,a标签对文字颜色加色
  2. 用户自定义样式
    用户自定义样式的格式如下面几篇代码均为用户自定义样式
    <h1 style="color: red">你好php</h1>
    <a href="#"style="color: red" >把a标签默认的颜色蓝色换成红色</a>
    用户定义了颜色为红色的文字,也叫设置样式
    /* h1 : 标签/也叫元素选择器 */
    有了标签需给标签添加样式,上面已经添加了样式,样式是包裹在标签里面,形式如下:
    style="老师叫形式声明"
    写法如下:
    1. /* h1 { */
    2. /* 样式声明: 使用是"名值对" */
    3. /* color: red; */
    4. /* } */
而形式声明又分为三种
  • 行内形式
  • 内部形式
  • 外部形式
  1. 行内形式
    行内形式顾名思义,是写在标签行内的形式,如以下:
    <h1 style="color: red">你好php</h1>
  2. 内部形式
    内部形式是写在页面内部,如以下

    1. <h1 style="color: indigo">大家晚上好,吃了吗?</h1>
    2. <style>
    3. h1 {
    4. color: blue;
    5. }
    6. </style>
  3. 外部形式
    外部形式是引用外部css到当前页面或多个页面调用使用,示例代码如下:

    1. <link rel="stylesheet" href="css/style1.css" />
    2. 上面css里面已经写入了css
    3. <h1 class="love">大家晚上好,吃了吗?</h1>

    其优先级关系调用,行内>内部>外部 当然还有个秒天秒地秒空气的..尽量调试用的
    这里直接贴入老师写注释代码,以防自己忘记.

    1. <!-- 当前是HTML, 结构化的文本文档,它内部的所有元素,必须使用"标签"进行描述 -->
    2. <!-- 只要放到了html中内容,并且要被浏览器进行解析或处理的,就必须要放到一个"标签" -->
    3. <style>
    4. /* 1. 查询: 找到要被添加样式的元素 */
    5. /* selector : 选择器 */
    6. /* h1 : 标签/元素选择器 */
    7. /* 2. 为匹配的元素,设置样式规则 */
    8. /* 样式规则: 放入一对大括号中 */
    9. /* h1 { */
    10. /* 样式声明: 使用是"名值对" */
    11. /* color: red; */
    12. /* } */
    13. /* 选择器 {
    14. 一个或多个样式声明
    15. } */
    16. /* css工作流: 1. 找到元素; 2. 设置样式 */
    17. </style>
    18. <!-- style属性的优先级要大于 style 标签 -->
    19. <!-- style="..." : 行内样式/内联样式, 直接作用到"元素级" -->
    20. <!-- <style>: 内部样式/文档样式, 直接作用到"文档级" -->

再说下内页优先级,常用在页面内部和css内部,当一个css当中,例如颜色为多个颜色,优先使用最后一个,如以下:

  1. <style>
  2. h1 {
  3. color: red;
  4. color: green;
  5. color: blue;
  6. /* 样式来源, 除了与优先级相关, 还与书写顺序相关 */
  7. /* 写到后面,会覆盖前面的 */
  8. }
  9. </style>
标签属性的样式集成

先贴代码:

  1. <div>
  2. <p>html是一个具有层级结构的文档,可以根据元素之间层级关注,实现样式复用</p>
  3. <a href="#">样式继承</a>
  4. <h3 style="color: turquoise">Hello</h3>
  5. </div>
  6. <style>
  7. div {
  8. /* div是P的父级 */
  9. border: 1px solid #000;
  10. color: violet;
  11. }
  12. p {
  13. color: green;
  14. /* 颜色/前景色: 是可以继承的属性 */
  15. color: inherit;
  16. }
  17. /* 默认样式/代理样式 > 继承样式 */
  18. /* 1. style标签
  19. 2. 外部css文档
  20. 3. 样式继承 */
  21. </style>

子级集成父级别的样式,例如代码中如果不存在p标签单独的属性,div中的颜色会继承为p标签,但如果p标签有了自己的颜色,将使用p标签单独的颜色,其中p标签color: inherit;意思是强制继承父级color颜色.就是无论p标签的color单独设置什么颜色,都将继承div里面的color的颜色,多用多数量

属性基本选择器

属性的基本选择器常用的分为以下几种:

  1. <h2>item1</h2>
  2. <h2 title="hello">item2</h2>
  3. <!-- id的唯一性由开发者确保,浏览器不检查 -->
  4. <h2 id="a">item3</h2>
  5. <h2 id="a">item4</h2>
  6. <h2 class="b">item5</h2>
  7. <h2 class="b">item6</h2>
  8. <style>
  9. /* 基本选择器: 根据元素自身特点来选择 */
  10. /* 1. 标签选择器 */
  11. h2 {
  12. color: red;
  13. }
  14. /* 2. 属性选择器 */
  15. h2[title="hello"] {
  16. color: green;
  17. }
  18. /* id: 用于唯一元素 */
  19. h2[id="a"] {
  20. color: blue;
  21. }
  22. /* class: 用于多个元素 */
  23. h2[class="b"] {
  24. color: violet;
  25. }
  26. /* id, class是 高频属性 */
  27. /* id => # */
  28. h2#a {
  29. color: cyan;
  30. }
  31. /* class = "." */
  32. h2.b {
  33. color: orange;
  34. }
  35. /* 推荐尽可能只用class */
  36. /* 3. 群组选择器 */
  37. h2#a,
  38. h2.b {
  39. background-color: yellow;
  40. }
  41. /* 4. 通配选择器: * */
  42. html body * {
  43. background-color: gray !important;
  44. }
  45. /* !important: 瞬间提权到100%*只建议在开发中使用 */
  46. </style>
上下文选择器/层级选择器

示例代码:

  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>item3-1</li>
  8. <li>item3-2</li>
  9. <li>item3-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>
  18. <style>
  19. /* 1. 子元素(就是class属性+标签,是用符号>,具体的区分可以看下后代元素部分)
  20. 也就是说,这里生效的部分仅限于第四行以前,超出第四行部分css部分不会生效*/
  21. .list > li {
  22. border: 1px solid #000;
  23. }
  24. /* 2. 后代元素: 空格 (后代元素是后面是后面所有的,意思就是,不止第四行的css会变,第10行以前的li都会改变css样式)*/
  25. .list li {
  26. border: 1px solid #000;
  27. }
  28. /* 3. 相邻兄弟: + */(比较好理解就是下一行代码执行的命令)
  29. .item.second + * {
  30. background-color: lightcyan;
  31. }
  32. /* 4. 所有兄弟: ~ */ (定位的后面所有代码都将执行下面的css)
  33. .item.second ~ * {
  34. background-color: yellow;
  35. }
  36. </style>
选择器的继承
  1. <body>
  2. <h1 class="title" id="active">Hello</h1>
  3. <style>
  4. /* 1 1 2 */
  5. /* 2: 表示2个标签,
  6. 1: 表示1个class
  7. 1: 表示1个id */
  8. body h1.title#active {
  9. color: red;
  10. }
  11. /* 0 1 2 */
  12. /* 2: 表示2个标签,
  13. 1: 表示1个class
  14. 0: 表示没有id */
  15. body h1.title {
  16. color: blue;
  17. }
  18. /* 就想放在第一行,又想让它生效,只有提权 */
  19. /* 0 0 2 */
  20. /* 2: 表示2个标签,
  21. 0: 表示没有class
  22. 0: 表示没有id */
  23. body h1 {
  24. color: green;
  25. }
  26. /* 相同的权重,由位置决定样式 */
  27. /* 0 0 1 */
  28. /* 1: 表示只有一个标签,
  29. 0: 表示没有class
  30. 0: 表示没有id */
  31. h1 {
  32. color: darkorange;
  33. }
  34. /* 三个权重的位置, 从右到左
  35. 第1位: 标签数量
  36. 第2位: class数量
  37. 第3位: id数量 */
  38. /* css 将 id, class, tag 看成一个"三位整数", id -> 百位, class -> 十位, tag -> 个位 */
  39. /* h1 {
  40. color: violet !important;
  41. } */
  42. /* id : 为什么不推荐用? 因为权重太高, 为了让你的代码具有弹性,尽可能用class */
  43. /* 为什么不用权重最低的标签呢? 只是标签的数量太少了, 而class可以任何命名 */
  44. /* bootstrap , element ui */
  45. </style>
  46. <div class="col-md-3 vip">Bootstrap</div>
  47. <style>
  48. /* 0 2 1 */
  49. div.col-md-3.vip {
  50. border: 5px solid red;
  51. }
  52. /* 0 1 1 */
  53. div.col-md-3 {
  54. border: 1px solid #000;
  55. }
  56. </style>
  57. </body>