语义化:指对文本内容的结构化(内容语义化),选择合乎语义的标签(代码语义化)。
举例:段落用 p,边栏用 aside,主要内容用 main 标签。
好处:
新加的H5语义化标签:
表示导航
表示页眉
表示页脚
表示区块
表示文章。如文章、评论、帖子、博客
表示侧边栏 如文章的侧栏
表示媒介内容分组。
表示标记 (用得少)
表示进度 (用得少)
表示日期元素定位方式以及相对于什么定位
(1)基本概念:
当对⼀个⽂档进⾏布局(lay out)的时候,浏览器的渲染引擎会根据标准之⼀的 CSS 基础框盒模型,将所有元素表示为⼀个个矩形的盒⼦(box)。CSS 决定这些盒⼦的⼤⼩、位置以及属性(例如颜⾊、背景、边框尺⼨…)。 content、padding、margin。
(2)标准盒模型、IE盒模型的区别。(IE的content包括border和padding)
(3)CSS如何设置这两种模型
(4)margin塌陷/margin重叠:
1.BFC概念:(Block Formatting Context)块级格式化上下文。你可以把它理解成一个独立的区域。
2.BFC 的原理/BFC的布局规则:
(1)BFC 内部的子元素,在垂直方向,边距会发生重叠。
(2)BFC在页面中是独立的容器,外面的元素不会影响里面的元素,反之亦然。
(3)BFC区域不与旁边的float box
区域重叠。(可以用来清除浮动带来的影响)。
(4)计算BFC的高度时,浮动的子元素也参与计算。
3.如何生成BFC
absolute
或fixed
,也就生成了一个BFC。4.解决问题
1.浮动性质:元素脱标,互相贴靠,字围效果,收缩
2.float属性有四个值:Left和Right,None(默认的)使元素不浮动,Inherit将会从父级元素获取float值。
3.清除浮动:
给浮动元素的祖先增加高度
clear:both—>问题:margin失效
隔墙法:隔div加clear:both
overflow:hidden(清除溢出)—>父亲加overflow:hidden能撑出高度
实现方法:
浮动:左右浮动,中间不管(兼容性好,浮动会脱标)
定位:子绝父相,左0右0,中间设置左右
弹性布局:容器设置为display:flex,两侧设宽,中间设置flex:1(flex-grow flex-shrink flex-basis)
表格布局:容器100%宽,display:table;div—>display:table-cell,左右设置宽,中间不管
网格布局:容器100%宽,display:grid;
grid-template-rows:100px;
grid-template-columns:300px auto 300px
1、行内元素:(文字、图片等水平居中)
给父亲设置:(必须行内元素,display:inline/inline-block)
text-align: center; //水平
另外,让文字的行高 等于 盒子的高度,可以让单行文本垂直居中。
line-height:盒子高度; //垂直
2、块级元素:(让标准流中的盒子水平居中)
给元素设置:(让当前元素在父亲里居中)
//方式一
margin: auto;
方式二
margin: 0 auto;
上面的代码, margin: auto
相当于margin: auto auto auto auto
。margin: 0 auto
相当于margin: 0 auto 0 auto
,四个值分别对应上右下左。
元素高度已知
方法:绝对定位 + margin-top/margin-left
如果盒子是绝对定位的,此时已经脱标了,margin:auto
无效。如果还想让其居中(位于父亲的正中间)
我们先让这个高度为100px的盒子,上边线居中,然后向上移动自己宽度宽度的一半(50px),就达到了垂直居中的效果。水平居中的原理类似。
top: 50%;(顶线到父的一半)
left: 50%;(左线到父的中间)
margin-left: -100px;(左移自己的一半)
margin-top: -50px;(上移自己的一半)
元素高度未知
方法1:模拟表格法
将父元素设置为display:table,然后将子元素也(就是要垂直居中显示的元素)设置为display:table-cell,然后加上vertical-align:middle来实现。此时子元素设置宽高无效
display:table-cell;
vertical-align: middle; /*来指定行内元素(inline)或表格单元格(table-cell)元素的垂直对齐方式。*/
方式2:绝对定位 + margin:auto
.element {
position: absolute;
left: 0; top: 0; right: 0; bottom: 0;
margin: auto; /* 有了这个就自动居中了 */
}
方式3:用绝对定位 + translate 位移来做
div {
background-color: red;
position: absolute; 绝对定位的盒子
top: 50%; 首先,让上边线居中(垂直居中)
transform: translateY(-50%); 然后,利用translate,往上走自己宽度的一半【推荐写法】
left:50%; 水平居中
transform: translateX(-50%);
}
方式4:flex 布局
.parent{
display: flex;/*Flex布局*/
display: -webkit-flex; /* Safari */
align-items: center;/*设置子元素在侧轴方向上的布局*/
}
层叠性:就是css处理冲突的能力。 所有的权重计算,没有任何兼容问题!
对于相同方式的样式表,其选择器排序的优先级为:ID选择器 > 类选择器 > 标签选择器
总结:就近原则。ID选择器优先级最大。
权重计算:先看是否选上;id选择器,类选择器,标签选择器;就近原则
伸缩布局
CSS3在布局方面做了非常大的改进,使得我们对块级元素的布局排列变得十分灵活,适应性非常强。其强大的伸缩性,在响应式开中可以发挥极大的作用。
如上图所示,有几个概念需要了解一下:
PS:主轴和侧轴并不是固定不变的,通过flex-direction可以互换。
(1)指定一个盒子为伸缩布局:
display: flex;
(2)设置 flex-direction
属性来调整此盒的子元素的布局方式。默认的方向是水平方向。
(3)可互换主侧轴,也可改变主侧轴的方向。
**1、flex-direction
属性:**设置主轴方向。
flex-direction: row;
设置主轴方向,默认是水平方向。属性值可以是:
row
水平方向(默认值)reverse-row
反转column
垂直方向reverse-column
反转列2、justify-content:设置子元素在主轴上的对齐方式。
justify-content: flex-start;
设置子元素在主轴上的对齐方式。属性值可以是:
flex-start
从主轴的起点对齐(默认值)flex-end
从主轴的终点对齐center
居中对齐space-around
在父盒子里平分space-between
两端对齐 平分3、align-items:设置子元素在侧轴上的对齐方式。
align-items:flex-start;
设置子元素在侧轴上的对齐方式。属性值可以是:
flex-start
从侧轴开始的方向对齐flex-end
从侧轴结束的方向对齐baseline
基线 默认同flex-startcenter
中间对齐stretch
拉伸4、flex
属性:设置子盒子的权重
(1)设置、读取方便。
(2)容量较大,sessionStorage 约5M、localStorage 约20M。
(3)只能存储字符串,可以将对象 JSON.stringify() 编码后存储。
cookies、localstorage、sessionstorage、Web SQL、IndexedDB
transition 包括以下属性:
transition-property: all;
如果希望所有的属性都发生过渡,就使用all。transition-duration: 1s;
过渡的持续时间。transition-timing-function: linear;
运动曲线。属性值可以是:
linear
线性ease
减速ease-in
加速ease-out
减速ease-in-out
先加速后减速transition-delay: 1s;
过渡延迟。多长时间后再执行这个过渡动画。上面的四个属性也可以写成综合属性:
transition: 让哪些属性进行过度 过渡的持续时间 运动曲线 延迟时间;
transition: all 3s linear 0s;
在 CSS3 当中,通过 transform
转换来实现 2D 转换或者 3D 转换。
scale
格式:
transform: scale(x, y);
transform: scale(2, 0.5);
参数解释: x:表示水平方向的缩放倍数。y:表示垂直方向的缩放倍数。如果只写一个值就是等比例缩放。
取值:大于1表示放大,小于1表示缩小。不能为百分比。
格式:
transform: translate(水平位移, 垂直位移);
transform: translate(-50%, -50%);
参数解释:
格式:
transform: rotate(角度);
transform: rotate(45deg);
参数解释:正值 顺时针;负值:逆时针。
问题:为什么有时候⼈们⽤translate来改变位置⽽不是定位?
答: translate()是transform的⼀个值。改变transform或opacity不会触发浏览器重新布局(reflow)或重绘(repaint),只会触发复合(compositions)。⽽改变绝对定位会触发重新布局,进⽽触发重绘和复合。transform使浏览器为元素创建⼀个 GPU图层,但改变绝对定位会使⽤到 CPU。 因此translate()更⾼效,可以缩短平滑动画的绘制时间。而translate改变位置时,元素依然会占据其原始空间,绝对定位就不会发⽣这种情况。
动画是CSS3中具有颠覆性的特征,可通过设置多个节点 来精确控制一个或一组动画,常用来实现复杂的动画效果。
(1)通过@keyframes定义动画;
(2)将这段动画通过百分比,分割成多个节点;然后各节点中分别定义各属性;
(3)在指定元素里,通过 animation
属性调用动画。
在 CSS3 中定义动画的时候,也是先定义,再调用:
定义动画:
@keyframes 动画名{
from{ 初始状态 }
to{ 结束状态 }
}
调用:
animation: 动画名称 持续时间;
我们刚刚在调用动画时,animation属性的格式如下:
animation属性的格式如下:
animation: 定义的动画名称 持续时间 执行次数 是否反向 运动曲线 延迟执行。(infinite 表示无限次)
animation: move1 1s alternate linear 3;
animation: move2 4s;
可以看出,这里的 animation 是综合属性,接下来,我们把这个综合属性拆分看看。
(1)动画名称:
animation-name: move;
(2)执行一次动画的持续时间:
animation-duration: 4s;
备注:上面两个属性,是必选项,且顺序固定。
(3)动画的执行次数:
animation-iteration-count: 1; //iteration的含义表示迭代
属性值infinite
表示无数次。
(3)动画的方向:
animation-direction: alternate;
属性值:normal 正常,alternate 反向。
(4)动画延迟执行:
animation-delay: 1s;
(5)设置动画结束时,盒子的状态:
animation-fill-mode: forwards;
属性值: forwards:保持动画结束后的状态(默认), backwards:动画结束后回到最初的状态。
(6)运动曲线:
animation-timing-function: ease-in;
属性值可以是:linear ease-in-out steps()等。
注意,如果把属性值写成**steps()
,则表示动画不是连续执行**,而是间断地分成几步执行。
animation: move2 4s steps(2);
``
属性值infinite
表示无数次。
(3)动画的方向:
animation-direction: alternate;
属性值:normal 正常,alternate 反向。
(4)动画延迟执行:
animation-delay: 1s;
(5)设置动画结束时,盒子的状态:
animation-fill-mode: forwards;
属性值: forwards:保持动画结束后的状态(默认), backwards:动画结束后回到最初的状态。
(6)运动曲线:
animation-timing-function: ease-in;
属性值可以是:linear ease-in-out steps()等。
注意,如果把属性值写成**steps()
,则表示动画不是连续执行**,而是间断地分成几步执行。
animation: move2 4s steps(2);