1.说一下CSS的盒模型。
在HTML页面中的所有元素都可以看成是一个盒子 盒子的组成:内容content、内边距padding、边框border、外边距margin 盒模型的类型:
标准盒模型
margin + border + padding + content
IE盒模型
margin + content(border + padding)
控制盒模型的模式:box-sizing:content-box(默认值,标准盒模型)、border-box(IE盒模型)
2.CSS3的新特性
- 新增选择器:属性选择器、伪类选择器、伪元素选择器
- 增加了媒体查询
- 文字阴影
- 边框
- 盒子模型box-sizing
- 渐变
- 过度
- 自定义动画
- 背景的属性
- 2D和3D
3.CSS选择器的优先级?
CSS的特性:继承性、层叠性、优先级
优先级:写CSS样式的时候,会给同一个元素添加多个样式,此时谁的权重高就显示谁的样式
!important > 行内样式 > id > 类/伪类/属性 > 标签 > 全局选择器
4.隐藏元素的方法有哪些?
display:none;
元素在页面上消失,不占据空间
opacity:0;
设置了元素的透明度为0,元素不可见,占据空间位置
visibility:hidden;
让元素消失,占据空间位置,一种不可见的状态
5.文本溢出隐藏
单行文本溢出隐藏
div{
width: 200px; /* 容器宽度 */
white-space: nowrap; /* 不换行 */
overflow: hidden; /* 超出部分隐藏 */
text-overflow: ellipsis; /* 溢出部分显示省略号 */
}
多行文本溢出隐藏
.text-container {
display: -webkit-box; /* 使用弹性盒子布局 */
-webkit-box-orient: vertical; /* 垂直方向排列 */
-webkit-line-clamp: 3; /* 限制显示行数 */
overflow: hidden; /* 超出部分隐藏 */
}
6.层叠上下文
屏幕是一个二维平面,然而 HTML 元素却是排列在三维坐标系中,x
为水平方向,y
为垂直方向,z
为屏幕由内向外方向,我们在看屏幕的时候是沿着 z
轴方向从外向内的。由此,元素在用户视角就形成了层叠的关系,某个元素可能覆盖了其他元素也可能被其他元素覆盖;
层叠上下文 (Stacking Context)
层叠上下文 (堆叠上下文, Stacking Context),是 HTML 中一个三维的概念。在 CSS2.1 规范中,每个元素的位置是三维的,当元素发生层叠,这时它可能覆盖了其他元素或者被其他元素覆盖;排在 z 轴越靠上的位置,距离屏幕观察者越近。
在层叠上下文中,其子元素按照上面解释的规则进行层叠。形成层叠上下文的方法有:
1. position 值为 absolute|relative,且 z-index 值不为 auto; 2. position 值为 fixed|sticky; 3. z-index 值不为 auto 的 flex 元素,即父元素属性 display: flex|inline-flex; 4. opacity 属性值小于 1 的元素; 5. transform 属性值不为 none 的元素; 6. mix-blend-mode 属性值不为 normal 的元素; 7. filter、perspective、clip-path、mask、mask-image、mask-border、motion-path 值不为 none 的元素; 8. perspective 值不为 none 的元素; 9. isolation 属性被设置为 isolate 的元素; 10. will-change 中指定了任意 CSS 属性,即便你没有直接指定这些属性的值 11. -webkit-overflow-scrolling 属性设置为 touch 的元素;
层叠等级
层叠等级 (层叠水平, Stacking Level) 决定了在同一个层叠上下文中,元素在 z 轴上的显示的顺序;
普通元素的层叠等级优先由其所在的层叠上下文决定; 层叠等级的比较,只有在同一个层叠上下文元素中才有意义; 在同一个层叠上下文中,层叠等级描述定义的是该层叠上下文中的元素在 z 轴上的上下顺序;
另外,层叠等级并不一定由 z-index 决定,只有定位元素的层叠等级才由 z-index 决定,其他类型元素的层叠等级由层叠顺序、他们在 HTML 中出现的顺序、他们的祖先元素的层叠等级一同决定,详细的规则见下面层叠顺序的介绍。
z-index
z-index 只适用于定位的元素,对非定位元素无效,它可以被设置为正整数、负整数、0、auto,如果一个定位元素没有设置 z-index,那么默认为 auto; 元素的 z-index 值只在同一个层叠上下文中有意义。如果父级层叠上下文的层叠等级低于另一个层叠上下文的,那么它 z-index 设的再高也没用。所以如果你遇到 z-index 值设了很大,但是不起作用的话,就去看看它的父级层叠上下文是否被其他层叠上下文盖住了。
层叠顺序:描述的是元素在同一个层叠上下文中的顺序规则,从层叠的底部开始,共有七种层叠顺序:
1. 背景和边框:形成层叠上下文的元素的背景和边框。 2. 负 z-index 值:层叠上下文内有着负 z-index 值的定位子元素,负的越大层叠等级越低; 3. 块级盒:文档流中的块级、非定位子元素; 4. 浮动盒:非定位浮动元素; 5. 行内盒:文档流中行内、非定位子元素; 6. z-index: 0:z-index 为 0 或 auto 的定位元素, 这些元素形成了新的层叠上下文; 7. 正 z-index 值:z-index 为正的定位元素,正的越大层叠等级越高;
面试中 或 写面试题 的回答
css可以影响层级的属性非常多,本身屏幕是一个二维平面,然而 HTML 元素却是排列在三维坐标系中。 x为水平方向,y为垂直方向,z为屏幕由内向外方向。 我们在看屏幕的时候是沿着 z 轴方向从外向内的,由此,元素在用户视角就形成了层叠的关系,某个元素可能覆盖了其他元素也可能被其他元素覆盖。 那么元素在同一个层叠上下文中的顺序规则,从层叠的底部开始,共有七种层叠顺序: 1. 背景和边框:形成层叠上下文的元素的背景和边框。 2. 负 z-index 值:层叠上下文内有着负 z-index 值的定位子元素,负的越大层叠等级越低; 3. 块级盒:文档流中的块级、非定位子元素; 4. 浮动盒:非定位浮动元素; 5. 行内盒:文档流中行内、非定位子元素; 6. z-index: 0:z-index 为 0 或 auto 的定位元素, 这些元素形成了新的层叠上下文; 7. 正 z-index 值:z-index 为正的定位元素,正的越大层叠等级越高; 那么这里就说几个可以影响层级的css属性吧:比如: 1. 可以给position值为absolute 或 relative的添加z-index; 2. 也可以通过transform: translateY(-100px); 3. opacity属性值小于 1 的元素; 等等好多都可以做到,这里就不一一举例了。
7.BFC
块级格式化上下文 BFC就是页面上一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。
创建BFC
- 1、float的值不是none。
- 2、position的值不是static或者relative。
- 3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
- 4、overflow的值不是visible
用法
- 阻止相邻元素的 margin 合并
- 清除浮动
8.清除浮动
当子元素设置了浮动(float)属性之后,父元素的高度没有进行设置,这样就会导致父元素的高度塌陷(原本的height被重置为0)
触发BFC
额外标签法
在浮动元素末尾添加一个空的标签,再给空标签添加一个清除浮动的样式
:after
ul::after{ content: ''; display: block; clear: both; }
:after 和:before
.clearfix:after,.clearfix:before{ content: ''; display: table; } .clearfix:after{ clear: both; } .clearfix{ /* 为 IE6、IE7浏览器设置的清除浮动 */ zoom: 1; }
5.px和rem和em
px
是像素,显示器上给我们呈现画面的像素,每个像素的大小是一样,绝对单位长度
rem
相对单位,相对于html根节点的font-size的值 直接给html节点的font-size:62.5%;1rem = 10px; (16px*62.5%=10px)
em
相对单位,相对于父元素的font-size的值
6.rem是如何做适配的?
rem是相对长度,相对于根元素(html)的font-size属性来计算大小,通常来做移动端的适配 rem是根据根元素font-size计算值的倍数 比如html上的font-size:16px,给div设置宽为1.5rem,1.2rem = 16px*1.2 = 19.2px.
7.重绘重排有什么区别?
重排(回流):布局引擎会根据所有的样式计算出盒模型在页面上的位置和大小
重绘:计算好盒模型的位置、大小和其他一些属性之后,浏览器就会根据每个盒模型的特性进行绘制
浏览器的渲染机制
- 对DOM的大小、位置进行修改后,浏览器需要重新计算元素的这些几何属性,就叫重排
- 对DOM的样式进行修改,比如color和background-color,浏览器不需要重新计算几何属性的时候,直接绘制了该元素的新样式,那么这里就只触发了重绘
8.让一个元素水平垂直居中的方式有哪些?
定位+margin
定位+transform
flex布局
grid布局
table布局
9.CSS的哪些属性哪些可以继承?哪些不可以继承?
CSS的三大特性:继承、层叠、优先级 子元素可以继承父类元素的样式
- 字体的一些属性:font
- 文本的一些属性:line-height
- 元素的可见性:visibility:hidden
- 表格布局的属性:border-spacing
- 列表的属性:list-style
- 页面样式属性:page
- 声音的样式属性
10.有没有用过预处理器?
预处理语言增加了变量、函数、混入等强大的功能 SASS LESS