Skip to content

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的新特性

  1. 新增选择器:属性选择器、伪类选择器、伪元素选择器
  2. 增加了媒体查询
  3. 文字阴影
  4. 边框
  5. 盒子模型box-sizing
  6. 渐变
  7. 过度
  8. 自定义动画
  9. 背景的属性
  10. 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 轴方向从外向内的。由此,元素在用户视角就形成了层叠的关系,某个元素可能覆盖了其他元素也可能被其他元素覆盖;

  1. 层叠上下文 (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 的元素;
  2. 层叠等级

    层叠等级 (层叠水平, Stacking Level) 决定了在同一个层叠上下文中,元素在 z 轴上的显示的顺序;

    普通元素的层叠等级优先由其所在的层叠上下文决定;
    层叠等级的比较,只有在同一个层叠上下文元素中才有意义;
    在同一个层叠上下文中,层叠等级描述定义的是该层叠上下文中的元素在 z 轴上的上下顺序;

    另外,层叠等级并不一定由 z-index 决定,只有定位元素的层叠等级才由 z-index 决定,其他类型元素的层叠等级由层叠顺序、他们在 HTML 中出现的顺序、他们的祖先元素的层叠等级一同决定,详细的规则见下面层叠顺序的介绍。

  3. z-index

    z-index 只适用于定位的元素,对非定位元素无效,它可以被设置为正整数、负整数、0、auto,如果一个定位元素没有设置 z-index,那么默认为 auto;
    
    元素的 z-index 值只在同一个层叠上下文中有意义。如果父级层叠上下文的层叠等级低于另一个层叠上下文的,那么它 z-index 设的再高也没用。所以如果你遇到 z-index 值设了很大,但是不起作用的话,就去看看它的父级层叠上下文是否被其他层叠上下文盖住了。
  4. 层叠顺序:描述的是元素在同一个层叠上下文中的顺序规则,从层叠的底部开始,共有七种层叠顺序:

    1. 背景和边框:形成层叠上下文的元素的背景和边框。
    2. 负 z-index 值:层叠上下文内有着负 z-index 值的定位子元素,负的越大层叠等级越低;
    3. 块级盒:文档流中的块级、非定位子元素;
    4. 浮动盒:非定位浮动元素;
    5. 行内盒:文档流中行内、非定位子元素;
    6. z-index: 0:z-index 为 0 或 auto 的定位元素, 这些元素形成了新的层叠上下文;
    7. 正 z-index 值:z-index 为正的定位元素,正的越大层叠等级越高;
  5. 面试中 或 写面试题 的回答

    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.让一个元素水平垂直居中的方式有哪些?

  1. 定位+margin

  2. 定位+transform

  3. flex布局

  4. grid布局

  5. table布局

9.CSS的哪些属性哪些可以继承?哪些不可以继承?

CSS的三大特性:继承、层叠、优先级 子元素可以继承父类元素的样式

  1. 字体的一些属性:font
  2. 文本的一些属性:line-height
  3. 元素的可见性:visibility:hidden
  4. 表格布局的属性:border-spacing
  5. 列表的属性:list-style
  6. 页面样式属性:page
  7. 声音的样式属性

10.有没有用过预处理器?

​ 预处理语言增加了变量、函数、混入等强大的功能 ​ SASS LESS