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
```

相关推荐
vvilkim18 分钟前
React 与 Vue 虚拟 DOM 实现原理深度对比:从理论到实践
前端·vue.js·react.js
天天扭码22 分钟前
在项目中常见的main.js和main.mjs有什么区别,我们该如何选择?
前端·javascript·面试
姑苏洛言31 分钟前
在开发扫码小程序中,遇到胡坑“require() 默认不支持绝对路径”及其解决方案
前端
Passerby_K32 分钟前
vue3+dhtmlx 甘特图真是案例
前端·vue·甘特图
佳腾_38 分钟前
【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建
java·前端·中间件·tomcat·web应用服务器
brzhang1 小时前
代码即图表:dbdiagram.io让数据库建模变得简单高效
前端·后端·架构
三巧1 小时前
纯CSS吃豆人(JS仅控制进度)
javascript·css·html
SummerGao.1 小时前
【解决】layui layer的提示框,弹出框一闪而过的问题
前端·layui
软件技术NINI2 小时前
html css js网页制作成品——HTML+CSS+js美甲店网页设计(5页)附源码
javascript·css·html
天天扭码2 小时前
从数组到对象:JavaScript 遍历语法全解析(ES5 到 ES6 + 超详细指南)
前端·javascript·面试