CSS优先级和布局 | 青训营笔记

101 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第1天,是我青训营发表的第一篇笔记

这篇是关于 CSS优先级CSS布局 方面的内容。

CSS优先级

优先级是如何进行计算的?

优先级就是分配给指定的 CSS 声明的一个权重,它由 匹配的选择器中的 每一种选择器类型的 数值 决定。

而当优先级与多个 CSS 声明中任意一个声明的优先级相等的时候,CSS 中最后的那个声明将会被应用到元素上。

同一个元素有多个声明的时候,优先级才会有意义。

选择器的类型

以下选择器的优先级依次递减:

  1. ID选择器。(#example)
  2. 类选择器(.example)、属性选择器([type='radio'])、伪类(:action)
  3. 类型选择器(h1)、伪元素(::before)

计算方法:哪个值大那么优先级就越高

priority.png

哪条规则起作用呢? (1)

在下面的例子中,"黄石国家公园" 最终是什么颜色的呢?

<article>
    <h1 class="title">黄石国家公园</h1>
</article>
<style>
    .title {
        color: red;
    }

    article h1 {
        color: blue;
    }
</style>

结果如下:

red.png

分析原因:

出现这样的结果的原因是类选择器 .title 计算出来的优先级的值 010 是大于 article h1 的优先级的值 002

哪条规则起作用呢? (2)

执行下面这段代码后,"黄石国家公园" 是什么颜色呢? 是红色?绿色?还是蓝色呢?

<article>
    <h1 class="title" style="color:green">黄石国家公园</h1>
</article>
<style>
    .title {
        color: red;
    }

    article h1 {
        color: blue;
    }
</style>

结果是: 绿色

green.png

分析原因

给元素添加的内联样式 (style="color:green") 总会覆盖外部样式表的任何样式, 因此 内联样式 可看作是具有 最高的优先级

CSS布局

盒子模型

boxModel.png

display属性

display有4个属性值:

display.png

block 和 inline
行级元素块级元素
和其他行级盒子一起放在一行或者被拆分成多行不和其他盒子并列摆放
生成的是行级盒子
内容分散在多个行级盒子(line box)中
生成的是块级盒子
span em strong cite code 等body article div main section h1 p ul li 等
display: inlinedisplay: block

flex-box

flex-box即弹性盒子是一种用于按行或按列布局元素的一维布局方法。元素可以膨胀以填充额外的空间,收缩以适应更小的空间。

.example {
    display: flex;
}

主轴与侧轴

axis.png

flex-dirction
属性值说明
row(默认值)主轴为水平方向,起点在左端
row-reverse主轴为水平方向,起点在左端
column主轴为垂直方向,起点在上沿
column-reverse主轴为垂直方向,起点在下沿

justify-content
属性值说明
flex-start(默认)左对齐
flex-end右对齐
center居中
space-between两端对齐,项目之间的间隔都相等
space-around每个项目两侧的间隔相等,因此项目之间的间隔比项目与边框的间隔大一倍

justify-content.png

align-items (单根轴线)
属性值说明
stretch(默认值)如果项目没有设置高度或者设置为auto,那么将占满整个容器的高度
flex-start交叉轴的起点对齐
flex-end交叉轴的终点对齐
center交叉轴的中点对齐
baseline项目的第一行文字的基线对齐

align-items.png

align-content (多根轴线)
属性值说明
stretch(默认值)轴线占满整个交叉轴
flex-start与交叉轴的起点对齐
flex-end与交叉轴的终点对齐
center与交叉轴的中点对齐
space-between与交叉轴两端对齐,轴线之间的间隔平均分布
space-around每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍

align-content.png

***以上是我在学习CSS方面觉得比较重要也是我觉得难点的地方***