博客列表 >伪类选择器与选择器权重以及盒子模型的实例演示

伪类选择器与选择器权重以及盒子模型的实例演示

靠近你深拥你
靠近你深拥你原创
2023年03月18日 03:22:27425浏览

1. 伪类选择器

根据元素的位置或状态来匹配子元素

1.1 结构伪类

与上下文选择器很相似

后文演示所用 HTML 代码如下:

  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>伪类展示</title>
  8. <link rel="stylesheet" href="rest.css" />
  9. <style>
  10. /* 此处填充 演示代码 */
  11. </style>
  12. </head>
  13. <body>
  14. <ul class="list">
  15. <li class="item">item1</li>
  16. <li class="item">item2</li>
  17. <li class="item">item3</li>
  18. <li class="item">item4</li>
  19. <li class="item">item5</li>
  20. <li class="item">item6</li>
  21. <li class="item">item7</li>
  22. <li class="item">item8</li>
  23. <li class="item">item9</li>
  24. </ul>
  25. </body>
  26. </html>
1. :nth-child(an+b):获取任意位置的元素
  • 参数说明
    • a: 系数,[0,1,2,3,…]
    • n: 参数, [0,1,2,3,…]
    • b: 偏移量, 从 0 开始

      规则: 计算出来的索引,必须是有效的(从 1 开始)

例子 1:匹配父元素中的第 n 个子元素,元素类型没有限制。n 可以是一个数字,一个关键字,或者一个公式。
  • 代码如下:
  1. .list > .item:nth-child(5) {
  2. background-color: red;
  3. }
  • 运行效果

    例子 2:获取前三个元素
  • 代码如下:

  1. .list > .item:nth-child(-n + 3) {
  2. background-color: red;
  3. }
  • 运行效果

    例子 3:获取最后三个元素
  • 代码如下:

  1. .list > .item:nth-last-child(-n + 3) {
  2. background-color: red;
  3. }
  • 运行效果

    例子 4:选择列表的奇数项,参数可设为(2n+1)或者(2n-1)
  • 代码如下:

  1. .list > .item:nth-child(2n + 1) {
  2. background-color: red;
  3. }
  1. .list > .item:nth-child(2n - 1) {
  2. background-color: red;
  3. }

可使用参数(odd)进行选择,更加方便快捷明了

  1. .list > .item:nth-child(odd) {
  2. background-color: red;
  3. }
  • 运行效果
例子 5:选择列表的偶数项,可用参数(even)或(2n)
  • 代码如下:
  1. .list > .item:nth-child(even) {
  2. background-color: red;
  3. }
  1. .list > .item:nth-child(2n) {
  2. background-color: red;
  3. }
  • 运行效果

    例子 6:选择有固定间隔特征的元素,可用偏侈量进行微调,可正可负
  • 代码如下:

  1. .list > .item:nth-child(3n + 1) {
  2. background-color: red;
  3. }
  • 运行效果
  1. :first-child:选中父元素下的第一个子元素
  • 代码如下:
  1. .list > .item:first-child {
  2. background-color: red;
  3. }
  • 运行效果
  1. :last-child:选中父元素下的最后一个子元素
  • 代码如下:
  1. .list > .item:last-child {
  2. background-color: red;
  3. }
  • 运行效果

    1.2 状态伪类

  • 演示所用 html 代码:

  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>状态伪类</title>
  8. <link rel="stylesheet" href="form.css" />
  9. <link rel="stylesheet" href="fake-status.css" />
  10. </head>
  11. <body>
  12. <form action="">
  13. <fieldset class="login">
  14. <legend class="title">用户登录</legend>
  15. <label for="uname">呢称:</label>
  16. <input type="text" name="uname" autofocus required />
  17. <label for="email">邮箱:</label>
  18. <input type="email" name="email" required />
  19. <label for="tel">电话:</label>
  20. <input type="tel" name="tel" />
  21. <div class="remember">
  22. <input type="checkbox" name="remember" id="rem" />
  23. <label for="rem">记住我</label>
  24. </div>
  25. <button class="submit">提交</button>
  26. </fieldset>
  27. </form>
  28. </body>
  29. </html>
  • 代码中form.css为样式代码,fake-status.css为实例操作代码,样式代码如下:
  1. .login {
  2. display: inline-grid;
  3. grid: auto-flow / 3em 1fr;
  4. gap: 10px 0;
  5. padding: 1em;
  6. }
  7. .login input {
  8. border: none;
  9. border-bottom: thin solid #666;
  10. }
  11. .login .title {
  12. text-align: center;
  13. }
  14. .login .btn,
  15. .login .remember {
  16. grid-column: 2;
  17. height: 2.2em;
  18. }
  19. .btn .submit,
  20. .btn .reset {
  21. width: 40%;
  22. height: 2.2em;
  23. }

链接,表单

  1. :hover: 鼠标悬停
  • 代码举例,鼠标悬停在提交按钮上,改变按钮颜色,鼠标变为小手型。
  1. .login > .submit:hover {
  2. cursor: pointer;
  3. background-color: seagreen;
  4. color: white;
  5. }
  • 运行效果
  1. :enabled: 有效控件
  • 代码举例,改变.login下所有有效控件的边框
  1. .login :enabled {
  2. border: solid 5px rebeccapurple;
  3. }
  • 运行效果

    -
  1. :disabled: 禁用控件
  • 代码举例,改变.login下禁用控件的样式。
  1. .login :disabled {
  2. background-color: aqua;
  3. color: cadetblue;
  4. border-color: antiquewhite;
  5. }
  • 运行效果
  1. :checked: 选中控件
  • 代码举例,复选框选中时将标签的文本描红
  1. .login :checked + label {
  2. color: red;
  3. }
  • 运行效果
  1. :required: 必选控件
  • 代码举例,改变表单中,所有具有必填属性元素的背景颜色。
  1. .login :required {
  2. background-color: yellow;
  3. }

-运行效果

  1. :focus: 焦点控件
  • 代码举例,输入框获取焦点后,边框变为红色。
  1. .login :focus {
  2. outline: 1px solid red;
  3. border-bottom: none;
  4. }
  • 运行效果
  1. :not(): 过滤掉某些元素
  • 代码举例,改变.login下非input元素的背景颜色。
  1. .login :not(input) {
  2. background-color: red;
  3. }
  • 运行效果
  1. :empty: 选择页面中为空的元素
  • 代码举例,将表单中,没有内容的元素,用红色标出。
  1. .login :empty {
  2. background-color: red;
  3. }
  • 运行效果

关于更多伪类知识请查询 MDN

2. 选择器优先级权重

优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定。
而当优先级与多个 CSS 声明中任意一个声明的优先级相等的时候,CSS 中最后的那个声明将会被应用到元素上。
当同一个元素有多个声明的时候,优先级才会有意义。因为每一个直接作用于元素的 CSS 规则总是会接管/覆盖(take over)该元素从祖先元素继承而来的规则。

  1. 原子选择器: tag,class,id
  2. 原子选择器权重: tag(1),class(10),id(100)

可简单理解为: 标签是个位, class 是十位, id 是百位

  • 权重示例:
  1. <div class="demo" id="test">
  2. <span class="text" id="title">爱你直到永远!</span>
  3. </div>
  1. /* 权重100 */
  2. #title {
  3. color: green;
  4. }
  5. /* 权重010无法覆盖绿色值 */
  6. .text {
  7. color: red;
  8. }
  9. /* 权重110,可以覆盖绿色值! */
  10. #title.text {
  11. color: yellow;
  12. }
  13. /* 权重020无法覆盖绿色值 */
  14. .demo > .text {
  15. color: aqua;
  16. }
  17. /* 权重224,为span元素的顶级权重 */
  18. html > body > div#test.demo > span#title.text {
  19. color: brown;
  20. }

3. 盒模型

3.1 一切皆”盒子”

  1. 盒子是页面中可见的”矩形区域”
  2. 一个网站由多个盒子布局构成。

3.2 五大属性

  1. width: 宽
  2. height: 高
  3. padding: 内边距
  4. border: 边框
  5. margin: 外边距
  • border

  1. 可见属性
  2. 可设置width,style,color
  • 举例代码
  1. <div class="test">
  2. <span>demo</span>
  3. </div>
  1. .test {
  2. width: 180px;
  3. height: 100px;
  4. /* 为每条边框设置不同的颜色 */
  5. border-top-width: 2px;
  6. border-top-style: solid;
  7. border-top-color: red;
  8. border-top: 2px solid red;
  9. border-right: 2px solid blue;
  10. border-bottom: 2px solid green;
  11. border-left: 2px solid violet;
  12. /* 四条边框相同,可简写 */
  13. /* border: 2px solid red; */
  14. }
  • 运行效果
  • padding,margin

  1. 不可见属性
  2. 仅可设置: width
  3. 大多数内置元素都有默认padding/margin
  4. 建议全部重置为 0,以方便自定义布局
  • 若为元素设置四个值的外边距,应当遵循 上、右、下、左,顺时针顺序原则。例如:
  1. .test {
  2. width: 180px;
  3. height: 100px;
  4. /* 为每条边框设置不同的颜色 */
  5. border-top-width: 2px;
  6. border-top-style: solid;
  7. border-top-color: red;
  8. border-top: 2px solid red;
  9. border-right: 2px solid blue;
  10. border-bottom: 2px solid green;
  11. border-left: 2px solid violet;
  12. /* 四条边框相同,可简写 */
  13. /* border: 2px solid red; */
  14. margin: 5px 10px 15px 20px;
  15. }
  • 边距查看
  • 两个值的边距设置,第一个为上下,第二个为左右。例如:margin: 5px 10px;

  • 边距查看

  • 三个值,顺序为 第一个值为上,第二个值为左右,第三个值为下。例如:margin: 5px 10px 30px;
  • 边距查看

    内边距设置同样如此,在二值和三值的情况下,左右永远在第二个位置。

  • width,height

  1. 默认不包含 padding,border
  1. .test {
  2. width: 180px;
  3. height: 100px;
  4. }
  • 边距查看
  • box-sizing

  1. box-sizing: 设置盒模型计算边界
    • content-box: 默认值,仅包括内容区
    • 测试:
      1. .test {
      2. width: 180px;
      3. height: 100px;
      4. margin: 5px;
      5. padding: 5px;
      6. border: solid 2px red;
      7. }
    • 结论

      此模式下,盒子大小改变,宽高超出范围不利于计算。

    • border-box: 推荐值,宽高扩展到可视边框
    • 测试:
      1. .test {
      2. width: 180px;
      3. height: 100px;
      4. margin: 5px;
      5. padding: 5px;
      6. border: solid 2px red;
      7. box-sizing: border-box;
      8. }
    • 结论

      此模式下,边距往内扩展,盒子大小不变。

  • 通用初始化代码

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议