努力打造最全面的CSS面试题

CSS基础

CSS3新特性

  • 新增的css选择器:( :first-child{样式} 、:last-child{样式}、:nth-child{样式}.......)

  • 渐变:gradient: linear-gradient(线性渐变) || radial-gradient(圆形径向渐变)

  • 圆角 :border-radius :2px; (半径为2px的圆角)

  • 阴影: box-shadow:水平阴影位置 垂直阴影位置 模糊距离 阴影大小 阴影的颜色 阴影开始方法

  • 盒子模型:box-sizing: content-box(标准盒子模型) | border-box(怪异盒子模型)

  • 文字阴影: text-shadow:水平阴影 垂直阴影 模糊距离 阴影颜色

  • 文本溢出省略

    单行文本溢出省略号代替:
    1.强制文字一行显示:white-spase:nowrap;(默认为normal,自动换行。)
    2.超出的部分隐藏:overflow:hidden;。
    3.超出文字用省略号代替:text-overflow:ellipsis;
    多行文本溢出省略号代替:
    1.先设置一个盒子宽高,然后overflow:hidden; text-overflow:ellipsis;
    2.弹性伸缩盒子模型显示:display:-webkit-box;
    3.限制显示行数:-webkit-line-clamp:2;
    4.设置或检索伸缩盒对象子元素的排列方式:-webkit-box-orient: vertical;(从上到下垂直排序)
  • transation(过渡):要过渡的属性 花费时间 运动曲线 何时开始; (谁过渡,给谁加!

  • animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画的起始或结束状态;(前两个属性必须写

  • transform(转换)

    • translateX | Y | Z (10px): 向 X | Y | Z 轴移动 10 px

    • rotateX | Y | Z(10deg) : 以 X | Y | Z 轴旋转 10 °

    • scale(X, Y) : 元素缩放,取决于 X 轴与 Y 轴的参数

    • skew(X,Y): 元素倾斜,参数表示 X 轴与 Y 轴倾斜的角度

  • flex布局:当父盒子设为flex布局后,子盒子的float,clear,vertical-align属性将失效。

flex布局

  • 常见容器属性:

    • flex-direction :设置主轴的方向

      • row: 默认值 从左到右

      • row-reverse:从右到左

      • column:从上到下

      • colum-reverse从下到上

    • justify-content:设置主轴上的子元素排列方式 (注意:使用这个属性之前 一定要先确定好主轴是哪个

      • flex-star 默认值 从头部开始 如果主轴是x轴,则从左到右

      • flex-end 从尾部开始排列

      • center 在主轴居中对齐

      • space-around 平分剩余空间

      • space-between 先两边贴边 在平分剩余空间(重要

    • align-items :设置侧轴上的子元素排列方式(限于单行元素使用)

      • flex-start:从上到下

      • flex-end:从下到上

      • center:挤在一起居中

      • stretch:;拉伸 默认值

      • flex-flow:复合元素,相当于同时设置了 flex-direction 和 flex-wrap。 flex-flow:column wrap;

    • align-content:设置侧轴上的子元素的排列方式(只能在子元素出现换行的时候使用 在单行下使用没有效果)

      • flex-star 默认值 在侧轴的头部开始排列

      • flex-end 从侧轴尾部开始排列

      • center 在侧轴居中对齐

      • space-around 子项在侧轴平分剩余空间

      • space-between 子项在侧轴先两边贴边 在平分剩余空间(重要

      • stretch 设置子项元素高度平分父元素高度

    • flex-wrap:设置子元素是否换行 nowrap(默认 不换行) | warp(换行)

定位(position)

  • static:静态定位 ,相当于标准流的摆放模式

  • relative:相对定位,元素移动是相对于自身原本的位置,移动后原本位置还继续占有。

  • absolute:绝对定位

    • 没有祖先元素或者祖先元素没有定位时,则以浏览器为准定位

    • 祖先有定位时(无论是相对、绝对、固定定位),则以最近一级有定位祖先元素为参照点移动位置

    • 绝对定位不在占有原来位置(脱标)

  • fixed :固定定位,固定定位一定要有宽度。

    • 以浏览器可视窗口为参照物移动元素

    • 固定元素不占有原来位置(脱标,可看作特殊的绝对定位)

  • sticky:粘性定位,被认为相对定位和固定定位的混合。

    • 以可视窗口为参照点移动元素(固定定位特点)

    • 粘性定位占有原来位置。(相对定位特点)

    • 必须添加四个方位中的其中一个才有效

link与@import的区别

  • link属于 XHTML 标签;@import属于 css 提供的一种方法,有兼容问题,仅支持IE5以上

  • 页面加载的时候,link会同时被加载,而@import则会等页面加载完成之后在进行加载

  • link 权重大于 @import

  • link 支持使用 JS 去控制 DOM来修改样式;@import 不支持。

  • @import 只能加载 css文件;link除了可以加载 css 外,还可以定义 ref连接属性等

CSS可继承与不可继承属性

可继承属性

  • 元素可见性(visibility)

  • 字体系列属性

    • font-size:字体大小

    • font-weight:字体粗细

    • font-style:定义字体的风格

    • font-family:字体系列

  • 文本系列属性

    • text-indent:文本缩进

    • text-align:文本水平对齐

    • line-height:行高

    • word-spacing:单词之间的间距

    • letter-spacing:字符之间的间距

    • direction:规定文本的书写方向

    • color:⽂本颜⾊

  • 光标属性:cursor(光标形态)

不可继承属性

  • display

  • 文本属性

    • vertical-align:垂直文本对齐

    • text-direction:文本装饰

    • text-shadow: 文本阴影

    • white-space:空白符的处理

    • unicode-bidi:设置文本方向

  • 盒子模型的属性:width、height、margin、padding、border

  • 背景属性: background、background-color、background-image、background-repeat、 background-position等

  • 定位属性::float、clear、position、top、right、bottom、left、overflow、clip、z-index等

  • ⽣成内容属性:content、counter-reset、counter-increment

精灵图/雪碧图

将一些小图片合并到一张大图片中,然后利用 background-position 来获取到所需要的小图片。(一般只有小图片才会做成精灵图)

优点

  • 减少网页的 http 请求,加快网页加载速度,提高用户的体验

  • 能够减少图片的字节数

缺点

  • 在宽屏、高分辨率的屏幕下的自适应页面,如果图片不够宽很容易出现背景断裂

  • 开发时需要利用 ps 或其他工具测量图片的准确的位置

  • 维护比较麻烦,一旦背景有少许改动就需要该这张精灵图

inline-block 显示有空隙

  • 如果有空格的时候,删除空格

  • 如果使用margin的时候,让margin负值即可

  • 使用font-size的时候,可通过设置font-size:0 、letter-spacing 、word-spacing 解 决;

css权重

!important > 行内样式(1000)> id选择器(100) >类选择器、伪类选择器(10)> 元素选择器(1)>继承 *(0)

隐藏元素

  • display:none : 最常使用的元素隐藏方法。隐藏后不会在页面占据位置

  • visibility:hidden : 隐藏后元素还在页面中占据位置

  • opacity: 0 : 将元素透明度设置为0,以此来达到隐藏元素的目的。此元素还在页面占据位置且可能会触发事 件。

  • position:absolute; left: -999px : 将元素设为相对定位,然后通过top、left、right、bottom的大额负值来 移出可视化区域,以此实现元素隐藏。

  • transform:scale(0) | translate(-999px,0) : 通过元素缩放为 0 或者 平移出可视化区域来实现元素隐藏。

  • 设宽、高属性为 0 : 将盒子模型的所有属性设置为 0,如果盒子内还有子元素或者内容的话,还需要设置其 overflow:hidden 来隐藏其子元素。

display:none 与 visibility:hidden 的区别

  • 前者会让元素在页面中完全消失,不在页面中占据空间。后者只是内容不可见,依然在页面中占据空间。

  • 前者是非继承属性,子节点是完全消失的,修改子节点属性也不会在显示。后者是继承属性,子元素消失是由于继承了 hidden,子元素可以通过设置 visibility:visible 来显示出来。

  • 修改前者的时候,一般都会造成文档的重排。修改后者的时候,只会造成重绘。

  • 使用读屏器的时候,前者内容不会被读取到,后者内容可以被读取到。

px/em/rem/vh/vw 的区别

  • px : 表示像素,为绝对单位。

  • em : 为相对长度单位。相对于为父节点字体的大小,如果自身定义了font-size按自身来计算。

  • rem:也是为相对长度单位。相对于 HTML 根元素 font-size 的值。

  • vh : 根据可视化窗口的高度,分成100 等份。100vh就相当于是满高。

  • vw :根据可视化窗口的宽度,分成100 等份。100vh就相当于是满宽。

BFC

BFC(Block Formatting Context):块级格式化上下文,是页面中的一块渲染区域,拥有自己的一套渲染规则。

通常用于定位、清除浮动。

规则:

  • 内部的盒子在垂直方向上一个接一个放置

  • 在同一BFC中,相邻的两个盒子的margin会发生重叠

  • BFC区域不会和float的元素区域重叠(用于自适应布局)

  • 计算BFC区域高度的时候,float子元素也参与计算

  • 每个元素的左外边距与包含块的左外边界相接触,浮动元素也是如此

  • BFC 就是页面上的一个隔离的容器。容器内的子元素不会影响到外面的元素,反之亦然。

形成条件:

  • 浮动元素:浮动元素的值不为 none

  • 定位: position : absolute | fixed

  • display: inline-block、table-cell、table-caption、tabletable-rowtable-row-grouptable-header-grouptable-footer-group

  • overflow : hidden、auto、scroll

应用场景:

  • 防止相邻设有margin的两个盒子发生 margin 重叠(塌陷,以值较大的margin为准)。让两个盒子处于不同的BFC区域就行。

  • 清除内部浮动:让外部大盒子形成 BFC 区域

  • 自适应多栏布局(两栏布局,三栏布局.....)

水平垂直居中

  • position:absolute + margin:auto

  • position:absolute + margin:(-50%,-50%)

  • position:absolute + transform:translate(-50%,-50%)

  • 父元素设置 display:table-cell、vertical-align: middle、text-align:center, 子元素设置 display:inline-block

  • flex布局: 给父盒子设置 display:flex、justify-content: center、align-items:center;

  • grid网格布局:给父盒子设置 display:grid、justify-content: center、align-items:center;

常用的CSS预处理语言

CSS预处理语言为 CSS 增加了一些编程的特性,可以让你在 CSS 中使用变量、简单的逻辑程序、函数等等还可以让你的 CSS嵌套编写,看起来更加舒适。常用的CSS预处理语言有 Sass 、 Less 、 Stylus。

响应式布局设计

指的是仅用一套代码就能实现在不同屏幕下有不用的显示结果。(会根据场景进行调整)

实现方式

  • 媒体查询

@media screen (min-width: 375px) and (max-width: 600px) {
  body {
    font-size: 18px;
  }
}
@media screen (min-width: 600px) and (max-width: 900px) {
  body {
    font-size: 20px;
  }
}
  • 百分比(%)需要设置每个元素才能实现响应式布局,较为复杂,不建议使用。

    • 子元素宽高依赖于父元素的宽高。

    • 子元素的margin、padding设置百分比,无论水平、垂直,都是相对于父元素的 width。

    • border-radius设为百分比,则是相对于自身来说的。

  • rem: 先利用媒体查询更改不同分辨率下的 根元素的 font-size 值,然后将 rem 设置为 width 的十分之一。

  • vw/vh:表示视图的宽度/高度。一般都是使用vw。

回流(重排)、重绘

回流:布局的时候,计算每个盒子在页面的大小和位置

重绘:计算完盒子大小与位置后,会根据盒子自身的特性进行绘制

回流一定会触发重绘,重绘不会触发回流。

回流的触发

  • 添加或删除DOM元素

  • 元素位置发生变化

  • 盒子模型属性发生变化

  • 元素内容发生变化

  • 可视化窗口变化

  • 页面渲染

重绘的触发:

  • 改变文字颜色

  • 改变文本方向

如何减少:

  • 减少DOM的增删

  • 对于一些复杂的动画,尽量使它脱离文档流(position:fixed| absolute),减少对其他元素的影响

  • 避免设置多项内联样式

  • 避免使用 table 布局,table内的每个元素及内容改动,都会导致整个 table 重新计算

  • 避免使用 CSS 的 JavaScript 表达式

css提高性能的方法

  • 尽量将样式写在单独的 css 文件中,然后再引用。

  • 不要使用 @import。会影响浏览器的并行下载,增加页面加载的延迟事件。

  • 避免使用多层选择器,会增加匹配时间。

  • 使用 webpack、rollup 等 模块化工具对 css 代码进行压缩。

  • 减少使用高性能属性: float、定位。

  • 使用精灵图,减少http请求

  • 将小图片转化为 base64编码

  • 减少重排、重绘操作

  • 增加继承操作,减少属性编写

像素

  • 设备像素/物理像素(dp): 设备能控制显示的最小物理单位,单位为 pt 。

  • 设备独立像素/逻辑像素(dip):设备独立像素是与设备无关的逻辑像素,代表可以通过程序控制使用的虚拟像素,是一个总体概念,包括了CSS像素。一个设备独立像素里可能包含1个或者多个物理像素点,包含的越多则屏幕看起来越清晰。

  • 设备像素比(dpr):代表设备独立像素到设备像素的转换关系,设备像素比(dpr) = 设备像素 /设备独立像素

  • 像素密度(ppi):在一定尺寸的物理屏幕上显示像素的数量,单位一般为dip

让Chrome支持小于12px 的文字方式有哪些?区别?

  • zoom:可以改变页面上元素的真实尺寸。zoom:50%或zoom:0.5,均表示缩小到原来的一半。

  • text-size-adjust:none :这样设置之后会有一个问题,就是当你放大网页时,一般情况下字体也会随着变大,而设置了以上代码后,字体只会显示你当前设置的字体大小,不会随着网页放大而变大了,不建议全局应用该属性,而是单独对某一属性使用。

  • ‐webkit‐transform:scale() :使用该属性进行缩放。但是该属性只对定义了宽高的元素生效。

区别

  • zoom是非标准属性,有兼容问题,缩放会改变了元素占据的空间大小,触发重排

  • text-size-adjust:none 对谷歌浏览器有版本要求,在27之后,就取消了该属性的支持,并且只对英文、数字生效

  • ‐webkit‐transform:scale()大部分现代浏览器支持,并且对英文、数字、中文也能够生效,缩放不会改变了元素占据的空间大小,页面布局不会发生变化

场景应用

三角形

元素宽高设为 0 ,若三角形角朝上,则设置 右、下、左边框。然后将左右边框设为透明。

div{
      width: 0;
      height: 0;
      border-right: 50px solid transparent;
      border-bottom: 50px solid skyblue;
      border-left: 50px solid transparent;
    }

扇形

元素宽高设为 0,设置透明外边框,然后设置百分百的 border-radius。在将四边任意一边的边框设为有颜色的即可(每一边对应不同指向的扇形)

div{
      width: 0;
      height: 0;
      border: 100px solid transparent;
      border-radius: 100%;
      border-top-color: pink;
    }

圆形

div{
      width: 100px;
      height: 100px;
      border-radius: 100px;
      background-color: skyblue;
    }

半圆

div{
      width: 100px;
      height: 50px;
      border-radius: 0 0 100px 100px;
      background-color: skyblue;
    }

直角梯形

div{
      height: 0;
      width: 100px;
      border-bottom: 100px solid skyblue;
      border-right: 5 0px solid transparent;
    }

等腰梯形

div{
      width: 100px;
      height: 0;
      border-bottom: 50px solid skyblue;
      border-left: 40px solid transparent;
      border-right: 40px solid transparent;
    }

你可能感兴趣的:(面试,css,面试,前端)