2020-11-03 CSS面试题总结-持续更新

174 阅读7分钟

1、position属性分为几种,有什么区别

  • 默认定位static,正常文档流定位,此时top、left、right、bottom和z-index等属性无效,块级元素从上往下纵向排列,行级元素从左往右排列
  • 相对定位relative,此时的相对是相对于正常文档流的位置
  • 绝对定位absolute,相对于最近的非static定位祖先元素的偏移,来确定元素位置,比如一个绝对定位元素它的父级和祖父级元素都为relative,它会相对他的父级而产生偏移
  • 固定定位fixed,元素相对于屏幕视口的位置来指定元素位置,元素的位置在屏幕滚动时不会改变,比如回到顶部的按钮一般都是用此定位方式
  • 粘性定位sticky,相当于relative和fixed的结合,主要用在scroll事件的监听上

2、介绍下BFC及其应用

BFC就是块级格式上下文,是页面盒模型布局中的一种CSS渲染模式,相当于一个独立的容器,里面的元素和外部的元素相互不影响

特性

  • 同一个BFC下,元素外边距会重叠
  • BFC可以清除浮动
  • BFC可以阻止浮动元素被覆盖

如何形成

  • 根元素,即HTML元素
  • position:fixed/absolute
  • float不为none
  • overflow不为visible
  • display的值为inline-block、table-cell、table-caption、flex

作用

  • 防止margin发生重叠
  • 两栏布局,防止文字环绕
  • 防止元素塌陷

3、垂直居中方法

  1. position:absolute margin负边距
  2. position:absolue margin:auto top:0...
  3. position:absolue transform:translate(-50%,-50%)
  4. display:flex align-item:center
  5. display:table-cell vertical-align:middle

4、display:none与visibility:hidden和opacity:0的区别

如图:

image.png

  1. display:none

     - 元素从文档树中消失,渲染的时候不占据任何空间
     - 无法进行DOM事件的监听,不能点击
     - 修改元素会造成文档的回流,性能消耗较大
     - 是非继承属性
    
  2. visibility:hidden

     - 元素还存在于文档树中,继续占据空间,只是看不见
     - 也无法进行DOM事件监听,不能点击
     - 修改元素只会造成重绘,性能消耗较少
     - 是继承属性
    
  3. opacity:0

     - 透明度为100%,元素还存在于文档树中,占据空间,只是内容不可见
     - 可以进行DOM事件监听,可以点击
     - 是继承
    

打个比方:dispaly:none从这个世界消失了,不存在了;opacity:0在视觉上隐身了,看不见,可以触摸得到;visibility:hidden视觉上和物理上都隐身了,看不见也摸不到,但是存在

5、什么是回流,什么是重绘,有什么区别

  • 当我们对DOM的修改引发了DOM几何尺寸的变化(比如修改元素的宽、高或隐藏元素等)时,浏览器需要重新计算元素的几何属性(其它元素的几何属性也会因此受到影响),然后再将计算的结果绘制出来,这个过程就是回流(也叫重排)
  • 当我们对DOM的修改导致了样式的变化,却并且影响其几何属性(比如修改了颜色或背景色)时,浏览器不需要重新计算元素的几何属性,直接为该元素绘制新的样式,这个过程叫做重绘

区别

回流必将引起重绘,而重绘不一定会引起回流。

6、清除浮动的方式

  1. 使用空div方式
  2. 使用BFC,如给父元素添加overflow:hidden或auto
  3. 使用clearfix方式

7、CSS的选择器有哪些,优先级

id选择器,class选择器,标签选择器,伪元素选择器,伪类选择器等

  • 样式选择器的类型不同时,优先级顺序:id选择器>class选择器>标签选择器
  • 带有!important标记的样式优先级最高

总的来说:内联样式>内部样式>外部样式

8、Flex布局

分为容器属性和元素属性

容器的属性

  • flex-direction:row|row-reverse|column|column-reverse决定主轴的方向
  • flex-wrap:nowrap|wrap|wrap-reverse决定换行规则
  • flex-flow:上面两个属性的简写
  • justify-content:主轴对齐方式
  • align-items:交叉轴对齐方式
  • align-content:定义多根轴线的对齐方式

项目属性

  • order:定义项目排列顺序,数值越小,越靠前
  • flex-grow:定义项目放大比例,默认为0
  • flex-shrink:定义项目缩小比例,默认为1
  • flex-basis:定义占据空间,默认auto,项目本来大小
  • flex:前面三个缩写,默认0 1 auto
  • align-self:允许单个项目与其他项目不一样的对齐方式

例子

1、两个元素,左边固定,右边自适应

左:flex:none(0 0 auto)  右:flex:auto(1 1 auto) 

2、三个元素平分空间

flex:1

3、求最终left和right的宽度

<div class="container">
    <div class="left"></div>
    <div class="right"></div>
</div>

<style>
  * {
    padding: 0;
    margin: 0;
  }
  .container {
    width: 600px;
    height: 300px;
    display: flex;
  }
  .left {
    flex: 1 2 500px;
    background: red;
  }
  .right {
    flex: 2 1 400px;
    background: blue;
  }
  
  // left:
  // right:
</style>

题解如下:

flex.jpg

对应题目:

  • 子项溢出空间的宽度为500+400-600=300
  • left收缩比例为500×2÷(500×2+400×1)≈0.71
  • right收缩比例为400×1÷(500×2+400×1)≈0.29

对应的:

  • left的收缩宽度为0.71×300=213
  • right的收缩宽度为0.29×300=87

所以:

  • left的最终宽度为500-213=287px
  • right的最终宽度为400-87=313px

9、怎么画一条0.5px的直线

heigt: 1px;
transform: scale(0.5);

10、CSS中link和@import的区别是什么

  • link属于HTML标签,而@import是css提供的
  • 页面被加载时,link会同时被加载,而@import被引用的css会等到引用它的css文件被加载完再加载
  • import只在IE5以上才能识别,而link是HTML标签,无兼容问题
  • link方式的样式的权重高于@import的权重

11、rgba()和opacity的透明效果有什么不同

两者都能实现透明效果,但最大的不同时opacity作用于元素,以及元素内的所有内容的透明度;而rgba()只作用于元素的颜色或其背景色(设置rgba透明的元素的子元素以及内容都不会继承透明效果)

12、请列举几种隐藏元素的方法

  1. visibility: hidden-这个属性只是简单的隐藏某个元素,但是元素占用的空间仍然存在
  2. opacity: 0-CSS3属性,设置0可以使一个元素完全透明,但不会改变页面布局;而且如果该元素已经绑定一些事件如click,那么点击该区域还是会触发点击事件的
  3. position: absolute-设置一个很大的left负值定位,使元素定位在可见区域之外
  4. display: none-元素会变得不可见,并且不会在占用元素位置,会改变页面布局
  5. transform: sacle(0)-将一个元素设置为缩放无限小,元素将不可见,元素原来的所在的位置将被保留
  6. 用层叠关系z-index把元素在最底下使其隐藏

13、disabled和readonly的区别

  • disabled指当前input元素加载时禁用此元素,input内容不会随着表单提交
  • readonly规定输入字段为只读,input内容会随着表单提交
  • 无论设置readonly还是disabled,通过js脚本都能改变input的value

14、px、rpx、em和rem的区别

  • px:绝对长度单位,来描述一个元素的宽高以及定位信息
  • rpx:微信小程序独有的,解决屏幕自适应的尺寸单位
  • em:相对单位,基准点为父节点字体的大小,浏览器默认16px,em作为字体单位,相对于父元素字体大小;em作为行高单位,相对于自身字体大小
  • rem:相对单位,可理解为root em,相对于根节点html的字体大小来计算

15、CSS盒模型是什么,又分为几种

盒模型顾名思义指的是能装东西的盒子,比如div、h等元素,而像img、input这种就不是盒模型

主要组成有;content、padding、border、margin,其中content又分为width、height

目前主要分为两类盒模型:

- IE盒模型:其widthheight包括contentpaddingborder,通过设置box-sizing: border-box;
- 标准盒模型:其widthheight就是content,通过设置box-sizing: content-box;

持续更新...