这是我参与「第四届青训营 」笔记创作活动的第2天
CSS
-
基本结构:
Selector { Property1: Value1; Property2: Value2; }
Selector
: 选择器,表示选择你想要添加样式的html元素,如选择器为h1
时表示给一级标题添加样式Property:Value
:属性:值,表示一条样式规则的声明,如font-size: 14px
表示把字体大小设为14个像素
-
在HTML中使用CSS
-
外链:(最推荐的用法)
<link rel="stylesheet" href="xxx.css"
-
嵌入:
<style> /*css code here*/ </style>
-
(不推荐)内联样式:在元素的style属性内使用,例如
<p style="css code here"> content </p>
-
-
CSS工作过程
选择器
简单选择器
-
通配选择器
*
:选择所有元素 -
标签选择器:使用标签名作为选择器的名字,如
p
给所有段落设置样式 -
id选择器
#idName
: 选择ID名字为idName
-
类选择器
.classname
: 选择属于classname
的元素 -
属性选择器
[property]
: 选择带有property
属性的元素[property="value"]
: 选择属性property
为value
的元素[property^="string"]
: 选择属性property
的值以string
开头的元素[property$="string"]
: 选择属性property
的值以string
结尾的元素
-
伪类选择器
:name
:-
状态伪类:根据状态选择
a:link
,a:visited
,a:hover
,a:active
分别代表选择链接在默认、点击后、鼠标悬停时、鼠标点下时的元素
-
结构伪类:根据位置选择
:first-child
: 选择DOM树下该元素的第一个儿子节点
-
-
选择器组
A, B, C,...
:并列多个选择器
选择器组合
A是一个选择器、B是另一个选择器
AB
: 选择既满足A又满足BA B
: 选择满足B,且祖先节点中有节点满足AA > B
: 选择满足B,且父节点满足AA~B
: 选择满足B,且在其前面的兄弟中有节点满足AA+B
: 选择满足B,且其前一个兄弟节点满足A
选择器优先级
-
特异度:id > 伪类 > 标签
- 比较方式:字典序式比较,先比较id,然后是伪类、标签
-
选择器生效原则:
- !important的选择器永远优先
- 特异度不同的选择器,特异度高的生效
- 特异度相同的选择器,位置靠后的生效
常用属性
-
颜色
color
: 其值可以用- rgb:用
#xxxxxx
或者rgb(red,green,blue)
- hsl:用
hsl(色相,饱和度,亮度)
- 需要设置不透明度alpha时:用
rgba(red,green,blue,alpha)
或hsl(色相,饱和度,亮度,alpha)
- rgb:用
-
字体
font-family
: 属性值应当为一个字体族,以兼容更多的设备,例如h1{ font-family: Optima, Georgia, serif; }
- 通用字体族:
serif
衬线体,Sans-Serif
无衬线体,Cursive
手写体,Fantasy
手写体,Monospace
等宽字体,均为一类字体而非某一具体的字体。 - 字体族一定要以通用字体族结尾
- 中文字体一般写在英文字体后面
- 通用字体族:
-
字号大小
font-size
:其值可以使用- 绝对值:
20px
为20个像素 - 相对值:
2em
默认状态下的两倍大小,80%
为默认状态下的80%
大小
- 绝对值:
-
字体效果
font-style
: 值为italic
时为斜体 -
字重
font-weight
: 取值为100-900,100最细,900最粗(normal为400,bold为700) -
行高
line-height
: 设置每行基准线之间的距离- 无单位数字:如
1.6
表示设置行高为字体大小的1.6倍
- 无单位数字:如
-
文字对齐
text-align
:left
左对齐、center
居中对齐、right
右对齐、justify
两端对齐 -
间距
spacing
: 可以分别设置letter-spacing
,word-spacing
-
首行缩进
text-indent
-
文本装饰
text-decoration
:none
无装饰、underline
下划线、line-through
删除线、overline
-
white-space
: 处理文本中的空格和换行normal
: 默认状态,会将连续多个空格合并为1个,保留原有换行,会自动换行nowrap
: 强制不换行,合并空格pre
: 保留原文中所有的空格和换行pre-warp
: 在保留原文的基础上添加自动换行pre-line
: 在保留原文的基础上合并空格,保留换行
继承
-
对默认可继承属性,若该元素未设置该属性的值,会从其父元素继承
- 一般和文字相关的属性可继承(如color, font-size)
- 一般和盒模型相关的属性不可继承(如box-sizing)
-
初始值:若未指定属性值,且祖先节点也均未指定,则会采用初始值
-
继承相关关键字(属性值):
-
inherit
: 强制继承父节点计算值(即若父节点使用相对值时,先计算出父节点的绝对值,然后继承该绝对值)box-sizing: inherit;
-
initial
: 将属性设置为初始值
-
布局模型
盒模型
-
模型:
- 默认的width和height为content-box的属性
- 可通过
box-sizing: border-box
这样的语句切换标准模型
常用属性
-
width/height: 取值可为长度、百分数(相对于整个容器的百分比)、auto(根据内容计算高度)
-
容器有指定高度百分数才会生效
-
padding/border/margin: 四个方向分别称为top/bottom/right/left,可以使用padding-xxx的属性进行设置
- 同时设置四个可简写为
padding: 10px
(四边等宽),padding: 10px 20px
(上下10px,左右20px),padding: 10px 20px 30px 40px
分别代表上右下左
- 同时设置四个可简写为
-
border的属性:
border-width
、border-style
、border-color
-
margin:
- 设置为auto时可自动实现水平居中的效果
- 两个元素间的margin实际值为两者定义的margin中的最大值
-
overflow属性:控制溢出内容
visible
: 仍然显示hidden
: 隐藏scroll
: 可滚动显示
盒子类型
-
块级盒子:不与其它盒子并列排放
-
行级盒子:和其它行级盒子和并列、但不可使用
width
、height
这样的属性 -
默认情况下,块级元素生成块级盒子,行级元素生成行级盒子
- 块级元素:body、article、div、main、section、h、p、ul、li
- 行级元素:span、em、strong、cite、code
-
可以更改display属性以更改盒子类型:
- 更改为块级盒子:
display: block
- 更改为行级盒子:
display: inline
inline-block
: 一个行级盒子、可以设置宽高、作为整体不会被拆散none
: 排版时忽略
- 更改为块级盒子:
行级排版
-
行级排版原则:
- 盒子在一行内水平摆放
- 一行放不下时换行显示
-
text-align/vertical-align
分别控制水平和垂直对齐 -
overflow-wrap
控制换行方法
块级排版
-
块级排版原则:
- 盒子从上到下摆放
- 垂直margin会合并
- 盒内的盒子的margin不会与盒外格子的margin合并
- 不与浮动元素重叠
Flex Box模型
-
概念:
- 主轴(main axis):流动方向(默认为水平)
- 侧轴(cross axis):与主轴垂直的方向
常用属性
-
使用flex模型:
display: flex;
-
控制主轴对齐:
justify-content
属性,不同值的效果如下 -
控制侧轴对齐:
align-items
属性,不同值的效果如下- 可以给容器设置,也可以给单个元素设置
-
设置子项弹性:
-
flex-grow
: 设置有剩余空间时的伸展能力(能力代表伸展的比例,和其它能力是相对值) -
flex-shrink
: 设置空间不足时的收缩能力 -
flex-basis
: 没有伸展或收缩时的基础长度 -
缩写为flex属性
缩写 原名 flex: 1 flex-grow: 1 flex: 100px flex-basis: 100px flex: 2 1 flex-grow: 2; flex-shrink:1 flex: 2 0 100px flex-grow: 2; flex-shrink:0; flex-basis:100px; flex: auto flex: 1 1 auto flex: none flex: 0 0 auto
-
Grid布局
- 以二维的,网格式的布局
常用属性
-
切换为Grid布局
display: grid;
-
划分网格
gird-template-columns: value1 value2 value3... gird-template-rows: value4 value5 value6...
- 有几个value就会被分成几行/列
- value可以为具体数值(如
10px
)、百分数、(number)fr
(表示剩余部分占多少份)
-
网格线:上面和左边第一条线标记为1
-
选择区域:根据上下左右四个网格线选择区域
p{ grid-row-start: 1; grid-column-start: 2; grid-row-end: 3; grid-column-end: 4; } /*short form*/ p{ grid-area: 1/2/3/4; }
浮动布局
- 主要用于图文混排时,文字环绕图片问题(将图片设为float)
绝对定位
-
position属性,其值为
-
position: static
默认模式 -
position: relative
相对于默认模式进行一个偏移- 使用top/left/bottom/right属性进行偏移
- 不改变其它元素位置
-
position: absolute
相对于最近的非static祖先进行定位,且不对其它元素产生影响 -
position: fix
相对于当前可视窗口进行定位(如导航栏固定在最上方)
-
\