CSS三大特性之层叠性~

简介: CSS三大特性之层叠性~

CSS的三个特性:层叠性,继承性,优先级

层叠性:

相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式,层叠性主要解决样式冲突的问题

层叠性原则:

样式冲突,遵循的原则---就近原则,那个样式离结构近,就执行那个样式
样式不冲突,不会层叠

举例:

<head>
    <style>
        div{
            color:aquamarine;
            font-size: 40px;
        }
        div{
            color:blue;
        }
    </style>
</head>
<body>
    <div>层叠样式</div>
</body>

显示如下:

color被覆盖而font-size并没有被覆盖

继承性:

CSS中的继承:子标签会继承父标签的某些样式,如文本的颜色和字号

举例:

<head>
    <style>
        div{
            color:aquamarine;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div>
        <p>我是div的子标签</p>
    </div>
</body>

显示如下:

在style中,我们并没有给p标签设置任何的属性,但由于它是div标签的子标签,所以他最终显示的效果是div的样式

通过我们之前所讲的调试工具,它也能告诉我们p的样式是继承与div标签


继承性的优点:

1:恰当的使用继承可以简化代码量,降低CSS样式的复杂性

2:子元素可以继承父元素的样式(text-,font-,line-这些元素开头的属性都可以继承,以及color属性)


行高的继承性:

我们先来回忆一下综合设置字体样式的语法:

p{
  font:font-style font-weight font-size/line-height font-family;
}

通过之前的学习我们知道,行高的单位是px,但行高也可以不带单位,但是不带单位并不是直接把px去掉,而是改变一下表示方法

举例:

之前的写法:

div {
            color: blue;
            font: 15px/30px 宋体;
}

不带单位:

div {
            color: blueviolet;
            font: 15px/2 宋体;//表示行高为当前文字大小的2倍,也就是30px
}

以上两种书写均正确!

如果子元素没有设置行高,则会继承父元素的行高

举例:

<head>
    <style>
        div {
            color: blueviolet;
            font: 15px/2 宋体;
        }
        p{
            color:aquamarine;
            font-size:20px;
        }
    </style>
</head>
<body>
    <div >我是div1中的文字
        <p>我是p标签</p>
    </div>
</body>

显示如下:

我们并没有给p标签指定行高,仅仅是指定了它的文字大小,那么它就会继承父元素div的行高,此时的行高大小为p标签文字的大小×2

而这样写的好处就在于我们能够通过子元素的文字大小自动调整它的行高

优先级:

当同一个元素指定多个选择器,就会有优先级的产生

选择器相同的情况下,则执行层叠性

就近原则!!

选择器不同,则根据选择器权重执行

上表中的选择器权重由上到下依次增大,选择器权重越大,优先级越高

举例:

<head>
    <style>
         .div1{
            color:aquamarine;
            font-size:20px;
        }
        div {
            color: blueviolet;
            font: 15px/2 宋体;
        }
    </style>
</head>
<body>
   <div class="div1">早上好</div>
</body>

显示如下:

其它的都是一样的方法,大家可以自行写代码体会一下,这里我们重点说一下最后一个选择器的用法:

!important选择器:

在选择器中,它的权重是最大的,可以理解为它能够强制性的将某个权重较低选择器中的某个样式显示出来,只需要在该样式后面+!important

举例:

<head>
    <style>
         .div1{
            color:aquamarin ;
            font-size:10px;
        }
        div {
            color: blueviolet !important;
            font-size:  50px;
        }
    </style>
</head>
<body>
   <div class="div1">早上好</div>
</body>

显示如下:


类选择器的权重大于标签选择器,所以此时应该显示的是类选择器中指定的样式,但由于在标签选择器的color属性后面,使用了!important,所以字体的颜色显示出来的是标签选择器中的样式,并非类选择器中的样式


但是需要注意的是,标签选择器中的font-size属性并没有通过!important强制指定,因此字体的大小还是类选择器中指定的大小,!important只能用来指定单个的属性


优先级----小tips:

1:权重是由4组数字组成,但是不会有进位
2:等级判断从左到右,如果某一位数值相同,则判断下一位
3:继承的权重是0,如果该元素没有被选中,不管父元素权重是多少,子元素得到的权重都是0

举例:

<head>
    <style>
       #div1{
        color:chartreuse;
       }
       p{
        color:darksalmon;
       }
    </style>
</head>
<body>
   <div id="div1">早上好
    <p>我是p标签</p>
   </div>
</body>

显示如下:

为什么p标签中的文字并没有像显示它的父类id选择器中的效果呢?

原因就是我们上述所说的,子元素继承的权重为0, 即使父元素的权重很高,但是在子元素这里都是0,因此p标签中的文字显示的效果为元素选择器中的样式


关于优先级,还有一个特殊的标签-----a标签:

下述实例中,我们对body部分进行了样式的设置:

<head>
    <style>
       body{
        color:darkgreen;
       }
    </style>
</head>
<body>
   <div id="div1">早上好
    <p>我是p标签</p>
   </div>
   <a href="#">我是超链接</a>
</body>

显示如下:

但是显示效果中a标签的文字依旧是绿色,查看style,我们也没有对a标签进行额外的样式设计呀


原因就是 a标签被浏览器默认的设置为蓝色的带下划线的样式,所以即使没有对它设置新的样式,他也不会继承body的样式

如果不想a标签显示浏览器默认的样式,那么我们可以通过元素选择器对其设置新的样式

举例:

<head>
    <style>
       body{
        color:darkgreen;
       }
       a{
        color:chocolate;
       }
    </style>
</head>
<body>
   <div id="div1">早上好
    <p>我是p标签</p>
   </div>
   <a href="#">我是超链接</a>
</body>

显示如下:

权重的叠加问题:

权重的叠加一般出现在复合选择器中,这里就需要涉及权重的计算问题

举例:

   <head>
        <style>
        /*ul li权重计算:0,0,0,1+0,0,0,1=0,0,0,2 2*/
           ul li{
            color:darkolivegreen;
           }
           /*li权重是:0,0,0,1  1*/
           li{
            color:brown;
           }
           /* .nav li 权重计算:0,0,1,0+0,0,0,1=0,0,1,1   11*/
           .nav li{
            color:aquamarine;
           }
        </style>
    </head>
    <body>
       <ul class="nav">
        <li>早上好</li>
        <li>中午好</li>
        <li>晚上好</li>
       </ul>
    </body>

取权重最大的值的样式进行显示

显示如下:

注意:权重在叠加的过程中,不要进位


上述我们所举的例子涉及的选择器个数较少,但是当选择器的个数比较大时,就会出现叠加之后,最后一位变成了10,正确写法即为:0,0,0,10请记住,无论变成几十还是几百,第四位的数值都不能向上进一位,因为权重本身就是由4位构成的,我们不能加着加着把标签选择器变成了类选择器,这是不对的

相关文章
|
15天前
|
前端开发 JavaScript 开发者
探索Web设计新纪元:CSS3的革新特性如何重塑我们的网页视觉体验?
【8月更文挑战第26天】随着Web技术的发展,CSS3为前端开发带来了众多激动人心的新特性,极大提升了网页设计的视觉效果与创意空间。本文通过对比CSS3与CSS2,详细介绍了CSS3在选择器增强、圆角阴影处理、渐变背景应用、转换动画实现、文字效果优化、媒体查询支持及多列布局方面的显著改进,展示了CSS3如何助力开发者打造更具吸引力和互动性的网页体验。
31 1
|
7天前
|
前端开发
CSS层叠性与继承性
CSS层叠性与继承性。
21 2
|
4月前
|
机器学习/深度学习 移动开发 前端开发
CSS3 新特性
CSS3 新特性
54 0
|
11天前
|
前端开发 JavaScript API
Vue 3 新特性:在 Composition API 中使用 CSS Modules
Vue 3 新特性:在 Composition API 中使用 CSS Modules
|
2月前
|
前端开发
CSS样式层叠
CSS样式层叠
21 0
CSS样式层叠
|
3月前
|
前端开发 开发者
CSS基础-层叠与优先级
【6月更文挑战第10天】本文探讨了CSS中的层叠和优先级概念,解释了层叠上下文和特异性如何决定样式生效。常见问题包括误解后来居上的规则、特异性计算错误及过度使用`!important`。建议开发者理解特异性计算,合理使用层叠上下文,避免不必要的`!important`。通过示例展示了特异性与`!important`对样式的影响,强调实践和理解是提升CSS技能的核心。
26 1
|
4月前
|
前端开发 JavaScript 开发者
CSS3作为CSS的最新版本,引入了许多强大的新特性和改进
【5月更文挑战第26天】CSS3作为CSS的最新版本,引入了许多强大的新特性和改进
37 2
|
3月前
|
前端开发
番外篇-CSS3新增特性
番外篇-CSS3新增特性
15 0
|
4月前
|
前端开发 UED
【专栏:CSS 进阶篇】CSS3 新特性:过渡、动画与变形
【4月更文挑战第30天】CSS3的过渡、动画和变形三大特性为网页设计注入活力,创造生动丰富的用户体验。过渡提供平滑效果,常用于按钮点击等;动画实现复杂动态效果,适用于滚动字幕等;变形允许元素几何变换,如旋转和缩放。实际应用包括动态导航菜单、图片轮播和加载动画。然而,需注意浏览器兼容性、性能优化和设计平衡。掌握这些特性,将为网页设计带来更多创新可能。
91 1
|
4月前
|
前端开发 JavaScript 开发者
【Web 前端】css3的新特性有哪些?
【4月更文挑战第22天】【Web 前端】css3的新特性有哪些?
下一篇
DDNS