深入CSS | 青训营

76 阅读3分钟

一、CSS选择器的特异度 Specificity

CSS 中的选择器有不同的优先级,称为“特异度”。特异度越高的选择器,其对应的样式就会优先应用。

特异度的值由四部分组成:

  • 行内样式, (!important),1,0,0,0
  • 每一个 ID 选择器,#id,0,1,0,0
  • 每个类选择器, 属性选择器, 伪类选择器, .title, input[type="text"], :hover,0,0,1,0
  • 每个元素选择器, 伪元素选择器,div, ::before,0,0,0,1

(0, 0, 0, 0)(行内样式,ID选择器,class/属性/伪类选择器/,类型/伪元素),当存在多个选择器样式同时适用于同一元素时,会应用特异度最高的样式,如果特异度相同,则应用最后出现的样式。

p { 
  color: blue; 
  } 
.class { 
  color: green;
   } 
#id {
   color: red; 
   } 
<p id="id" class="class">是什么颜色?</p>

image.png

因为 id 选择器的特异度最高,所以这段文本的颜色是红色的。若改为以下代码:

p{ 
  color: blue !important; 
  }
.class { 
  color: green;
   } 
#id {
   color: red; 
   } 

image.png

!important 是一个特殊的关键字; 它需要加在属性值的最后; 会让这个属性的权重变成最大值。这段代码强制字体颜色设置为蓝色,其他样式特异度都被覆盖。

二、CSS继承 Inheritance

当你为HTML中的某个元素赋予CSS样式时,这些样式不仅仅会影响当前元素,有的样式还会影响该元素的子元素。这些下层子元素继承上层祖先元素样式属性的特点,就称为css继承。

inherit继承;如果元素的某css值设置为inherit,则说明该元素的该css值与其父元素的该css属性值一致,适用于所有css属性。如果一个属性不可继承,我们可以使用 inherit 这个关键字让它能从父级继承。

三、CSS求值过程解析

  • 确定声明值。
  • 层叠冲突。对样式表中有冲突的声明使用层叠规则,确定css属性值
  • 使用继承。对仍然没有值的属性,若可以继承,则继承父元素的属性值
  • 使用默认值。对仍然没有值的属性,使用默认值

四、CSS布局方式及相关技术

  • float浮动布局

我们可以通过设置float属性让元素向左浮动或者向右浮动,以便让周围的元素或文本环绕着这个元素。float属性值只有两个:left / right。如果出现子元素全部浮动,导致了父视图高度为0,导致了页面紊乱,可以通过给父视图添加固定高度解决。

    .right {
        float: right;
        width: 10px;
        height: 20px;
        background: red;
    }
  • position定位布局

position定位灵活且简单。可以相对元素框的常规位置定义元素的具体位置,可以相对父元素或另一个元素定位元素的位置,甚至可以相对可视区(例如浏览器窗口)定位元素的位置。position定位布局分为三种类型:相对定位relative,绝对定位absolute, 固定定位fiexd

  • flex弹性盒子布局

flex容器:任何一个容器都可以指定为flex布局(display:flex),其包含flex项。

flex项:(也称flex子元素),需要布局的元素 排列方向(direction):决定了flex项的布局方向。

弹性盒布局的常用属性有7个:display,flex-flow,justify-content,align-items,order,flex,align-self。