前言
css样式作为一块重点,特别容易劝退人,五花八门的样式布局,总能形成不一样的效果。需要慢慢沉淀和积累,才能更好的应用。下面就是简单的总结下基础常用的知识点
引用和设置样式
- 第一种:
link
外部引用 - 第二种:
style
标签 - 第三种:内联样式
style
属性
typescript
// 第一种link
<link rel="stylesheet" type="text/css" href="mystyle.css">
// 第二种style标签
<style type="text/css">
body {background-color: red}
p {margin-left: 20px}
</style>
// 第三种内联样式
<p style="color: red; margin-left: 20px"></p>
选择器
基础选择器
- class的选择 :
.class
- id的选择 :
#id
- 标签的选择 :
标签名
批量选择器
- 并集选择 :
标签名1,标签名2
(使用,分隔) - 所有后代选择 :
标签名1 标签名2
(使用空格分隔) - 只直接后一代选择 :
标签名1>标签名2
(使用>分隔) - 交集选择 :
.class1.class
(没有分隔) - 指定元素之后的每一个 :
element1~element2
(使用~分隔)
伪类
:first-child
: 标记选择第一个子元素:last-child
: 标记选择最后一个子元素:nth-child(x)
: 任意序号的子元素:link
: 未被访问的链接,用于a标签:visited
: 已被访问的链接,用于a标签:hover
: 鼠标悬停:active
: 鼠标按下/键盘选中的元素获得焦点:before
: 在元素之前插入内容:after
:在元素之后插入内容:checked
: 所有被选中的元素:disabled
: 所有被禁用的元素
注意: hover
得在 link
和 visited
的后面 ,active
得在 hover
后面
css
div:hover {
background-color: aqua;
}
基础常规属性
font-size
: 字体尺寸font-weight
:字体粗细 ,normal
正常,bold
加粗font-family
: 使用的字体,大多微软雅黑和宋体text-decoration
: 文本修饰text-align
: 文字对齐形式line-height
: 行高margin
: 外边距padding
: 内边距height
: 高度- min-height : 最小高度
- max-height : 最大高度
width
: 宽度- min-width :最小宽度
- max-width : 最大宽度
color
: 颜色- rgb标识 :
rgb(255,0,0)
- 颜色的英语单词 :
red
,blue
等等 - 十六进制:
#FFFFFF
,常用的黑#000,白#FFF,灰#ccc,#333
- rgb标识 :
background-color
: 背景颜色background-size
: 背景填充形式background-repeat
: 背景内容是否重复background-image
: 背景图片position
: 位置定位display:flex
: flex布局display:grid
: grid布局
注意 :
- 针对大小 :
px
是像素大小单位,比较常用 。em
是相对单位,对于父元素的相对大小倍数,而最后rem
也是相对单位,是相对于html
标签上上的定义大小的倍数而定,vh/vw 视窗高宽百分比 - 针对颜色: rgb标识/颜色的英语单词/十六进制
- 针对方位: top 上,right 右,bottom 下,left 左
- auto : 自适应,浏览器自动计算 ,
常规配置样式
常见的值设定选择
less
font-size : 12px, 14px, 16px
margin,padding : 8px,16px,24px
corlor: #333,#666,#999
居中对齐
- 使用
text-align: center
:实现行内元素在其父块级元素中的水平居中 - 使用
margin: 0 auto
: 实现固定宽度的块级元素中来实现水平居中 - 使用
line-height
等于父元素height,实现行内元素单行文本垂直居中 - 使用绝对定位
position
来实现 垂直水平居中 - 使用
flex
布局实现垂直水平居中
vh和%的设置
- 100% : 设置子元素的高度100%会撑满父元素固定的高度,相当于是设置了在父元素高度的占比
- 100vh:和可见屏幕的高度一致 ,不管子元素还是父元素的高度
剩余部分的占有
- 设置flex布局:
flex:1 /flex:auto
- 设置grid布局:
grid-template-columns: 100px 1fr
- 设置绝对定位:
position:absolute
字体
对字体样式的一些设置属性
字体系列
属性 font-family
列举一个或多个由逗号隔开的字体族。每个字体族由 family-name
或 generic-name
值指定, generic-name
是属于备选机制。
less
// family-name 为 Gill Sans Extrabold
// generic-name 为 sans-serif
font-family: "Gill Sans Extrabold", sans-serif;
字体修饰
通过font-style
指定字体的样式
normal
: 正常标准italic
: 显示一个斜体的字体样式oblique
: 显示一个倾斜的字体样式
注意: 如果字体本身有斜体版本,优先使用italic
;如果没有斜体版本,可以使用oblique
来实现倾斜效果
css
font-style: normal
字体大小
通过font-size
指定字体大小,可以由不同单位标识
arduino
font-size : 14px
font-size : 2.5em
文本
对文本整体的设置相关属性,包括颜色,划线,对其方式,缩进,大小写转换等等信息
文本颜色
使用color
修饰,注意定义了文本颜色,有些需要背景色的配合才能显现
css
color:red;
color:rgb(255,0,0);
color:#FF0000;
文本修饰
用来设置或删除文本的装饰,可以单独定义,也可以一起简写定义
text-decoration-line
: 设置线none
: 删除修饰underline
:下划线overline
:上划线line-through
:中间线
text-decoration-color
: 设置颜色(同设置color
类似)text-decoration-style
:线的样式solid
:实线double
:双实线dotted
:点状线dashed
:虚线wavy
:波浪线
css
text-decoration: none; /*没有文本装饰*/
text-decoration: underline red; /*红色下划线*/
text-decoration: underline wavy red; /*红色波浪形下划线*/
文本对齐
对齐方式:使用 text-align
设置
center
: 居中left
:左对齐right
:右对齐justify
:两端对齐
css
text-align: center;
背景
background
用于设置背景相关属性
背景颜色
设置背景元素的颜色信息,使用background-color
设置方式和color
类似
css
background-color:red;
background-color:#e0ffff;
background-color:rgb(255,0,0);
背景图像
通过设置background-image
来设置背景图像,默认情况下,背景图像进行平铺重复显示,以覆盖整个元素实体
arduino
background-image:url('xx.jpg')
设置背景样式
通过设定background-repeat
来指定背景图像重复情况
repeat
:默认值,背景图片在水平和垂直方向上重复显示repeat-x
:只有水平位置会重复背景图像repeat-y
:只有垂直位置会重复背景图像no-repeat
:background-image
不会重复
通过设定 background-position
来指定背景图像的起始位置
- 指定位置关键词:
top right
,若指定一个关键词,第二个关键词默认center
- 指定百分比/数值:
x% y%
/1px 20px
,分别代表水平位置和垂直位置
通过设定background-attachment
来指定背景是否滚动或者固定
scroll
: 默认值。背景图像会随着页面其余部分的滚动而移动fixed
: 当页面的其余部分滚动时,背景图像不会移动inherit
: 规定应该从父元素继承background-attachment
属性的设置
通过设定 background-size
来调整背景图片的大小
auto
:默认值,背景图片以原始大小显示。cover
:背景图片会等比例缩放,直到覆盖整个元素,可能会有部分图片超出元素范围。contain
:背景图片会等比例缩放,直到图片的宽度或高度完全适应元素,图片会完整显示在元素内。- 具体的长度值或百分比值:例如
background-size: 200px 150px;
或background-size: 50% 80%;
。
盒子模型
内边距padding
和外边距margin
, 还有边框border
padding
盒子边框内壁到内部文本的距离
- 详细定义 :top,right,bottom,left : 上,右,下,左
- 稍简定义: top,right/left,bottom : 上,右/左,下
- 极简定义: top/bottom,right/left : 上/下,右/左
less
padding : 10px,20px,20px,10px
padding : 10px,20px10px
padding : 10px,20px
padding-top : 10px
margin
盒子边框外部到隔壁盒子的距离,使用方式和padding
一致如上,但用的是marign
关键词
注意:
- 上盒子设置了对底部的边距,下盒子对顶部的边距,他们的总的边距不叠加,以大值为准
- 一些标签自(body,p,ul等)带有默认的
margin
,需要手动进行清除
小技巧 : 对于水平居中 可以直接使用 margin: 0 auto
border
border-width
: 设置边框的宽度border-style
: 设置边框的样式solid
: 实线边框dotted
: 点线边框dashed
:虚线边框
border-color
:设置边框的颜色, 对于颜色的值格式,也是rgb,英文单词,16进制等border-radius
: 设置圆角的边框,分(左上 右上 右下 左下)/ (左上 右上左下 右下) /(左上右下 右上左下)box-shadow
: 设置阴影,(x轴阴影,y轴阴影,阴影模糊半径,阴影扩展半径,颜色,阴影位置)
如果进行单一边的设置 : border-{direction}-style
: 方向值的选项有top/bottom/left/right
如果进行单一角的设置 : border-{direction1}-{direction2}-style
: 方向值的选项有top/bottom/left/right
最终简写形式 : border: {border-width} {border-style} {border-color}
;
less
// 整体边框边角设置
border-width: 1px
border-style: solid
border-color: red
// 简写
border:1px solid red
border-radius : 5px
box-shadow : 0px 0px 20px 0px rgb(0,0,0,0.5)
css
// 单边(顶边)边框设置
border-top-style: solid;
border-top-width: 1px;
border-top-color: red;
// 单个左上角设置
border-top-left-radius : 5px;
outline
是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用 , 比boder
还要外一层
注意: 对于很多元素来说,如果没有设置样式,轮廓是不可见的。因为样式(style)的默认值是
none
。但input
元素是例外,其样式默认值由浏览器决定
position 定位
决定元素在文档的定位形式,包含static
(正常定位)、relative
(相对定位)、absolute
(绝对定位)、fixed
(固定定位)、sticky
(粘性定位)
static
默认的正常定位relative
: 盒子相对原来的位置的定位,还在文档流内会占位absolute
: 离自身最近的定位祖先元素(非static )的位置进行偏移定位 ,脱离文档流不占位fixed
: 相对于窗口的固定定位 , 和文档流无关不占位置sticky
: 具备relative和fixed的结合效果- 偏移值不设置:等同于
static
效果 - 有方向设置偏移值: 距离顶部距离大于这个偏移值时使用
relative
,小于等于时候使用fixed
效果
- 偏移值不设置:等同于
注意: 通常 <body>
元素会设置 margin 和 padding为0,这样可以避免在不同的浏览器中出现可见的差异
relative 相对定位
使用三个div有固定宽高的依次挨着,对中间的div使用相对定位,使其对于第一个div相对上面和左边偏移位置。发现红色块还是占有原来的位置
ini
#div2 {
position: relative;
top: 30px;
left: 30px;
}
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
absolute 绝对定位
使用三个div有固定宽高的依次挨着,对中间的div使用绝对定位,使其对于最近的祖先节点(position
不是static
)相对上面和左边偏移位置。发现红色块原来的位置的已经被下面的黑色顶上来了。
ini
#div2 {
position: absolute;
top: 30px;
left: 30px;
}
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
注意: 通常搭配祖先节点(使用relative
)来使用absolute
定位
css
#div2 {
position: absolute;
top: 30px;
left: 30px;
}
<div id="div1"></div>
<div style="margin: 20px;position: fixed;">
<div id="div2"></div>
</div>
<div id="div3"></div>
fixed 固定定位
使用三个div有固定宽高的依次挨着,对中间的div使用固定定位,使其对于窗口相对上面和左边偏移位置。滑动右边的滚动条,红色始终和顶部和左侧保持固定的距离
ini
#div2 {
position: fixed;
top: 30px;
left: 30px;
}
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
sticky 粘性定位
使用三个div有固定宽高的依次挨着,对中间的div使用粘性定位,使其对于祖先节点相对上面和左边偏移位置 (如左图)。然后随着滑动右边的滚动条,距离顶部小于等于偏移的位置,使其对窗口相对上面和左边偏移位置(如右图)
ini
#div2 {
position: sticky;
top: 30px;
left: 30px;
}
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
display 元素框
行内和块级元素
行内元素
: 可以多个标签在一行,对宽高属性设置不生效,完全靠内容撑开宽高块级元素
: 独占一行,对宽高属性设置生效,问设置宽,则默认100%浏览器宽
inline
- 使元素变成行内元素,与其他元素共享一行,不会独占一行
- 不能改变元素的height,width值,大小由内容撑开
- 可以使用padding,margin的left和right产生边距效果,但是top和bottom就不行。
css
#div2 {
display: inline;
margin-top: 20px; /*无效*/
width: 100px; /* 无效 */
height: 100px; /* 无效 */
background-color: red;
}
<div id="div1"></div>
<div id="div2">inline的div</div><div id="div2">inline的div</div>
<div id="div3"></div>
上述实现通过将div转换为行内元素,此时就不独占一行,此时设置width,height,和margin-top/bottom都无效
注意: 行内元素间可能存在间距,可以将其代码写在一下 ,剔除中间的空格和换行等符号
css
<span>111</span><span>222</span>
block
- 使元素变成块级元素,独占一行,在不设置自己的宽度的情况下,块级元素会默认填满父级元素的宽度.
- 能够改变元素的height,width的值.
- 可以设置padding,margin的各个属性值,top,left,bottom,right都能够产生边距效果.
css
#div2 {
display: inline;
height: 100px;
background-color: red;
}
<div id="div1"></div>
<span id="span1">block的span</span>
<div id="div3"></div>
上述实现将span标签转换为块状元素,独占一行,对于margin和padding对生效
inline-block
- 结合了inline与block的一些特点,结合了上述inline的第1个特点和block的第2,3个特点
- 【与其他元素共享一行,不会独占一行 】,【能够改变元素的height,width的值 】,【可以设置padding,margin的各个属性值,top,left,bottom,right都能够产生边距效果.】
- 不独占一行的块状元素
使用flex布局
针对具体详细内容参照阮一峰的文章: ruanyifeng.com/blog/2015/0...
在布局方面上的使用的比较频繁多的方式 。 设置display:flex
则声明该标签为flex容器,然后该标签下的直系标签都为flex元素,可以进行一些对齐方式的调整.
设置布局 : 针对块状元素容器 flex
, 行内元素容器 inline-flex
容器内子元素排列的方向 : 可以通过设置主轴方向,自然而然交叉轴就是与主轴垂直的方向 , 通过 flex-direction:row/column
设定,row是默认的水平从左到右方向。
-
justify-content
主轴对齐方式flex-start
(默认值):左对齐flex-end
:右对齐center
: 居中space-between
:两端对齐,项目之间的间隔都相等。space-around
:每个项目两侧的间隔相等。项目之间的间隔比项目与边框的间隔大一倍。
-
align-items
: 交叉轴(和主轴相垂直的轴)对齐方式flex-start
:交叉轴的起点对齐。flex-end
:交叉轴的终点对齐。center
:交叉轴的中点对齐。baseline
: 项目的第一行文字的基线对齐。stretch
(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
-
flex-wrap
: 在轴线上排列不下后的换行的设置nowrap
: 默认,不换行wrap
: 换行,第一行数据在上面wrap-reverse
: 换行,第一行数据在下面
-
flex
: 项目放大比例 , 缩小比例 , 主轴方向大小的便捷设置auto
(1 1 auto): 【按内容先】当希望元素充分利用剩余空间,但是各自的尺寸按照各自内容进行分配的时候1
(1 1 0%): 【按比例】所有的等分列表,或者等比例列表都适合使用none
(0 0 auto): 按照子元素自己大小来,不受剩余空间和伸缩比例影响
css
<div style="display: flex; justify-content: space-evenly">
<div style="background-color: red; width: 100px; height: 100px"></div>
<div style="background-color: red; width: 100px; height: 100px"></div>
<div style="background-color: red; width: 100px; height: 100px"></div>
</div>
flex布局中通过grid中的gap属性设置间距 ,flex-wrap设置wrap来换行
css
<div style="display: flex; gap: 10px;flex-wrap: wrap;">
<div style="background-color: red; width: 400px; height: 400px"></div>
<div style="background-color: rgb(44, 31, 31); width: 400px; height: 400px"></div>
<div style="background-color: rgb(255, 0, 34); width: 400px; height: 400px"></div>
<div style="background-color: rgba(51, 148, 111, 0.466); width: 400px; height: 400px"></div>
<div style="background-color: rgb(55, 0, 255); width: 400px; height: 400px"></div>
</div>
通过设置flex为1,来实现剩余的部分内容的占据
css
<div style="display: flex">
<div
style="width: 800px; height: 100px; background-color: aquamarine"
></div>
<div style="flex: 1; height: 100px; background-color: blueviolet"></div>
</div>
使用grid网格布局
针对具体详细内容参照阮一峰的文章: ruanyifeng.com/blog/2019/0...
Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局
设置布局 : 针对块状元素容器 grid
, 行内元素容器 inline-grid
ini
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr">
<div style="background-color: red;">sdf</div>
<div style="background-color: black">sdf</div>
<div style="background-color: red">sdf</div>
<div style="background-color: black">sdf</div>
</div>
1. grid-template-columns 属性 (定义每一列的列宽)
- 直接指定数值占比 : 10px
- 指定百分比占比: 33%
auto
:浏览器自己决定长度minmax()
: 长度范围内 ,最小值和最大值之间- 重复指定
repeat
函数 :- 重复的数值一样: (重复个数3, 数值10px/百分比33.33% )
- 重复的数值不一样: (重复个数3, 数值20px, 数值10px ) ,第一列和第3列和第5列 20px,第2,4,6列10px
auto-fill
:(auto-fill, 100px)
容纳尽可能多的单元格
fr
: 标识比例占比关系- 纯比例展示:
1fr 1fr
标识1:1展示 - 数值+比例展示 :
150px 1fr 2fr
, 标识前面数值,剩余的分三份 ,1:2展示
- 纯比例展示:
scss
100px 100px 100px; // 指定3个列宽 100px
33.33% 33.33% 33.33%; // 指定3个列宽 占比 33.33%
repeat(3, 33.33%) // 指定重复三个数字都是 33.33%
repeat(2, 100px 20px 80px); // 定义了6列,
第一列和第四列的宽度为100px,第二列和第五列为20px,第三列和第六列为80px
repeat(auto-fill, 100px); // 表示每列宽度100px, 然后自动填充,直到容器不能放置更多的列
1fr 1fr; // 两个相同宽度的列
1fr 1fr minmax(100px, 1fr); // 表示列宽不小于100px,不大于1fr
100px auto 100px; //第二列的宽度,基本上等于该列单元格的最大宽度
70% 30%; // 左边栏设为70%,右边栏设为30%
repeat(12, 1fr); // 设置12个列,都是1:1
2. grid-template-rows 属性 (定义每一行的行高)
属性值参照 grid-template-columns
类似, 注意要设置容器的总行高
3. row-gap/column-gap 属性(行与行,列与列距离)
less
row-gap: 20px; // 行间距 20px
column-gap: 20px; // 列间距 20px
gap : 20px 20px // 行间距 20px , 列间距 20px
css
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr; column-gap:20px;row-gap:20px">
<div style="background-color: red;">sdf</div>
<div style="background-color: black">sdf</div>
<div style="background-color: red">sdf</div>
<div style="background-color: black">sdf</div>
</div>
4. 单元格对齐方式
对每一个单元格进行对齐的方式的指定
justify-items
: 水平对齐位置(start | end | center | stretch)align-items
: 垂直对齐位置(start | end | center | stretch)
css
<div style="display: grid; grid-template-columns: 1fr 1fr 1fr; column-gap:20px;row-gap:20px;justify-items:end">
<div style="background-color: red;">sdf</div>
<div style="background-color: black">sdf</div>
<div style="background-color: red">sdf</div>
<div style="background-color: black">sdf</div>
</div>
5. 指定子元素排列顺序
通过横向顺序排列,也可以竖向顺序排列
grid-auto-flow
:row
先行后列column
先列后行row dense
先行后列,尽可能紧凑填满column dense
先列后行,尽可能紧凑填满
6. 指定上下左右边框位置
通过子元素上指定,占用的位置。 注意指定3列,就有4根线
grid-column-start
:左边框所在的垂直网格线grid-column-end
:右边框所在的垂直网格线grid-row-start
:上边框所在的水平网格线grid-row-end
:下边框所在的水平网格线
简写形式 : grid-column
和 grid-row
指定
css
grid-column: 1 / 3 代表第一个线和第三个线
overflow 溢出
指定一个块元素在其内容溢出这个元素时候 ,内容是否裁掉
具体使用 : 限定宽高,再设置超出部分的打算用途设置overflow
属性
visible
(初始值)表明内容不会被裁剪,所以说他可能超出渲染,hidden
超出的部分需要裁剪掉scroll
超出内容不会裁剪掉,浏览器提供滚动机制来让用户看到超出内容auto
如果超出的话,应该有滚动条
css
<div style="overflow:scroll; width: 100px">
sfdsdffffffffffffffffffff
</div>
如果是只针对x轴或者y轴,可以指定overflow-x
/overflow-y
渐变 gradients
使用在两个或多个指定的颜色之间显示平稳的过渡,存在两种渐变
- 线性渐变(
Linear Gradients
)- 向下/向上/向左/向右/对角方向- 从上到下:
linear-gradient(#e66465, #9198e5)
- 从左到右 :
linear-gradient(to right, #e66465, #9198e5)
- 对角 :
linear-gradient(to bottom right, #e66465, #9198e5)
- 使用角度:
linear-gradient(-90deg, #e66465, #9198e5)
- 从上到下:
- 径向渐变(
Radial Gradients
)- 由它们的中心定义- 均匀分布:
radial-gradient(red, yellow, green)
- 不均匀分布:
radial-gradient(red 5%, yellow 15%, green 60%)
- 指定形状:
radial-gradient(circle, red, yellow, green)
- 均匀分布:
css
background-image: linear-gradient(to right, #e66465, #9198e5);
background-image: radial-gradient(circle,red, yellow, green);
过渡 transition
CSS3中用于定义元素从一种样式状态平滑过渡到另一种样式状态的动画效果
具体属性:
property
:指定变化的css属性名称,单个/多个duration
: 过渡动画的持续时间,以秒(s)或毫秒(ms)为单位timing-function
:决定了过渡过程中速度的变化模式ease
(默认):开始和结束时慢,中间快。linear
:匀速过渡。ease-in
:开始时慢,然后逐渐加快。ease-out
:开始时快,然后逐渐减慢。ease-in-out
:开始和结束时慢,中间快。cubic-bezier(n,n,n,n)
:自定义贝塞尔曲线
delay
:设置过渡动画开始前的等待时间,同样以秒(s)或毫秒(ms)为单位
less
transition: background-color 0.3s
transition: background-color 0.3s 0.1s
transition: background-color 0.3s ease
transition: background-color 0.3s ease 0.1s
// 各个属性单独定义
transition-property: background-color;
transition-duration: 0.3s;
transition-timing-function: ease;
transition-delay: 0.1s;
html标签的修改css案例
定义button样式
- 定义背景颜色 :
background-color : #4CAF50
- 边框:
2.1. 去除边框:border: none
2.2. 指定圆角:border-radius: 4px
- 定义外边距和内边距:
padding:15px 32px;margin:4px 2px;
- 定义文字
3.1. 文字颜色:color: white
3.2. 文字大小:font-size : 16px
3.3. 去除文字装饰 :text-decoration: none
3.4. 文字居中:text-align: center
- 设定鼠标指针样式:
cursor: pointer
- 指定行内块元素:
display: inline-block
- 定义悬停效果:
buttton:hover{background-color: #45a049}
- 定义过渡效果:
transition-duration: 0.3s
定义input输入框样式
- 定义宽度 :
width: 250px
- 定义边框: 2.1.
border: 2px solid #ccc
2.2.border-radius: 4px
- 定义外边距和内边距 :
padding: 12px 20px;margin: 8px 0;
- 定义文字 :
font-size: 16px;
- 定义聚焦效果:
input:focus{border-color:#4CAF50;outline: none;}
- 定义过度效果:
transition: border-color 0.3s ease;
总结
对于css的使用,可能比较重要的就是布局,盒子模型等,后期主要是依靠UI框架已经实现了大部分的样式。