标准盒模型
标准 w3c 盒子模型的width、height范围只包括 content 部分。
外盒尺寸计算(元素空间尺寸)
element空间高度=内容高度+内距+边框+外距
element空间宽度=内容宽度+内距+边框+外距
内盒尺寸计算(元素大小)
element高度=内容高度+内距+边框(height为内容高度)
element宽度=内容宽度+内距+边框(width为内容宽度)
IE盒模型
IE 盒子模型的width、height范围包括 border、padding、content
外盒尺寸计算(元素空间尺寸)
element空间高度=内容高度+外距(height包含了元素内容宽度、边框、内距)
element宽间宽度=内容宽度+外距(width包含了元素内容宽度、边框、内距)
内盒尺寸计算(元素大小)
element高度=内容高度(height包含了元素内容宽度、边框、内距)
element宽度=内容宽度(width包含了元素内容宽度、边框、内距)
标准盒模型盒IE盒模型不同点
选择标准盒模型方法:在HTML模板中加!doctype声明
box-sizing:content-box // 标准盒模型
box-sizing:border-box // IE盒模型
box-sizing的作用就是告诉浏览器,使用的盒模型是W3C盒模型还是IE盒模型
margin与padding的区别
-
margin是用来隔开
元素与元素的间距 -
padding是用来隔开
元素与内容的间隔
padding,margin为百分比计算时的参照对象
padding-top,padding-bottom,margin-top,margin-bottom是百分比时是按照当前元素的父级元素的宽度来计算的.
css中存在Collapsing margins(折叠的margins)的现象??
概念:当两个垂直边界相遇时,它们将形成一个边界。这个边界的高度等于两个发生叠加的边界的高度中的较大者。
简述:当一个元素出现在另一个元素上面时,第一个元素的底边界与第二个元素的顶边界发生叠加
折叠结果遵循下列计算规则:
- 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
- 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
- 两个外边距一正一负时,折叠结果是两者的相加的和。
解决方案:
-
外层元素 padding代替
-
内层元素透明边框 border:1px solid transparent;
-
内层元素绝对定位 postion:absolute:
-
外层DIV overflow:hidden;
-
内层DIV 加float:left;或者display:inline;
-
外层DIV有时会用到zoom:1;
z-index
z-index属性设置元素的堆叠顺序,拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。 其元素可拥有负的z-index属性值,z-index仅能在定位元素上生效
display:none 与 visibility:hidden 的区别是什么?
-
display : none 隐藏对应的元素,在文档布局中不再分配空间(回流+重绘)
-
visibility:hidden 隐藏对应的元素,在文档布局中仍保留原来的空间(重绘)
px rem em 的区别
- px相对于显示器屏幕分辨率
- em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
- rem是CSS3新增的一个相对单位(root em,根em),这个单位与em区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。
CSS引入的方式有哪些?
答:内联,内嵌,外链,导入
- 内联
<div style="width:100px;height:100px"></div>
- 内嵌
<style>
.class {
width:100px;
height:120px
}
</style>
- 外链
<link href="xxx.css">
- 导入
<style>
@import url(xxx.csss)
</style>
CSS 使用Link和@import有什么区别
-
link 属于 XHTML 标签,除了加载 CSS 外,还能用于定义RSS,定义 rel 连接属性等作用,无兼容性,支持使用javascript改变样式;而@import是CSS提供的,只能用于加载CSS,不支持使用 javascript 改变样式;
-
页面被加载时,link 会被同时加载,而@import引用的CSS会等到页面加载完再加载;
-
import是CSS2.1 提出的,CSS2.1以下浏览器不支持,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题。
css 链接
链接的特殊性在于能够根据它们所处的状态来设置它们的样式。
CSS链接的四种状态:
-
a:link - 普通的、未被访问的链接
-
a:visited - 用户已访问的链接
-
a:hover - 鼠标指针位于链接的上方
-
a:active - 链接被点击的时刻
/* 未被访问的链接 */
a:link {
color:#FF0000;
}
/* 已被访问的链接 */
a:visited {
color:#00FF00;
}
/* 鼠标指针移动到链接上 */
a:hover {
color:#FF00FF;
}
/* 正在被点击的链接 */
a:active {
color:#0000FF;
}
当为链接的不同状态设置样式时,请按照以下次序规则:
a:hover 必须位于 a:link 和 a:visited 之后
a:active 必须位于 a:hover 之后
超链接访问过后hover样式就不出现了,因为被点击访问过的超链接样式不再具有hover和active了。解决方法是改变CSS属性的排列顺序:L-V-H-A :
清除浮动
为啥会出现浮动现象??
浮动最初的定义及使用场景:实现文本环绕图片的效果。通过浮动可以实现元素脱离标准文档流。CSS三种基本的定位机制:普通流、浮动和绝对定位
浮动带来的问题
-
父元素的高度无法被撑开,影响与父元素同级的元素
-
与浮动元素同级的非浮动元素(内联元素)会跟随其后
-
若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
浮动会使当前标签产生向上浮的效果,同时会影响到前后标签、父级标签的位置及width、height属性,同样的代码在各种浏览器中显示的效果也会不同。
解决方案
- 父级div定义height(只在高度固定的布局中使用)
原理:父级div手动定义height,这样父级div就可以获取到高度
- 结尾处加空div标签 clear:both
原理:添加一个空的div,利用css提高的clear:both清除浮动,让父级div自动获取到高度
<style>
.clearfloat {
clear:both
}
</style>
<div>
<div class="left">1</div>
<div class="right">2</div>
<div class="clearfloat"></div>
</div>
- 父级div定义伪类:after和zoom
原理:同2 类似,zoom:1可以解决ie6,ie7浮动问题
<style>
.clearfloat:after {
display:block;
clear:both;
content:"";
visibility:hidden;
height:0
}
.clearfloat{
zoom:1
}
</style>
<div class="clearfloat">
<div class="left">1</div>
<div class="right">2</div>
</div>
- 父级div定义overflow:hidden
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度,不能和position配合使用,超出的部分会被隐藏
<style>
.div1 {
width:98%;
overflow:hidden
}
</style>
<div class="div1">
</div>
- 父级div定义overflow:auto
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度,但当内部宽高超过父级div时,会出现滚动条
<style>
.div1 {
width:98%;
overflow:auto
}
</style>
<div class="div1">
</div>
display属性
定义:display 属性规定元素应该生成的框的类型,建立布局时元素生成的显示框类型。
常用的值
display:none 此元素不会被显示。
display:block 此元素将显示为块级元素,此元素前后会带有换行符。
display:inline-block 行内块元素。
css中的overflow属性定义溢出元素内容区的内容会如何处理
- 参数是scroll时候,必会出现滚动条。
- 参数是auto时候,子元素内容大于父元素时出现滚动条。
- 参数是visible时候,溢出的内容出现在父元素之外。
- 参数是hidden时候,溢出隐藏。
CSS性能优化
- 内联首屏关键CSS
性能优化中有一个重要的指标——首次有效绘制(First Meaningful Paint,简称FMP)即指页面的首要内容(primary content)出现在屏幕上的时间。这一指标影响用户看到页面前所需等待的时间,而内联首屏关键CSS(即CriticalCSS,可以称之为首屏关键CSS能减少这一时间,只将渲染首屏内容所需的关键CSS内联到HTML中,并将文件的大小控制在14K内
- 异步加载CSS
第一种方式是使用JavaScript动态创建样式表link元素,并插入到DOM中
- 文件压缩
- 去除无用CSS
- 优化重排与重绘
使用css预处理的优缺点
优点:
- 提高 CSS 可维护性。
- 易于编写嵌套选择器。
- 引入变量,增添主题功能。可以在不同的项目中共享主题文件。
- 通过混合(Mixins)生成重复的 CSS。 缺点:
- 需要预处理工具。
- 重新编译的时间可能会很慢。
为什么在移动端开发时需要用到@3x,@2x图片
- 如果实际测量收集的物理像素,例如实际为1242*2688 的手机,当赋予一个DIV元素宽度为414px时,就会产生逻辑像素为1242/414=3个物理像素。也就是说这个屏幕的像素密度为3,就是常说的3倍屏。为保证不失真,一个图片像素至少要对应一个物理像素