[理解CSS]

206 阅读5分钟

CSS

  • Cascading Style Sheets
  • 用来定义页面元素的样式

在页面中使用CSS

1.外链

<link rel="stylesheet" href="/assets/style.css">

2.嵌入

<style>
li{ margin: 0; list-style: none; }
p{ margin: lem 0; }
</style>

3.内联

<p style="margin:lem 0">Example Content</p>

CSS工作过程

css工作图

选择器Selector

1.按照标签名、类名(.class)或id(#id)

2.按照属性(eg.input[type="password"];a[href^="#"])

3.按照DOM树中的位置

4.通配选择器(*)

5.伪类选择器(eg.a:link;a:visited;li:first-child)

6.组合选择器

组合选择器

7.选择器组(eg. body,h1,h2{};)

颜色

1.RGB(eg.rgba(255,0,0)) R-red G-green B-blue

2.HSL(eg.hsla(0,100%,50%))

H-Hue(色相):色彩基本属性,如黄色、红色等;取值范围0-360

S-Saturation(饱和度):色彩鲜艳程度,越高越鲜艳;取值范围0-100%

L-Lightness(亮度):颜色明亮程度,越高颜色越亮;取值范围0-100%

3.alpha透明度

1为完全不透明 0为完全透明

eg.#ff0000bg;rgba(255,0,0,0.5);hsla(0,100%,50%,0.5)

字体font-family

通用字体族

字体列表最后写上通用字体族

英文字体放在中文字体前面

使用Web Fonts

<style>
@font-face{
font-family: "Megrim";
src:url()format('woff2');
}

font-size

关键字:small、medium、large

长度:px、em

百分数:相对于父元素字体大小

font-style

正常:normal

斜体:italic

font-weight

字体粗细

100-900

normal:400

bold:700

line-height

行间距

1.具体px

2.无单位数字 eg.line-height:1.6 意思是font-size的1.6倍

font

font:style weight size/height family

斜体 粗细 大小/行高 字体族

eg.font:bold 14px/1.7 Helvetica, sans-serif;

text-align

left center right justify(两端对齐)

spacing

letter-spacing:字母间距

word-spacing:单词间距

text-indent

文字缩进

text-decoration

文字修饰

none:无任何修饰

underline:下划线

line-through:删除线

overline:上划线

white-space

normal:html空白符多个变一个

nowrap:永远不换行

pre:保留所有空格

pre-wrap:一行显示的下则不换行;一行显示不下则换行

pre-line:合并空格,保留换行

选择器的特异度(Specificity)

id:100

(伪)类:10

E标签:1

选择器特异度相加,显示高特异度的选择器

继承

某些属性会自动继承其父元素的计算值,除非显式指定一个值

显示继承:不可继承变成可继承属性

*{
box-sizing: inherit;
}

恢复初始值: eg.background-color: initial

CSS求值过程

求值过程1

求值过程2

求值过程3

布局

常规流(文档流):行级、块级、表格布局、FlexBox、Grid布局

盒模型

盒模型

padding:10px (四个方向都是10px)

padding:10px 20px(上下10px 左右20px)

padding:10px 20px 10px 20px(上右下左)

百分数相对于容器的宽度

margin:auto水平居中

margin collapse 边距取最大(垂直方向)

overflow:

visible:全显示

hidden:隐藏

scroll:滚动

块级盒子:不和其他盒子并列摆放;适用所有的盒模型属性

eg.body、article、div、main、section、h1-6、p、ul、li

行级盒子:和其他行级盒子一起放在一行或拆开成多行;width、height不适用

eg.span、em、strong、cite、code

display

block:块级盒子

inline:行级盒子

inline:本身是行级,可以放在行盒中;可以设置宽高;作为一个整体不会被拆散成多行

none:排版时完全被忽略

常规流Normal Flow

根元素、浮动和绝对定位的元素会脱离常规流

其他元素都在常规流之内(in-flow)

常规流中的盒子,在某种排版上下文中参与布局

行级排版上下文

Inline Formatting Context(IFC)

只包含行级盒子的容器会创建一个IFC

IFC内的排版规则:

1.盒子在一行内水平摆放

2.一行放不下时,换行显示

3.text-align决定一行内盒子的水平对齐

4.vertical-align决定一个盒子在行内的垂直对齐

5.避开浮动(float)元素

块级排版上下文

Block Formatting Context(BFC)

某些容器会创建一个BFC

1.根元素

2.浮动、绝对定位、inline-block

3.Flex子项和Grid子项

4.overflow值不是visible的块盒

5.display:flow-root;

BFC内的排版规则:

1.盒子从上到下摆放

2.垂直margin合并

3.BFC内盒子的margin不会与外面的合并

4.BFC不会和浮动元素重叠

Flex Box

一种新的排版上下文

它可以控制子级盒子的摆放的流向(向右、向左、向上、向下)、摆放顺序、盒子宽度和高度、水平和垂直方向的对齐、是否允许折行

flex-direction(主轴方向) flex-direction

justify-content(水平对齐) justify-content

align-items(垂直对齐) align-items

order(从小到大顺序排放)

Flexibility

可以设置子项的弹性:当容器有剩余空间时,会伸展;容器空间不够时,会收缩

flex-grow:有剩余空间时的伸展能力

flex-shrink:容器空间不足时收缩的能力;默认为1;0时不能压缩

flex-basis:没有伸展或收缩时的基础长度

flex

Grid布局(二维布局)

display:grid使元素生成一个块级的Grid容器

使用grid-template相关属性将容器划分为网格

设置每一个子项占哪些行/列

grid-template-columns(列)

grid-template-rows(行)

1fr(1份)

grid line网格线

grid-row-start:1

grid-column-start:1

grid-row-end:2

grid-column-end:2

grid-area:1/1/2/2

浮动

图文环绕

position属性

static:默认值,非定位元素

relative:相对自身原来位置偏移,不脱离文档流;流内其他元素当它没有偏移一样布局

absolute:相对定位,相对于最近的非static祖先元素定位;不对流内元素布局造成影响

fixed:相对于视口绝对定位