CSS

简介

CSS (cascading style sheet)层叠样式表

CSS书写方式

  1. 内嵌式:在head标签中书写style标签。
  2. 外链式:用link标签引入.ccs文件
<link rel="stylesheet" type="text/css" href=""/>
  1. 行内式:直接写在标签的style属性上。
  2. 导入式:在style标签内写@import url()。
<style> 
    @import url(".css"); 
</style>

CSS基本语法

选择器{ 
    键:值; 
}

CSS注释

/*注释内容*/

CSS常用单位

符号 意义
px 和 % px 代表 pixel 像素,百分号是窗口的百分之几
em font size of the element ,相对于元素的字体大小,如果元素没有px,则会继承父元素px
rem font size of the root element,相对于根元素的字体大小
vw viewport width,1vw 等于视口*宽度的1%
vh viewport height,1vh 等于视口*高度的1%

CSS选择器 CSS Selector

标签选择器(Tag selector)

直接写标签名即可

div{ 
    width:100px;
    height:100px; 
}

类选择器(Class selector)

用点(句号,full stop)来进行选择,点类名

.class{ 
    background-color:red; 
}

同一类名键值冲突,将使用css书写上后写的

id选择器(ID selector)

用井号 # 来进行选择,井号id

#id{ 
    font-size:14px; 
}

复合选择器

选择器名称: 用法
后代选择器: 用空格表示后代
交集选择器: 哦那个长用在标签的某一类,例如div.1
并集选择器: 用逗号隔开,一起选中

伪类选择器

选择处于特殊状态下的元素,例如超链接a的4个特殊状态

a:link 没有被访问过的超链接
a:visited 已被访问过的a
a:hover 鼠标悬停下的a
a:active 正在激活的a

遵从“绿哈”(LVHA)顺序写,否则会有伪类不生效。
link→visited→hover→active

以下为css3选择器,ie可能不兼容

元素关系选择器

子选择器 >大于号 两元素必须是父子关系,选中父元素的直接子元素
相邻兄弟选择器 + 加号 A和B都是同一个父亲,A+B选中B
通配兄弟选择器 ~ 波浪号 A和B同级,A~B选中A后所有的同级B

序号选择器

:first-child 
:last-child 
:nth-child(n)/(an+b)/2n+1 odd/2n even
:nth-last-child(n)
:nth-of-type(n)
:nth-last-of-type(n)

除了type都不可跨越种类

属性选择器

标签[属性] 选择带有方括号里属性的标签
标签[属性="值"] 选择属性与值相同的带有此属性标签
标签[属性^="值"] 尖括号,以值开头的带有此属性标签
标签[属性$="值"] 美元号,以值结尾的带有此属性标签
标签[属性*="值"] 星号,选择含有该值属性的标签
标签[属性~="值"] 波浪号,以值空格分开
标签[属性丨="值"] 竖号,以值开头的

CSS3新增伪类

:empty 选择空标签
:focus 选择当前获得焦点的表单元素
:enabled 选择当前有效的表单元素
:disabled 选择当前无效的表单元素
:checked 选择当前已经勾选的单选按钮或多选按钮
:root 选择根元素,即<html>标签

伪元素

用双冒号书写

::before 匹配选中的元素的第一个子元素,必须设置content属性
::after 匹配选中的最后一个子元素,必须设置content属性
::selection 文档中被用户选中高亮的部分
::first-letter 块级元素第一行的第一个字母/文字
::first-line 块级元素第一行文字

层叠性和选择器权重计算

层叠性: 多个选择器可以同时作用于同一个标签,效果叠加活覆盖。
层叠性冲突处理: id权重>class权重>标签权重
复杂选择器权重计算:id个数,class个数,标签个数(x,y,z)
!important提升权重

CSS元素分级:

行元素(display带inline的元素)和块元素(display为block的元素)

行元素:

不独占一行(能并排显示),设置宽高无效(能写值但不表现),width和height写多少,浏览器盒子模型就有多少,但没任何效果
常见inline元素:span、a、strong。

块元素:

独占一行(不能并排显示),能设置宽高等所有盒模型属性,如果不设置width默认100%。
常见block元素:div、p、ul ol li、h1-h6

行内块元素:

能并排显示,能设置宽高。如果不设置,宽和高都由子元素撑起。

如果不在标签内写文本,直接写在body上,会被识别成一段叫#text里写的字符串。同样是行内元素。

盒模型

盒模型4大元素:由内到外依次为 content 、pading 、border 、margin。
content:内容区 。
padding:内边距,content与border之间的距离。
border:边框。
margin:盒子与盒子之间的距离。
[图片上传失败...(image-7397d6-1649463813126)]
W3C标准盒模型如上图所示,同时也是浏览器显示的盒模型。
⚠但是注意,盒子(box)与盒模型(box model)不是一个东西。

content

内容区,可以定义width和height,一般情况下写width和height指的就是content的宽高。

padding

是盒子的内边距,padding是四个方向的,只能设置数值。
可以分别用小属性进行设置:padding-top、padding-right、padding-bottom、padding-left 。
四数值写法:用四个数值以空格隔开进行设置,分别代表上右下左(从上开始顺时针四个方向)。
三数值写法:上 右 下 (左=右)
二数值写法:上 右 (下=上、左=右)
一数值写法:上 (右=上、下=上、左=右)
padding部分会强制继承content部分的background,如果不想继承只能采用 backgroud-clip:content-box; 取消。

border

border是盒子边框,可以设置线宽,线形、线色,也是四个方向的。
border-width:线宽,可以设置数值;
border-style:线形,常见四种:solid 实线、dashed 虚 、dotted 点、double 双;
border-color:线色。
也有四个方向小属性:border-top 、border-right 、 border-bottom 、border-right ;也可以用多数值写法,值法规则与padding一样。
同时四个方向小属性每个小属性还能分出四个方向的线宽,线形,线色,
例如 border-top-width 、border-top-style 、 border-top-color。
无边框:border值设为none。
如何利用边框制作三角形:把颜色值设为 transparent 透明色。先设置四边框透明色,content不设内容(宽高设为0),然后单独设置一边边框颜色即可。

border-radius

border-radius属性,圆角边框,只能设置数值。单位通常为像素,值代表圆的半径;单位也可以取百分值,只有百分值才能设置长方盒子为椭圆。当圆角直径等于方盒子边长一半,方盒子就会变为圆。
也有四个方向小属性(从上开始顺时针四个方向):上左,上右,下右,下左:
border-top-left-radius 、 border-top-right-radius 、 border-bottom-right-radius 、 border-bottom-left-radius
四值写法:顺时针由上到下。
三值写法:顺时针由上到下,左上和右上和右下(左下=右上)
二值写法:对角线由上到下,左上和右上(右下=左上、左下=右上)

border-image

属性 描述
border-image-source 用在边框的图片的路径
border-image-slice 图片边框向内偏移。(裁剪的尺寸,一定不家单位,上右下左顺序)
border-image-width 图片边框的宽度(需要加单位)
border-image-repeat 图像边框是否平铺repeat、铺满round或拉伸stretch

margin

margin是盒子外边距,即盒子与盒子之间的距离。margin也有四个方向。
margin重叠(塌陷、大吞小):竖直方向的magin会发生重叠现象,小的会塌陷到大的margin中。父子元素也有margin塌陷问题。
块元素水平居中:将左右margin值设为auto即可,例如: margin: 0 auto;
垂直居中需要使用绝对定位技术。盒子居中是相对于父盒子居中,文字居中是相对于父标签居中,概念不一样。

box-sizing属性

默认值content-box,size属性是用来设置宽高的,当设置:box-sizing:border-box; 后,width和heigh表示整个盒子大小,即根据border来计算width和height。

box-shadow属性

写法: box-shadow: X偏移量 Y偏移量;例如:box-shadow: 1px 3px ;
可选值:模糊度、阴影大小、颜色、内阴影inset。例如:
box-shadow:1px 1px 10px 3px black inset;
表示x轴偏移量1像素,y轴偏移量1像素,阴影大小为10,黑色的内阴影。
可添加多个阴影,用逗号隔开。
内阴影可以做内发光。

block属性和inline属性的盒子:

margin设定对inline元素的左右生效,对上下无效。padding对左右生效,对上下仅样式生效,距离无效。

display属性:

常用值

display:block; 转为块级元素
display:inline-block; 转为行内块元素
display:inline 转为行内元素
display:none 将元素转为不可见,在文档流中不占位置
display:float-root 元素开启bfc

将元素隐藏还有另一种方法,使用 visibility:hidden; 也可将元素隐藏,但元素不脱离文档流,不放弃自己的位置。

浮动与定位与BFC

开启浮动和绝对定位、固定定位都会使元素脱离文档流,只要脱离文档流的元素,就不分inline和block,脱离文档流的内容一律能设置宽高。脱离文档流后根据z-index属性堆叠排序。
z-index属性:值是一个没有单位的正整数,数字大的可以压盖数值小的。
文档流:html排版流程(flow)

浮动 float

浮动最初的功能:实现文字环绕图片。最本质的功能:实现盒子并排。
浮动使用要点:要浮动,并排的所有元素都要设置浮动,父盒子要有足够宽度,否则盒子会掉下去。
浮动的顺序贴靠特性:子盒子会按照元素书写顺序进行贴靠,如果没有足够空间,则会寻找再前一个兄弟元素,有空间就可以钻空子。
如何开启浮动,元素添加:
float:left; 开启左浮动,元素序号从左边开始数。
float:right; 开启右浮动,元素序号从右边开始数。
使用浮动实现网页布局注意事项:

  1. 需要垂直排列的盒子,不要设置浮动,只有需要并排显示的盒子才要设置浮动。
  2. 一个浮动盒子的内部盒子还可以继续浮动。
  3. 要实现复杂浮动就不要节约盒子。

定位position

position定位,常见值:relative,absolute,fixed,sticky,static(默认)

static 默认值

默认值,静态的,定位跟随文档流排列的。可以认为是不开启定位。

relative 相对定位

position:relative;
开启后盒子相对自己原来的位置进行定位,开启后根据位置属性(left,right,top,bottom)偏移量进行位置调整,不脱离文档流,会在老家留坑。

absolute 绝对定位

position:absolute;
开启后,盒子会根据离自己最近的一个 开启定位的祖先元素 进行定位,开启后根据位置属性(left,right,top,bottom)偏移量调整位置,会脱离文档流,释放位置。
利用绝对定位实现盒子垂直居中:

div{ 
    position:absolute; 
    top:50%; 
    left:50%; 
    margin-top: -自己高度的一半; 
    margin-left: -自己宽度的一半;
}

绝对定位用途:用来制作“压盖”、“遮罩”效果;用来结合css sprites实现精灵图使用;用来结合js实现动画(例如轮播图)

fixed 固定定位

position:fixed;
开启后,盒子会根据视口进行定位,不管页面如何滚动,它永远固定在那里(只有设定值才生效)。脱离文档流。

sticky 粘滞定位

position:sticky;
开启后,设定top,left等值,当盒子到达视口viewport那个位置后会随着视口移动。

清除浮动 clear

元素浮动后会脱离文档流,如果不清除浮动将会对布局产生影响。
clear属性:规定元素的哪一侧不受其他浮动元素影响,只有块元素能使用。
clear:both/left/right; 分别代表左右两边都不受,左边不受影响、右边不受影响。

清除浮动方法:

  1. 给后面的父盒子设置 clear:both;
  2. 在两个盒子之间添加一个带 clear:both; 的盒子
  3. 使用::after伪元素给盒子添加最后一个子元素,并添加 clear:both;
  4. 在浮动元素外套一个父盒子,并且父盒子形成BFC。

BFC

box formatting context ,块级格式化上下文。
开启后此盒子会变成页面上一个独立容器,容器里面的子元素不会影响外面的元素。里面的子元素也不会影响父元素及父元素以外的元素。
比如里面的子元素不能跑出父元素外面。比如解决margin塌陷(仅限父子塌陷)。比如父盒子不会受到子元素浮动造成的父盒子高度塌陷。比如开启BFC可以阻止被其他浮动元素覆盖。

如何开启(形成、创建)BFC

  1. 脱离文档流:开启浮动,float值不是none。或者开启position:absolute。
  2. display值设为inline-block、flex或者inline-flex或flow-root。
  3. 元素设置 overflow:hidden; (overflow:hidden 表示溢出盒子边框部分隐藏,padding溢出部分还在)
  4. 添加clearfix:
.clearfix::before,.clearfix::after{
    content:''; 
    display:table; 
    clear:both; 
}

可同时解决高度塌陷和父子外边距重叠。

圣杯布局

结构需要是:先center

<div class="contain">
    <div class="center">center</div>
    <div class="left">left</div>
    <div class="right">right</div>
</div>

要点:给contain的三个元素开启float,然后footer开启clear。
contain开左右padding。
然后给center width100% ,开padding使得左右空出一段距离。
然后给left开启 margin-left:-100%; 利用的是“盒子width、height、margin、padding的百分数是按父盒子的content width百分比来算的”
然后在给left做position:relative,right:自身宽度使得往左移就完成了left的设置。
再给right做margin-right为负自己的长度,这个时候right就相当于放弃了自己的长度,且会往上移。

flex布局 display:flex

  • 在flex诞生之前,一开始用的是table布局,后被淘汰,后使用 float 和 position 的搭配实现布局,但这两个属性并不是为布局而生的。flex是第一个真正意义上为布局而诞生的一套属性。
  • flexible box , 意为“灵活的、弹性的盒子”,所以flex布局一般也叫做“弹性布局”。
  • 通过 display:flex;display: inline-flex; 开启弹性布局。
display: flex;
//或
display: inline-flex;
  • flex 是设置盒子为块元素弹性盒(独占一行), inline-flex 是设置盒子为行内块元素弹性盒(宽高由内容撑开)
  • 开启 flex 后所有 直接子元素(flex项)强制变为行内块元素,所有属性自动带上 inline ,就算是 flex 也是。

flex 构成内容

  • flex 由 flex容器(flex container) 和 flex项(flex item)构成。

flex容器:开启了弹性布局的元素。
flex项:flex容器内所有直接子元素自动成为 flex 项。

  • 默认横向是主轴main axis,竖向是交叉轴cross axis(副轴)。
  • flex 项默认会自动按主轴方向排列。

flex 容器属性

flex-direction 属性

  • flex-direction 属性设定主轴的方向(即flex项的排列方向)
属性值 意义
row 默认值,主轴为横向,方向从左往右
row-reverse 主轴为横向,方向从右往左
column 主轴为竖向,方向从上往下
column-reverse 主轴为竖向,方向从下往上

flex-wrap 属性

  • flex-wrap属性定义如果主轴线排不下所有内容如何换行。
属性值 意义
nowrap 默认值,不换行,如果flex项总长度比flex容器大,flex项的主轴方向长度不生效,强制收缩
wrap 换行,如果flex项总长度比flex容器大,flex项主轴长度属性不受任何影响
wrap-reverse 换行,第一行在最下方,flex项排列方向同主轴向

flex-flow 属性

  • flex-direction 和 flex-wrap 的组合简写属性,默认值 row nowrap

align-items 属性

  • 多行或列flex项在副轴上,align-content默认值是stretch,每一个flex项都是在 等分线 上开始的。
  • align-items 属性定义多行或列flex项,有等分线存在的情况下,如何进行副轴上的排列
属性值 意义
stretch 默认值,意为有弹性的,如果flex项未设置在副轴上的长度,则自动拉伸占满整个容器的副轴长度
flex-start 按副轴等分线开始端对齐
flex-end 按副轴等分线结束端对齐
center 副轴上等分线与等分线之间居中对齐

justify-content 属性

  • justify-content 属性定义 flex项在主轴上的对齐排列方式
属性值 意义
flex-start 默认值,按主轴开始端对齐
flex-end 按主轴结束端对齐
center 主轴上居中对齐
space-between 两端对齐,flex项之间的space都相等,start和end 与项之间无space
space-around 每个项与正轴平分线两侧的间隔相等
space-evenly 所有space平均分,start与项,项与项,项与end之间的space都相等

align-content 属性

  • align-content 属性定义 flex项在副轴上的对齐方式,默认值是stretch,更改此属性值后将无视副轴等分线,所以只有一行时无法使用此属性的center。
属性值 意义
stretch 如果flex项未设置在副轴方向上的长度,则自动拉伸占满容器的副轴长度
flex-start 按副轴开始端对齐
flex-end 按副轴结束端对齐
center 副轴上多行项无视副轴等分线然后一起居中对齐
space-between 两端对齐,flex项之间的space都相等,start和end 与项之间无space
space-around 每个项两侧的间隔相等
space-evenly 所有space平均分,start与项,项与项,项与end之间的space都相等

flex项 的属性

  • 改变了默认值即为开启某项属性

flex-grow 属性

  • 默认值为0,可设定为其他正整数。
  • 开启此属性的 flex项 会按设定的数值比例占据 space 。只开启部分,没开启的则不占space。
  • 例如:如果所有 flex项的 flex-grow 都为1,着他们将会等分剩余space。如果只开启一个项的 flex-grow,则这个项不论设为多少都独占所有space。
  • 开启此属性后将无视flex项在正轴方向上的长度以及 flex-basis

flex-shrink 属性

  • 默认值为1,可设定为其他正整数。
  • 开启此属性的 flex项 会按设定的数值比例占据超出的 space;默认值为1即如果flex容器空间不足,所有同级flex项默认一起等比缩小。
  • 如果设置为0,则不缩小,负值无效。通常就是用来设为0。

flex-basis 属性

  • 默认值为auto,可设定为其他长度,例如像素长度或百分长度。
  • 开启此属性的 flex项 即定义在分配 space 之前,flex项占据的主轴方向上的长度。
  • 当一个元素同时设置了 flex-basis 和主轴方向上的宽或高,flex-basis 优先级更高。

flex 属性

是 flex-grow,flex-shrink,flex-basis的复合简写,默认值 0 1 auto

order 属性

定义flex项在flex容器中排列的序号,默认值为0,数值越小,排列越靠前。

align-self 属性

允许开启了此属性的 flex项与其他项有不一样的对齐方式,会覆盖align-item属性。
默认值为auto,表示继承父元素的align-items属性值,如果没有父元素,则等同于stretch。

grid 布局

  • grid意为网格、方格的意思,所以grid布局一般称为“网格布局”
  • 通过 display: grid;display: inline-grid; 可以开启网格布局。
  • 成为了grid容器的盒子,column、float、clear、vertical-align 属性无效,且容器内的直接子元素强制成为 grid 项。

grid构成内容

  • grid容器(grid container)、grid项(grid item)、grid line 网格线,grid track 网格轨道、grid cell 网格单元、grid area 网格区域。

新的单位

fr单位:fraction的缩写,意为“片段”,剩余空间的分配数。
gr单位:网格数(没有被w3c采纳)

grid容器属性

grid-template-rows 和 grid-template-columns

  • grid-template-rows 是设定每个rows轨道的大小以及网格线名字。
  • grid-template-columns 是设定每个columns轨道的大小以及网格线名字。
grid-template-rows: [first] 100px [line2] 200px [line3];
grid-template-columns: repeat(5,1fr);

属性值是:

  1. 轨道大小track-size:可以使用css长度,百分比,fr单位数值,auto,repeat() 函数等。
  2. 网格线名字line-name:网格线名字可以用中括号里写名字为网格项命名,一条线可以写多个名字,用空格隔开,如果没命名,系统会默认加上数字以及 区域-star,区域-end 的命名。
  • 如果grid-template-columns只有一个值,那就只有一列,这列的宽度就是这个值,这列就只有一个grid项,其余grid项会根据grid-auto-flow的默认值强制多行排布。
  • 如果grid-template-rows只有一个值,那就只设置第一行的轨道大小,其余都是auto。

grid-template-areas 属性

  • 设定网格区域命名,如果不为区域命名,可以用none。
  • 每一行的区域命名,用算双引号引起来。每一行的区域数都要一样,否则该属性不生效。
  • 可以用点 . 代表未命名的区域。
  • 每个区域必须是矩形,不可十字形,Z字型等。

grid-template 属性

template 是 模板、样板 的意思。
grid-template 是 grid-template-rows 和 grid-template-columns 和grid-template-areas 的复合简写属性。
不推荐使用,可读性差,难维护。

grid-gap(后已改为gap)

gap: 10px 20px;
  • 该属性是 grid-row-gap 和 grid-column-gap 的复合简写属性。
  • 第一个值是 grid-row-gap 第二个值是 grid-column-gap。
  • 如果只写一个值,这这个值同时代表 grid-row-gap 和 grid-column-gap。

grid-row-gap 和 grid-column-gap

grid-row-gap: 10px ;
  • gap 是空隙的意思,这两个属性可以设定网格与网格之间间隙的大小。
  • 属性值为长度,例如10px。
  • 只能设定一个值,该grid容器内这个方向所有的gap都是这个值。

grid-auto-flow 属性

设定如果grid项超出设定的column或row的轨道数,这些超出的grid项如何排布填充放置。
默认值为 row,还有 column、dense(不推荐使用)

grid-auto-rows 和 grid-auto-columns

设置 rows 和 columns 的隐式网格轨道大小。

grid 属性

是 grid-template 和 grid-auto-flow 和 grid-auto-rows 和 grid-auto-columns 的复合简写属性。

align-items 属性

设定 grid 项与每个grid区域的垂直方向对齐方式。
属性值:

  1. stretch:默认值,内容宽度占满整个网格区域空间。
  2. start:上端对齐。
  3. center:居中对齐。
  4. end:下端对齐。

justify-items 属性

设定 grid项与每个 grid区域的水平方向对齐方式。
属性值:

  1. stretch:默认值,内容宽度占满整个网格区域空间。
  2. start:左端对齐。
  3. center:居中对齐。
  4. end:右端对齐。

place-items 属性

align-items 与 justify-items 的复合简写属性,可以分别写两个只。
如果只写一个值则水平方向和垂直方向都一样。
例如 place-items:center; 即可实现垂直水平都居中。

align-content 和 justify-content

grid 也可以使用 align-content 和 justify-content 。items是内容与容器的对齐方式,content 是容器与父容器的对齐方式。

place-content 属性

place-content 属性是 align-content 和 justify-content 的复合简写属性。
align-content 默认值是 stretch,justify-content是 start。

其他知识:grid可用的css函数

  1. repeat(); 函数值1为重复的次数,函数值2为要重复的内容,例如 grid-template-row:repeat(7,1fr)
    函数值1可以为整数,也可以是 auto-fill,auto-fit。auto-fill,auto-fit需配合minmax() 使用。
    设定项与容器的大小可以自动计算 auto-fill 与 auto-fit 的值,两个差别是前者以项为准,后者以容器为准。
  2. fit-content(); 将给定大小夹紧为可用大小。
  3. minmax(); 定义了一个长度范围的闭区间,用法 minmax(最小值,最大值)。最小值最大值可以是长度,百分数,fr单位数,或者max-content、min-content、auto。

grid 项属性

grid-row 和 grid-column

  • grid-row 是 grid-row-start 和 grid-row-end 的复合简写。
  • grid-column 是 grid-column-start 和 grid-column-end 的复合简写。
  • 属性值 start/end 用斜杠隔开。
grid-row: first / span 7 ;
grid-column: 1 / 5 ; //不推荐用数字,因为less等预处理会进行运算

grid-row-start 和 grid-row-end、grid-column-start 和 grid-column-end

  • grid-row-start 和 grid-row-end 使用上下网格线划定开始位置和结束位置以确定grid项在grid容器内的位置。

  • grid-column-start 和 grid-column-end 使用左右网格线划定开始位置和结束位置以确定grid项在grid容器内的位置。

  • 属性值可以是:

    1. 网格线自有的数字编号。
    2. 网格线的名字。
    3. span+数字,意为跨越多少格,通常用start定义开始位置,然后end用span+数字定义跨越多少格。例如 grid-row-start:1; grid-row-end:span 3;
    4. span+线名,意为跨越到名字相匹配的线上。
    5. auto
  • 如果 start 和 end 超出设定的 grid-template-rows/colums ,则会创建隐式网格轨道。

  • 网格项是可以重叠的,可以通过 z-index 控制堆叠顺序。

grid-area 属性

  • 使用网格区域名字划定 grid 项所在的位置,用法 grid-area: 区域名字;这个区域名字不用加引号
  • 或者使用四个方向的线段来划定:
    grid-area: 上边开始/左边开始/下边结束/右边结束;

align-self 属性

设定 grid项 内的内容垂直方向的对齐方式。
属性值:

  1. stretch:默认值,内容宽度占满整个网格区域空间。
  2. start:上端对齐。
  3. center:居中对齐。
  4. end:下端对齐。

justify-self 属性

  1. stretch:默认值,内容宽度占满整个网格区域空间。
  2. start:左端对齐。
  3. center:居中对齐。
  4. end:右端对齐。

place-self 属性

align-self 与 justify-self 的复合简写属性,可以分别写两个值。
如果只写一个值则水平方向和垂直方向都一样。
例如 place-self:center; 即可实现垂直水平都居中。

grid 通常用法

先定模板,再把项放进模板。例如:

  1. 先定 grid-template-areas,定好模板名字。
  2. 然后 grid-template-rows/columns 定好模板轨道宽高。
  3. 再把 grid项 用 grid-area 划分区域名字。

CSS其他属性

常用文本样式:

color属性

设置文本内容前景色,值可以用单词、十六进制表示法、rgb表示法,rgba表示法

color: #fff; 
color: red; 
color: rgb(0,0,0); 
color: rgba(0,0,0,.5);

font-size属性

设置文本字号,单位为px,em,rem

font-weight属性

设置文本字重(粗细),常见四种值(值为字体文件自带,如果没有就没有):

normal 正常,与400等值
bold 加粗,与700等值
light 细体
bolder 更粗

font-style属性

设置字体斜体italic、倾斜oblique,默认值normal正常

font-family属性

用于设置字体,可以一次放几个,用逗号隔开。
拥有字体文件后,可以用@font-face定义字体,如下:

@font-face { 
    font-family:; 
    src: url(); 
}

font属性合写

font-style(和、或)font-weight + font-size/line-height + font-family;

text-decoration属性

设置文本下划线、删除线、顶线,默认值none没有

underline 下划线
line-through 删除线
overline 顶线

text-indent属性

定义首航文本内容缩进量,单位通常是em(字符宽度)

text-align属性

元素添加 text-align:center; 可实现元素内的#text文本水平居中

text-shadow属性

给#text文本添加文字阴影,属性值同box-shadow

line-height属性

用于定义行高,单位通常是px,也可以不写单位。不写单位表示字号的n倍,也可以写百分数。
单行高等于盒子高度,即可实现#text文本在盒子内垂直居中。
如果不考虑居中,从设计角度来看,文字行高定义150%-170%是最好的阅读体验。

letter-spacing 属性

字符间距

writing-mode 属性

文本方向,值vertical-rl:从右向左阅读;配合text-orientation:mixed; 属性,可以让文本保持竖直或倾斜。

list-style属性

list-style:<' list-style-type '> || <' list-style-position '> || <' list-style-image '>

可设置在文字内还是文字外 outside | inside 。可以放图片,设置url即可。

overflow属性

可分别设置overflowX和overflowY,默认值visible,hidden隐藏,scroll、auto滚动条

其他文本知识:

继承性:

文本相关属性普遍具有继承性,给祖先设置,后代会继承生效。
比如:font-开头的、text-开头的、line-开头的、color、list-开头的。
在继承情况下,选择器权重计算失效,采用“就近原则”。除非选中的是同一个标签再比权重

单行文本溢出容器用...代替写法:

.text-ellipsis{ 
    white-space:no-wrap;    //溢出不换行 
    overflow:hidden;         //溢出隐藏
    text-overflow:ellipsis;     //...替代显示 
}

单行文本溢出不能和flex布局搭配使用,解决方法是形成多层嵌套。

多行文本溢出用...代替写法

.multiline-ellipsis{
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orent: vertical;
    white-space: normal !important;
    word-wrap: break-word;
}

仅webkit内核浏览器可用,-webkit-line-clamp是控制在多少行结尾用...代替。
使用多行文本溢出的容器不要设置高度。

其他盒子属性

outline属性

outline 为外边框线,外轮廓,该属性不影响盒子布局
属性值为:粗细,边框样式,颜色。
还有个 outline-offset 为以盒子中心为点的边框偏移量,负值就会变成内边框线。
可以使用修改 outline 属性修改input获取焦点时的外发光

column属性

column 多列排布,
属性值1列宽,属性值2多少列。如果只写属性值1,则铺满盒子宽度。

背景 background

背景颜色

background-color 属性:
属性值可用英文,十六进制,rgb(),rgba(),HSL(),HSLA()。
padding区域是强制继承 content 区颜色的。

背景图片

background-image 属性:
属性值是路径url方式,可插入多张,用逗号隔开。
外联样式表找路径从css文件出发,内联样式表从html出发。

图片比盒子小会自动重复平铺,用 background-repeat 属性可设置平铺方式。
值no-repeat不平铺;repeat-x X轴平铺;repeat-y Y轴平铺;repeat 默认值,x、y都平铺。

背景尺寸

background-size属性:
值为宽度和高度,单位可以是数值,也可以是百分比,也可以auto,例如

div{
    background-size: 100px 100% ;       //宽度100px,高度100%
}

值为cover表示将背景图片智能改变尺寸撑满盒子。
值为contain表示将背景图片尺寸智能改变以容纳到盒子。

{background-size: cover ;}

常用,强制一图等比撑满无空隙,从左上角开始计算,溢出部分隐藏。

{ background-size: contain ; }

图片撑开,直至撑满最短边,空隙用重复填充,可用no-repeat。

背景裁切

background-clip属性:

意义
border-box 延伸至边框(默认值)
padding-box 延申到内边距,配合border为dotted,dashed等可察觉
context-box 裁切至内容区

仅裁切,但不改变图片起源坐标,要设置起源用 background-origin 属性改变,值与上面一样,也是border-box、padding-box、context-box。

背景固定

background-attachment 属性:
要开启小盒子滚动和窗口滚动才可察觉。不常用。

效果
fixed 不滚,窗口滚动背景也不滚
local
scroll 默认

背景图片定位

background-position 属性:
值可以为偏移量left、top、right、bottom 以及 center ;

实现背景居中满铺盒子,可用:

background-position: center center ;
background-size: cover ;

配合i、u、b标签开启position和background position可实现css sprite(css精灵图)

background 复合属性

值可以填写颜色 图片url 重复repeat 位置position 尺寸宽高;

背景覆盖性
background > background-image > background-color

⚠从以上层级来看,渐变色不是 background-color 能用的,background能用,但不方便理解,套渐变尽量用background。

注意 从这里开始步入CSS3属性知识

注: 像渐变等这种CSS3新特性,旧浏览器需要添加私有性前缀,例如:
-webkit-、-moz-、-ms-、-o-

渐变

线性渐变值:linear-gradient( ); 函数

函数值:
第一个:方向,可 to x 或者 角度 45deg 。例如:

{ background: linear-gradient( to right ); }
或者
{ background: linear-gradient( 45deg ); }

第二个:开始色,第n个:结束、过渡色。例如:

{ background: linear-gradient( to right , red , blue , yellow); }

在颜色中间可用空格隔开写每个颜色的开始位置,例如:

{ background: linear-gradient( to right , red  , blue 30% , yellow 70% ,green ); }

径向渐变(辐射渐变):radial-gradient( ); 函数

函数值:第一个值为径向形状,也可以是两个颜色值。
尺寸:

closest-side 径向形状与盒子最近边相切
farthest-side 径向形状与盒子最远边相切
closest-corner 径向形状与盒子最近角相切
farthest-corner 径向形状与盒子最远角相切

形状:
circle 圆 , ellipse 椭圆

高级CSS3

变形:transform 属性

附加属性:transform-origin 属性:改变变形原点位置。
transform属性只能设置一次,一次写多个值,多写后面的会把前面的覆盖。

斜切变形

属性值为 skew( ) 函数时,会进行斜切变形,参数为角度,例如:

{transform: skew( 10deg ,20deg );}

缩放变形

属性值为 scale( ) 、scaleX( ) 、scaleY( )函数时,会进行放大缩小变形。参数为数字,大于1放大,小于1缩放。可传入多个值,例如:

{transform: scale( .1 ,3);}

旋转变形

属性值为 rotate( ) 函数时。(默认z轴,也有 rotateX 和 rotateY )参数为角度,单位为deg,角度为正数时,顺时针方向,负数逆时针,例如。

{transform: rotate(45deg) ;}

位移变形

属性值为 translate( ) 函数时,进行旋转变形,还有translateX( ),和translateY( ) ,参数为位移距离,与relative相似,transform-origin改变不了,位移变形同样可以应用与盒子垂直居中。

3D变形

rotateX 和 rotateY 函数。

3D旋转后可进行3D空间移动。例如:

{
    transform: rotateX(50) translateX(100px) translateY(100px) ;
}

transform-style 属性

父元素进行3D转换时,子元素是否保留已经进行的3D转换。

说明
preserve-3d 开启保留
flat 默认值,不开启

perspective属性

用来给父盒子定义透视强度,值为距离舞台的距离。

CSS3 动态

过渡 transition属性

当样式发生改变的时候,自动添加补帧动画。
必要值:实现过渡的属性和过渡持续时间,例如:

{transition: width 2s ; }

可以定义多个过渡,用逗号隔开。

四要素(四个小属性)

属性名 说明
transition-property 哪些属性要过渡
transition-duration 过渡持续时间
transition-timing-function 过渡速率曲线
transition-delay 开始延迟时间

transition-property

属性值可写all,即所有属性都参与过度

transition-timing-fuction属性

过渡动画速率(缓动参数)

常见值 意义
linear 匀速
ease 缓动
ease-in 缓进
ease-out 缓出
ease-in-out 缓进出
cubic-bezier( ) 贝塞尔曲线函数

动画 animation

定义关键帧与时长后自动播放的动画,必要值:动画名和动画时间,例如:

{animation: anima 10s ; }

六要素(六个小属性)

属性名 意义
animation-name 动画的名字
animation-duration 动画时长
animation-timing-function 动画速率曲线
animation-delay 动画播放延迟
animation-iteration-count 动画循环次数
animation-direction 第2n次播放是否倒放
animation-fill-mode 当动画结束后元素保持什么状态

animation-name:

如何定义动画以及给动画命名,格式:

@keyframes 动画名字{
    开始状态{ }
    过渡状态{ }
    结束状态{ }
}

也可以直接定义2帧(开始帧和结束帧),例如:

@keyframes animaName{
    from{ }
    to{ }
}
或者
@keyframes animaName{
    0%{ }
    100%{ }
}

也可以定义多帧动画,用百分数定义不同阶段的关键帧,例如:

@keyframes animaName{
    0%{ }
    10%{ }
    35%{ }
    90%{ }
    100%{ }
}

animation-fill-mode

当值为none时
none为默认值,在动画执行前和动画执行后,对元素的样式不会产生影响。
从上图可以看到,值为none时,动画执行前和执行后的状态和无动画的状态是一致的,动画执行前和执行后对元素没有产生任何样式影响。动画执行后跳到无动画状态。

当值为forwards时
forwards当使用这个值时,告诉浏览器:动画结束后,元素的样式将设置为动画的最后一帧的样式。
从上图可以看出,值为forwards时,动画执行前的状态和无动画状态一致,但是动画执行后状态却不一样,查看动画效果,你会发现他的状态和动画最后一帧的状态相同。

当值为backwards时
从CSS样式可以看到,动画我们有设置延迟1s,为了便于观察动画执行前的状态。
backwards当使用这个值时,告诉浏览器:动画开始前,元素的样式将设置为动画的第一帧的样式。
从上图可以看出,值为backwards时,动画执行前的状态和无动画状态 不一致,可以看出,它的状态和动画第一帧相同,但是动画执行后状态却和无动画时的状态相同。

当值为both时
both当使用这个值时,告诉浏览器:同时使用forwards和backwards两个属性值的效果。
从上图可以看出,动画执行前是动画第一帧的效果,动画执行后是动画最后一帧的效果。

滤镜属性

  • filter属性可以接滤镜函数
  • filter: blur(); 模糊,参数为像素单位的数值,数值越大越模糊
  • 还有 contrast,grayscale,hue-rotatr,drop-shadow

calc() 函数

calc() 函数可以再声明属性值时执行一些计算,函数执行后返回计算后的值。,例如

width: calc(100%-77px);

可以进行加减乘除运算,且运算符号的两边必须加上空格

媒体查询 media query

@media screen and (min-width:1200px){}
//中括号里面的内容只对1200宽以上的窗口起作用

为什么需要媒体查询

一套样式不可能适应各种大小的屏幕,媒体查询可设定条件使得内容只在满足条件的情况下呈现内容。

常见媒体类型

名称 意义
all 默认值,所有媒体类型
screen 屏幕
print 打印页面
speech 朗读器

如果使用默认值,可以同时省略 all 和 and ,必须同时,例如:

@media {}

媒体查询中的逻辑

呈现方式 意义
and
,
not
only

and 串联,not 取反,,或拆成并联,例如:

@media all and (min-width:900px) and (max-width:1920px){}
@media screen and (min-width:500px) , speech and (min-width:1000px){}

媒体属性

  • 例如:min-width / max-width / width orientation:landscape/portrait
  • 多数情况下使用带有 “min-”和“max-”前缀的,用于表达最小是多少最大是多少,避免了css的 < 和 > 符号冲突。
  • 策略:从小大大用min,从大到小用max

移动端其他知识

nomrmalize.css

更好用的重置css默认样式方法,官网地址:
http://necolas.github.io/normalize.css/

点击一些标签高亮背景取消

-webkit-tap-highlight-color: transparent;

给按钮和输入框自定义样式

需要关掉apppearance。
-webkit-appearance: none;

禁用长安页面时的弹出菜单

img,a { -webkit-touch-callout: none; }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容