CSS 中的盒子模型包括 IE 盒子模型和标准的 W3C 盒子模型。
box-sizing: content-box(width不算border和padding)、border-box(padding和border算入width)、padding-box(padding算入width)
标准盒子模型:宽高不计算border和padding
IE盒子模型:把padding和border计算到宽高里面
通过设置视口宽度为设备宽度,初始缩放和最大缩放的值都为1,并禁止用户缩放。使得宽度视口中的1px就是物理像素1pxtransform:scaleY(0.5)
实现高度缩小到原来的一半,就是0.5pxdiv{
height: 1px;
width: 200px;
background-color: red;
transform: scaleY(0.5);
}
transition 过渡代码示例
div
{
width:100px;
transition: width 2s;
}
div:hover {width:300px;}
animation 动画代码示例
div
{
width:100px;
height:100px;
background:red;
position:relative;
animation:mymove 5s infinite;
}
@keyframes mymove
{
from {left:0px;}
to {left:200px;}
}
先通过@keyframes定义一个动画方法,from中写入元素初始样式,to中写入元素结束样式
通过animation调用定义好的动画方法,实现动画效果
Flex又称弹性布局,布局的传统解决方案,基于盒状模型,依赖 display 属性 + position 属性 + float 属性。
而Flex布局在父元素上(亲爹)添加display:flex,可以使父级的布局模式转换成弹性布局模式。其中默认主轴是水平方向的,而弹性容器中的弹性盒子都是按照主轴方向排列的。
justify-content
修改主轴对齐方式**align-items**
修改侧轴对齐方式align-selfs
修改当前子元素的对齐方式flex-direction
修改主轴的对齐方向,row表示主轴横向,col表示主轴竖向,相应侧轴也会随之改变flex-wrap= wrap
使得弹性盒子换行排列align-content
实现分行之后的多根轴的排列样式,注意:在单行容器中是不生效的BFC又称块级格式化上下文,是一个完全独立的空间(布局环境),让空间里的子元素不会影响到外面的布局,用于清除浮动,防止 margin 重叠等。
通过一些属性来触发BFC,使得BFC中的子元素不受外面的元素影响。具体触发条件有:
BFC的具体规则
BFC
就是一个块级元素,块级元素会在垂直方向一个接一个的排列BFC
就是页面中的一个隔离的独立容器,容器里的标签不会影响到外部标签BFC
的两个相邻的标签外边距会发生重叠BFC
的高度时,浮动元素也参与计算块元素:独占一行,并且有自动填满父元素,可以设置 margin 和 pading 以及高度和宽度
行元素:不会独占一行,width 和 height 会失效,并且在垂直方向的 padding 和 margin会失效,宽高由内容撑开
{
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}
opacity=0 :不透明度0,表示全透明,该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如 click 事件,那么点击该区域,也能触发点击事件
visibility=hidden:该元素隐藏起来了,但不会改变页面布局,但是不会触发该元素已经绑定的事件
display:none:把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元素删除掉一样
相邻的标准流的块级元素垂直方向上margin会重叠
两个相邻的外边距都是正数时,重叠结果是它们两者之间较大的值。
两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
两个外边距一正一负时,折叠结果是两者的相加的和。
固定定位 fixed:
元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动。Fixed 定位使元素的位置与文档流无关,因此不占据空间。 Fixed 定位的元素会和其他元素重叠。
相对定位 relative:
如果对一个元素进行相对定位,然后,通过设置top或left设置垂直水平位置,让这个元素“相对于”它的起点进行移动。 **在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。**因此,移动元素会导致它覆盖其它框。
绝对定位 absolute:
绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于。**absolute 定位使元素的位置与文档流无关,因此不占据空间。**absolute 定位的元素和其他元素重叠。
当父类没有高度同时子类浮动时,因为父类没有高度,浏览器默认看不到父类,同时因为子类浮动不再标准流中,因此后面的内容自动移到前面,导致排版异常的情况,解决方法:
直接给父级强制增加高度(最暴力)
使用带 clear 属性的空元素,父类元素的最后一个位置添加一个空元素如,并在 CSS 中赋
予.clear{clear:both;}
属性即可清理浮动。缺点是增加了额外的结构元素。
使用 CSS 的 overflow 属性,给浮动元素的容器添加 overflow:hidden;
或 overflow:auto;
。原理是构建了BFC(块级格式化上下文)。缺点是不是所有时候都能生效。
给浮动的元素的容器添加浮动,给父类元素添加浮动,使得父类也脱离标准流。缺点是有可能打乱父类的排列顺序。
使用 CSS 的:after 伪元素,直接复制,给对应父元素添加class="clearfix"类选择器
.clearfix::before, .clearfix::after {
content: "";
display: table;
}
.clearfix::after {
clear: both;
}
.clearfix {
*zoom: 1;
}
transform
id 选择器,class 选择器,标签选择器,伪元素选择器,伪类选择器等
优先级顺序为:id 选择器 > class 选择器 > 标签选择器
标签之间存在层级包含关系时,后代元素会继承祖先元素的样式。如果后代包含祖先相同的属性则祖先元素的相同的样式属性会被覆盖。
带有!important 标记的样式属性的优先级最高;
样式表的来源不同时,优先级顺序为:内联样式> 内部样式 > 外部样式
创建动画序列,需要使用 animation 属性
transition属性也能实现过渡动画,但过渡动画只有开始和结束两个状态,中间的状态不受控制。且transition需要搭配事件才能触发。
浮动的元素都转换成块级元素,所以display为block
calc() 函数用于动态计算长度值 width: calc(100% - 10px)
display:table 的 css 声明能够让一个html 元素和它的子节点像 table 元素一样,使用基于表格的 css 布局,是我们能够轻松定 义一个单元格的边界,背景等样式,而不会产生因为使用了 table 那样的制表标签导致的语义化问题。
用 div+css 编写出来的文件比用 table边写出来的文件小,而且 table 必须在页面完全加载后才显示,div 则是逐行显示,table的嵌套性太多,没有 div 简洁
background-color 设置的背景颜色会填充元素的 content、padding、border 区域。填充整个IE盒子区域。
属性选择器和伪类选择器的优先级相同
Block :是块级元素,其前后都会有换行符,能设置宽度,高度,margin/padding 水平垂直方向都有效。
Inline:是行级元素,设置 width 和 height 无效,宽高由内容撑开,margin 在竖直方向上无效,padding 在水平方向垂直方向都有效,前后无换行符 。
Inline-block:是行内块元素,有行级元素和块级元素的特征。能设置宽度高度,margin/padding 水平垂直方向 都有效,前后无换行符。
DOM 的变化影响到了元素的几何属性比如宽高,浏览器重新计算元素的几何属性,其他元素的几何属性也会受到影响,浏览器需要重新构造渲染树,这个过程称之为重排。浏览器将受到影响的部分重新绘制在屏幕上 的过程称为重绘。
回流又称为重排,就是页面的布局,将一个个盒子引入页面。当渲染树中的元素尺寸、结构、布局等发生改变时浏览器都会重新渲染部分或者全部文档的过程称为回流。
重绘就是根据内容对页面进行绘制,由于元素样式的改变并不影响它在文档流中的位置和文档布局称为重绘(比如color、background-color、outline等)
简单来说,影响页面布局的就是回流,不影响页面布局的称为重绘,重绘不一定引起回流但回流一定会引起重绘
会导致回流的操作有:
重绘重排的代价:耗时,导致浏览器卡慢
减少重绘和重排:
当元素设置了 overflow 样式且值部不为visible 时,该元素就构建了一个 BFC,BFC 在计算高度时,内部浮动元素的高度也要计算在内,也就是说技术 BFC 区域内只有一个浮动元素,BFC 的高度也不会发生塌缩,所以达到了清除浮动的目的。
display 属性可以设置元素的内部和外部显示类型
外部显示类型:决定该元素的流式布局中的表现如块级布局、行级布局
内部显示类型:可以控制其子元素的布局如Flex弹性布局