前端面试点复习整合——前端基础篇(2)CSS篇

*内容参考整理自牛客网

目录

      • 一、 说一下css盒模型
      • 二、link标签和import标签的区别
      • 三、transition和animation的区别
      • 四、Flex弹性布局
      • 五、BFC
      • 六、垂直居中的办法
      • 七、关于js动画和css3动画的差异性
      • 八、说一下块元素和行元素
      • 九、怎么样让一个元素消失,讲讲
      • 十、双边距重叠问题(外边距折叠)
      • 十一、position属性
      • 十二、浮动清除
      • 十三、css3新特性
      • 十四、 CSS选择器有哪些,优先级呢
      • 十五、css动画如何实现
      • 十六、CSS3中对溢出的处理
      • 十七、三栏布局的实现方式,尽可能多写,浮动布局时,三个div的生成顺序有没有影响
      • 十八、display:table和本身的table有什么区别
      • 十九、 inline-block、inline和block的区别;为什么img是inline还可以设置宽高
      • 二十、了解重绘和重排吗,知道怎么去减少重绘和重排吗,让文档脱离文档流有哪些方法
      • 二十一、 overflow的原理
      • 二十二、box-sizing的语法和基本用处
      • 二十三、css布局

一、 说一下css盒模型

简介:就是用来装页面上的元素的矩形区域。CSS中的盒子模型包括IE盒子模型标准的W3C盒子模型

在标准的盒子模型中,widthcontent部分的宽度,在IE盒子模型中,width表示content+padding+border这三个部分的宽度 。

二、link标签和import标签的区别

link属于html标签,而@import是css提供的。

页面被加载时,link会同时被加载,而@import引用的css会等到页面加载结束后加载。

link是html标签,因此没有兼容性,而@import只有IE5以上才能识别。

link方式样式的权重高于@import的。

三、transition和animation的区别

Animationtransition大部分属性是相同的,他们都是随时间改变元素的属性值,他们的主要区别是transition需要触发一个事件才能改变属性,而animation不需要触发任何事件的情况下才会随时间改变属性值,并且transition为2帧,从from … to,而animation可以一帧一帧的。

四、Flex弹性布局

Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

容器的属性:

flex-direction:决定主轴的方向(即子item的排列方法);

flex-wrap:决定换行规则;

flex-flow:反序;

justify-content:对其方式,水平主轴对齐方式;

align-items:对齐方式,竖直轴线方向。

五、BFC

块级格式化上下文,用于清除浮动,防止margin重叠等。

六、垂直居中的办法

父元素固定宽高,利用定位及设置子元素margin值为自身的一半。

父元素固定宽高,子元素设置position: absolutemargin:auto平均分配margin。

css3属性transform,子元素设置position: absolute;left: 50%; top: 50%;transform: translate(-50%,-50%);即可。

将父元素设置成display: table,子元素设置为单元格 display: table-cell

弹性布局display: flex,设置align-items: center; justify-content: center

七、关于js动画和css3动画的差异性

渲染线程分为main threadcompositor thread,如果css动画只改变transform和opacity,这时整个CSS动画得以在compositor trhead完成(而js动画则会在main thread执行,然后出发compositor thread进行下一步操作),特别注意的是如果改变transform和opacity是不会layout或者paint的。

区别:

功能涵盖面,js比css大;

实现/重构难度不一,CSS3比js更加简单,性能跳优方向固定;

css动画有天然事件支持;

css3有兼容性问题。

八、说一下块元素和行元素

块元素:独占一行,并且有自动填满父元素,可以设置margin和pading以及高度和宽度。

行元素:不会独占一行,width和height会失效,并且在垂直方向的padding和margin会失。

九、怎么样让一个元素消失,讲讲

opacity=0,该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如click事件,那么点击该区域,也能触发点击事件的。

visibility=hidden,该元素隐藏起来了,但不会改变页面布局,但是不会触发该元素已经绑定的事件。

display=none,把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元素删除掉一样。

十、双边距重叠问题(外边距折叠)

多个相邻(兄弟或者父子关系)普通流的块元素垂直方向marigin会重叠。

折叠的结果为:

两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值
两个外边距一正一负时,折叠结果是两者的相加的和

十一、position属性

固定定位fixed:元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动。Fixed定位使元素的位置与文档流无关,因此不占据空间。 Fixed定位的元素和其他元素重叠。

相对定位relative:如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。 在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。

绝对定位absolute:绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于。 absolute 定位使元素的位置与文档流无关,因此不占据空间。 absolute 定位的元素和其他元素重叠。

粘性定位sticky:元素先按照普通文档流定位,然后相对于该元素在流中的flow root(BFC)和 containing block(最近的块级祖先元素)定位。而后,元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。

默认定位Static:默认值。没有定位,元素出现在正常的流中(忽略top, bottom, left, right 或者 z-index 声明)。

十二、浮动清除

一:使用带clear属性的空元素;

二:使用CSS的overflow属性;

三:给浮动的元素的容器添加浮动;

四:使用邻接元素处理;

五:使用CSS的:after伪元素。

十三、css3新特性

CSS3的新特性中,在布局方面新增了flex布局,在选择器方面新增了例如first-of-type,nth-child等选择器,在盒模型方面添加了box-sizing来改变盒模型,在动画方面增加了animation2d变换,3d变换等,在颜色方面添加透明,rbga等,在字体方面允许嵌入字体设置字体阴影,最后还有媒体查讯等 。

十四、 CSS选择器有哪些,优先级呢

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

同一元素引用了多个样式时,排在后面的样式属性的优先级高;

样式选择器的类型不同时,优先级顺序为:id 选择器 > class 选择器 > 标签选择器

带有!important标记的样式属性的优先级最高;

样式表的来源不同时,优先级顺序为:内联样式> 内部样式 > 外部样式 > 浏览器用户自定义样式 > 浏览器默认样式

十五、css动画如何实现

创建动画序列,需要使用animation属性或其子属性,该属性允许配置动画时间、时长以及其他动画细节,但该属性不能配置动画的实际表现,动画的实际表现是由 @keyframes规则实现,具体情况参见使用keyframes定义动画序列小节部分。

transition也可实现动画。transition强调过渡,是元素的一个或多个属性发生变化时产生的过渡效果,同一个元素通过两个不同的途径获取样式,而第二个途径当某种改变发生(例如hover)时才能获取样式,这样就会产生过渡动画。

十六、CSS3中对溢出的处理

text-overflow属性,值为clip是修剪文本;ellipsis为显示省略符号来表被修剪的文本;string为使用给定的字符串来代表被修剪的文本。

十七、三栏布局的实现方式,尽可能多写,浮动布局时,三个div的生成顺序有没有影响

三列布局又分为两种,两列定宽一列自适应,以及两侧定宽中间自适应。

两列定宽一列自适应:

1、使用float+margin

给div设置float:left,left的div添加属性margin-right:left和center的间隔px,right的div添加属性margin-left:left和center的宽度之和加上间隔。

2、使用float+overflow

给div设置float:left,再给right的div设置overflow:hidden。这样子两个盒子浮动,另一个盒子触发bfc达到自适应。

3、使用position

父级div设置position:relative,三个子级div设置position:absolute,这个要计算好盒子的宽度和间隔去设置位置,兼容性比较好。

4、使用table实现:

父级div设置display:table,设置border-spacing:10px//设置间距,取值随意,子级div设置display:table-cell,这种方法兼容性好,适用于高度宽度未知的情况,但是margin失效,设计间隔比较麻烦。

5、flex实现:

parent的div设置display:flex;left和center的div设置margin-right;然后right 的div设置flex:1;这样子right自适应,但是flex的兼容性不好。

6、grid实现:

parent的div设置display:grid,设置grid-template-columns属性,固定第一列第二列宽度,第三列auto,

对于两侧定宽中间自适应的布局,对于这种布局需要把center放在前面,可以采用双飞翼布局:圣杯布局,来实现,也可以使用上述方法中的grid,table,flex,position实现。

十八、display:table和本身的table有什么区别

display:table和本身table是相对应的,区别在于,display:table的css声明能够让一个html元素和它的子节点像table元素一样,使用基于表格的css布局,是我们能够轻松定义一个单元格的边界,背景等样式,而不会产生因为使用了table那样的制表标签导致的语义化问题。

之所以现在逐渐淘汰了table系表格元素,是因为用div+css编写出来的文件比用table边写出来的文件小,而且table必须在页面完全加载后才显示,div则是逐行显示,table的嵌套性太多,没有div简洁。

十九、 inline-block、inline和block的区别;为什么img是inline还可以设置宽高

block:块级元素,其前后都会有换行符,能设置宽度,高度,margin/padding水平垂直方向都有效。

Inline:设置width和height无效,margin在竖直方向上无效,padding在水平方向垂直方向都有效,前后无换行符。

Inline-block:能设置宽度高度,margin/padding水平垂直方向 都有效,前后无换行符。

二十、了解重绘和重排吗,知道怎么去减少重绘和重排吗,让文档脱离文档流有哪些方法

DOM的变化影响到了预算内宿的几何属性比如宽高,浏览器重新计算元素的几何属性,其他元素的几何属性也会受到影响,浏览器需要重新构造渲染书,这个过程称之为重排,浏览器将受到影响的部分重新绘制在屏幕上 的过程称为重绘,引起重排重绘的原因有:

添加或者删除可见的DOM元素;

元素尺寸位置的改变;

浏览器页面初始化;

浏览器窗口大小发生改变,重排一定导致重绘,重绘不一定导致重排。

减少重绘重排的方法有:

不在布局信息改变时做DOM查询;

使用csstext,className一次性改变属性;

使用fragment;

对于多次重排的元素,比如说动画。使用绝对定位脱离文档流,使其不影响其他元素。

二十一、 overflow的原理

当元素设置了overflow样式且值部位visible时,该元素就构建了一个BFC,BFC在计算高度时,内部浮动元素的高度也要计算在内,也就是说技术BFC区域内只有一个浮动元素,BFC的高度也不会发生塌缩,所以达到了清除浮动的目的 。

二十二、box-sizing的语法和基本用处

box-sizing规定两个并排的带边框的框,语法为box-sizing:content-box/border-box/inherit

content-box:宽度和高度分别应用到元素的内容框,在宽度和高度之外绘制元素的内边距和边框;

border-box:为元素设定的宽度和高度决定了元素的边框盒;

inherit:继承父元素的box-sizing。

二十三、css布局

六种布局方式总结:圣杯布局、双飞翼布局、Flex布局、绝对定位布局、表格布局、网格布局

圣杯布局是指布局从上到下分为headercontainerfooter,然后container部分定为三栏布局。这种布局方式同样分为header、container、footer。圣杯布局的缺陷在于 center 是在 container 的padding中的,因此宽度小的时候会出现混乱。

双飞翼布局center部分包裹了一个 main 通过设置margin主动地把页面撑开。

Flex布局是由CSS3提供的一种方便的布局方式。

绝对定位布局是给container 设置position: relativeoverflow: hidden,因为绝对定位的元素的参照物为第一个postion不为static的祖先元素。 left 向左浮动,right 向右浮动。center 使用绝对定位,通过设置left和right并把两边撑开。 center 设置top: 0和bottom: 0使其高度撑开。

表格布局的好处是能使三栏的高度统一。

网格布局可能是最强大的布局方式了,使用起来极其方便,但目前而言,兼容性并不好。网格布局,可以将页面分割成多个区域,或者用来定义内部元素的大小,位置,图层关系。

你可能感兴趣的:(笔记)