CSS易漏知识

复杂选择器可以通过(id的个数,class的个数,标签的个数)的形式,计算权重。

如果我们需要将某个选择器的某条属性提升权重,可以在属性后面写!important;注意!importent要写在;前面 很多公司不允许使用!important,因为这会带来不经意的样式冲突。

一、复杂选择器

复杂选择器可以通过(id的个数,class的个数,标签的个数)的形式,计算权重。

如果我们需要将某个选择器的某条属性提升权重,可以在属性后面写!important;注意!importent要写在;前面 很多公司不允许使用!important,因为这会带来不经意的样式冲突。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
   <style>
        /* 
            权重(2, 0, 1)
         */
        #box1 #box2 p {
            color: red;
        }

        /* 
            权重(2, 1, 2)
         */
        #box1 div.box2 #box3 p {
            color: green;
        }

        /* 
            权重(0, 3, 1)
         */
        .box1 .box2 .box3 p {
            color: blue;
        }


        /* 
            权重(0, 1, 1)
         */
        .list li {
            color: red;
        }
        /* 
            权重(0, 1, 0)
         */
        .spec {
            color: blue !important;
        }
    </style>
</head>

<body>
    <div id="box1" class="box1">
        <div id="box2" class="box2">
            <div id="box3" class="box3">
                <p>我是段落</p>
            </div>
        </div>
    </div>

    <ul class="list">
        <li>列表项</li>
        <li class="spec">列表项</li>
        <li class="spec">列表项</li>
        <li>列表项</li>
        <li>列表项</li>
        <li>列表项</li>
        <li>列表项</li>
    </ul>
</body>

</html>

二、属性选择器

根据元素的属性值来选择元素,有以下多种匹配方式:

alt\] 有这个属性 \[alt = "北京故宫"\] 精确匹配 \[alt \^= "abc"\] 开头匹配 \[alt $= "abc"\] 结尾匹配 \[alt \*= "abc"\] 任意位置匹配 \[alt \|= "abc"\] abc-开头 \[alt \~= "abc"\] abc为空格分开的独立部分 ## 三、伪类 伪类是添加到选择器的描述性词语,指定要选择的元素的特殊状态,超级链接有四个特殊状态。 a:link 没有被访问的超级链接 a:visited 已经被访问的超级链接 a:hover 正被鼠标悬停的超级链接 a:active 正被激活的超级链接(按下按键但还没松开按键) a标签的伪类书写,要按照"爱恨准则"的顺序,否则会有伪类不生效。 **L** O**V** E**HA**TE ## 四、CSS3新增伪类 :empty选择空标签 (注意有空格不被视为空标签) :focus选择当前获得焦点的表单元素 :enabled选择当前有效的表单元素 :disabled选择当前无效的表单元素 :checked选择当前已经勾选的单选按钮或者复选框 :root选择根元素,即\标签 ```html Document

123

文字 文字 文字 文字

``` ## 五、伪元素 ::before创建一个伪元素,其将成为匹配选中的元素的**第一个子元素**,必须设置content属性表示其中的内容。 ::after创建一个伪元素,其将成为匹配选中的元素的**最后一个子元素**,必须设置content属性表示其中的内容。 ::section ::first-letter会选中某元素中(必须是块级元素)第一行的第一个字母 ::first-line会选中某元素中(必须是块级元素)第一行的全部文字 ```html Document

我是超级链接

我是超级链接

我是超级链接

文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
``` ## 六、元素关系选择器 \>子选择器 当使用\>号分割两个元素时,他只会匹配那些作为第一个元素的直接后代元素,即两个标签为父子关系。与后代选择器的区别是后代选择器不一定限制是子元素。 div\>p div的子标签p +相邻兄弟选择器,img+p 图片后面紧跟着的段落将被选中。 \~通用兄弟选择器,a\~b选择a元素之后所有同层级b元素。p\~span p元素之后的所有同层级span元素。 ```html Document

我是段落

我是段落

我是段落

我是段落

我是段落

我是段落

这是北京故宫

这是北京鸟巢

你好 你好

我是一个三级标题

我是后面的span 我是后面的span 我是后面的span 我是后面的span

我是一个段落

我是后面的span 我是后面的span
多了一个级别span 多了一个级别span
``` ## 七、文字水平垂直居中 需要分别设置水平和垂直居中 ```html Document
行胜于言
``` ## 八、text-indent属性 `text-indent` 是一个CSS属性,用于指定块级元素中第一行文本的缩进量。这个属性可以接受多种单位,包括像素(px)、百分比(%)、em、rem等。 以下是一些使用 `text-indent` 的例子: ```html p { text-indent: 20px; /* 文本缩进20像素 */ } h1 { text-indent: 2em; /* 文本缩进当前字体大小的两倍 */ } div { text-indent: 10%; /* 文本缩进父元素宽度的10% */ } ``` `text-indent` 的几个关键点: * 它只对块级元素的第一行文本有效。 * 如果值为负数,第一行文本会向左缩进,可能超出其容器的左边框。 * 它通常用于段落(`

`标签)以创建首行缩进,这在印刷和出版行业中很常见。 * `text-indent` 可以继承,因此应用于父元素的缩进也会应用于子元素,除非子元素有明确的样式覆盖。 这个属性在网页设计中常用于增强文本的排版效果,尤其是在文章或博客文章中,为段落添加首行缩进可以提升阅读体验。 ## 九、margin和padding的区别 `margin` 和 `padding` 是CSS中用于控制元素空间布局的两个不同属性,它们的主要区别在于它们控制的是元素的不同区域: * `margin`:**用于设置元素边缘与其周围元素之间的空间。** 它位于元素的边框之外,是元素盒子模型的一部分。`margin` 可以接受一到四个值,分别代表上、右、下、左的边距。如果没有指定某个值,它将使用对边的值。 例如,以下CSS规则将设置一个元素的四个边距为0: .element { margin: 0; /* 上右下左的边距都是0 */ } * `padding`:**用于设置元素内容与其边框之间的空间。** 它位于元素的边框之内。与 `margin` 一样,`padding` 也可以接受一到四个值。 例如,以下CSS规则将设置一个元素的四个内边距为0: .element { padding: 0; /* 上右下左的内边距都是0 */ } 以下是 `margin` 和 `padding` 之间的主要区别: 1. **位置**: * `margin` 位于元素的边框之外。 * `padding` 位于元素的边框之内。 2. **背景**: * `margin` 的背景是透明的,不会受到元素背景颜色或背景图像的影响。 * `padding` 的背景颜色或背景图像与元素本身的背景相同。 3. **布局影响**: * `margin` 影响元素与周围元素之间的空间,可以用于创建元素之间的间隔。 * `padding` 影响元素内容与元素边框之间的空间,可以用于增加元素内部的空白区域。 4. **折叠**: * `margin` 在某些情况下会发生折叠,特别是垂直方向上的相邻元素的相邻边距会合并为一个较大的边距。 * `padding` 不会发生折叠。 5. **继承**: * `margin` 通常不继承,即子元素不会继承父元素的 `margin` 值。 * `padding` 可以继承,但通常会被子元素的 `padding` 值覆盖。 在网页设计中,通常将 `margin: 0;` 和 `padding: 0;` 用于重置浏览器默认样式,以确保在不同浏览器之间获得一致的布局效果。 ## 十、盒模型的计算 width和height不是盒子的实际长宽而是盒子留给内容的长宽,即实际可用面积(相当于向外踹)。所以盒子的实际宽度是width+padding宽度+border的宽度。 ![](https://i-blog.csdnimg.cn/direct/5423c4c5365d45ec843f808db3cde978.png) ```html Document

1
2
```

相关推荐
LFly_ice2 分钟前
Next-1-启动!
开发语言·前端·javascript
小时前端4 分钟前
谁说 AI 历史会话必须存后端?IndexedDB方案完美翻盘
前端·agent·indexeddb
wordbaby9 分钟前
TanStack Router 基于文件的路由
前端
wordbaby13 分钟前
TanStack Router 路由概念
前端
wordbaby16 分钟前
TanStack Router 路由匹配
前端
cc蒲公英17 分钟前
vue nextTick和setTimeout区别
前端·javascript·vue.js
程序员刘禹锡21 分钟前
Html中常用的块标签!!!12.16日
前端·html
Flystone28 分钟前
CSS 有什么奇技淫巧?
css
我血条子呢32 分钟前
【CSS】类似渐变色弯曲border
前端·css
DanyHope32 分钟前
LeetCode 两数之和:从 O (n²) 到 O (n),空间换时间的经典实践
前端·javascript·算法·leetcode·职场和发展