104道 CSS 面试题

104道 CSS 面试题

(给前端大全加星标,提升前端技能)

作者:CavsZhouyou

https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/master/Css/Css.md

本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出!

目录
  • 1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?[1]
  • 2.CSS 选择符有哪些?[2]
  • 3.::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用。[3]
  • 4.伪类与伪元素的区别[4]
  • 5.CSS 中哪些属性可以继承?[5]
  • 6.CSS 优先级算法如何计算?[6]
  • 7.关于伪类 LVHA 的解释?[7]
  • 8.CSS3 新增伪类有哪些?[8]
  • 9.如何居中 div?[9]
  • 10.display 有哪些值?说明他们的作用。[10]
  • 11.position 的值 relative 和 absolute 定位原点是?[11]
  • 12.CSS3 有哪些新特性?(根据项目回答)[12]
  • 13.请解释一下 CSS3 的 Flexbox(弹性盒布局模型),以及适用场景?[13]
  • 14.用纯 CSS 创建一个三角形的原理是什么?[14]
  • 15.一个满屏品字布局如何设计?[15]
  • 16.CSS 多列等高如何实现?[16]
  • 17.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用 hack 的技巧?[17]
  • 18.li 与 li 之间有看不见的空白间隔是什么原因引起的?有什么解决办法?[18]
  • 19.为什么要初始化 CSS 样式?[19]
  • 20.什么是包含块,对于包含块的理解?[20]
  • 21.CSS 里的 visibility 属性有个 collapse 属性值是干嘛用的?在不同浏览器下以后什么区别?[21]
  • 22.width:auto 和 width:100\x 的区别[22]
  • 23.绝对定位元素与非绝对定位元素的百分比计算的区别[23]
  • 24.简单介绍使用图片 base64 编码的优点和缺点。[24]
  • 25.‘display’、'position’和’float’的相互关系?[25]
  • 26.margin 重叠问题的理解。[26]
  • 27.对 BFC 规范(块级格式化上下文:blockformattingcontext)的理解?[27]
  • 28.IFC 是什么?[28]
  • 29.请解释一下为什么需要清除浮动?清除浮动的方式[29]
  • 30.使用 clear 属性清除浮动的原理?[30]
  • 31.zoom:1 的清除浮动原理?[31]
  • 32.移动端的布局用过媒体查询吗?[32]
  • 33.使用 CSS 预处理器吗?喜欢哪个?[33]
  • 34.CSS 优化、提高性能的方法有哪些?[34]
  • 35.浏览器是怎样解析 CSS 选择器的?[35]
  • 36.在网页中应该使用奇数还是偶数的字体?为什么呢?[36]
  • 37.margin 和 padding 分别适合什么场景使用?[37]
  • 38.抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题][38]
  • 39.简单说一下 css3 的 all 属性。[39]
  • 40.为什么不建议使用通配符初始化 css 样式。[40]
  • 41.absolute 的 containingblock(包含块)计算方式跟正常流有什么不同?[41]
  • 42.对于 hasLayout 的理解?[42]
  • 43.元素竖向的百分比设定是相对于容器的高度吗?[43]
  • 44.全屏滚动的原理是什么?用到了 CSS 的哪些属性?(待深入实践)[44]
  • 45.什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?(待深入了解)[45]
  • 46.视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)[46]
  • 47.如何修改 chrome 记住密码后自动填充表单的黄色背景?[47]
  • 48.怎么让 Chrome 支持小于 12px 的文字?[48]
  • 49.让页面里的字体变清晰,变细用 CSS 怎么做?[49]
  • 50.font-style 属性中 italic 和 oblique 的区别?[50]
  • 51.设备像素、css 像素、设备独立像素、dpr、ppi 之间的区别?[51]
  • 52.layoutviewport、visualviewport 和 idealviewport 的区别?[52]
1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?

相关知识点:

(1)有两种盒子模型:IE盒模型(border-box)、W3C标准盒模型(content-box)
(2)盒模型:分为内容(content)、填充(padding)、边界(margin)、边框(border)四个部分

IE盒模型和W3C标准盒模型的区别:

(1)W3C标准盒模型:属性width,height只包含内容content,不包含border和padding
(2)IE盒模型:属性width,height包含content、border和padding,指的是content
+padding+border。

在ie8+浏览器中使用哪个盒模型可以由box-sizing(CSS新增的属性)控制,默认值为content-box,即标准盒模型;
如果将box-sizing设为border-box则用的是IE盒模型。如果在ie6,7,8中DOCTYPE缺失会将盒子模型解释为IE
盒子模型。若在页面中声明了DOCTYPE类型,所有的浏览器都会把盒模型解释为W3C盒模型。

回答:

盒模型都是由四个部分组成的,分别是margin、border、padding和content。

标准盒模型和IE盒模型的区别在于设置width和height时,所对应的范围不同。标准盒模型的width和height属性的
范围只包含了content,而IE盒模型的width和height属性的范围包含了border、padding和content。

一般来说,我们可以通过修改元素的box-sizing属性来改变元素的盒模型。

详细的资料可以参考:《CSS 盒模型详解》[53]

2.CSS 选择符有哪些?
(1)id选择器(#myid)
(2)类选择器(.myclassname)
(3)标签选择器(div,h1,p)
(4)后代选择器(h1 p)
(5)相邻后代选择器(子)选择器(ul>li)
(6)兄弟选择器(li~a)
(7)相邻兄弟选择器(li+a)
(8)属性选择器(a[rel="external"])
(9)伪类选择器(a:hover,li:nth-child)
(10)伪元素选择器(::before、::after)
(11)通配符选择器(*)
3.::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用。

相关知识点:

单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成)
双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法,
比如:first-line、:first-letter、:before、:after等,
而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。

想让插入的内容出现在其它内容前,使用::before,否者,使用::after;
在代码顺序上,::after生成的内容也比::before生成的内容靠后。
如果按堆栈视角,::after生成的内容会在::before生成的内容之上。

回答:

在css3中使用单冒号来表示伪类,用双冒号来表示伪元素。但是为了兼容已有的伪元素的写法,在一些浏览器中也可以使用单冒号
来表示伪元素。

伪类一般匹配的是元素的一些特殊状态,如hover、link等,而伪元素一般匹配的特殊的位置,比如after、before等。
4.伪类与伪元素的区别
css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句
话中的第一个字母,或者是列表中的第一个元素。

伪类用于当已有的元素处于某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。比如说,当用户悬停在指定的
元素时,我们可以通过:hover来描述这个元素的状态。

伪元素用于创建一些不在文档树中的元素,并为其添加样式。它们允许我们为元素的某些部分设置样式。比如说,我们可以通过::be
fore来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

有时你会发现伪元素使用了两个冒号(::)而不是一个冒号(:)。这是CSS3的一部分,并尝试区分伪类和伪元素。大多数浏览
器都支持这两个值。按照规则应该使用(::)而不是(:),从而区分伪类和伪元素。但是,由于在旧版本的W3C规范并未对此进行
特别区分,因此目前绝大多数的浏览器都支持使用这两种方式表示伪元素。

详细资料可以参考:《总结伪类与伪元素》[54]

5.CSS 中哪些属性可以继承?

相关资料:

每个CSS属性定义的概述都指出了这个属性是默认继承的,还是默认不继承的。这决定了当你没有为元素的属性指定值时该如何计算
值。

当元素的一个继承属性没有指定值时,则取父元素的同属性的计算值。只有文档根元素取该属性的概述中给定的初始值(这里的意思应
该是在该属性本身的定义中的默认值)。

当元素的一个非继承属性(在Mozilla code里有时称之为reset property)没有指定值时,则取属性的初始值initial v
alue(该值在该属性的概述里被指定)。

有继承性的属性:

(1)字体系列属性
font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust

(2)文本系列属性
text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、
text-transform、direction、color

(3)表格布局属性
caption-side border-collapse empty-cells

(4)列表属性
list-style-type、list-style-image、list-style-position、list-style

(5)光标属性
cursor

(6)元素可见性
visibility

(7)还有一些不常用的;speak,page,设置嵌套引用的引号类型quotes等属性


注意:当一个属性不是继承属性时,可以使用inherit关键字指定一个属性应从父元素继承它的值,inherit关键字用于显式地
指定继承性,可用于任何继承性/非继承性属性。

回答:

每一个属性在定义中都给出了这个属性是否具有继承性,一个具有继承性的属性会在没有指定值的时候,会使用父元素的同属性的值
来作为自己的值。

一般具有继承性的属性有,字体相关的属性,font-size和font-weight等。文本相关的属性,color和text-align等。
表格的一些布局属性、列表属性如list-style等。还有光标属性cursor、元素可见性visibility。

当一个属性不是继承属性的时候,我们也可以通过将它的值设置为inherit来使它从父元素那获取同名的属性值来继承。

详细的资料可以参考:《继承属性》[55]《CSS 有哪些属性可以继承?》[56]

6.CSS 优先级算法如何计算?

相关知识点:

CSS的优先级是根据样式声明的特殊性值来判断的。

选择器的特殊性值分为四个等级,如下:

(1)标签内选择符x,0,0,0
(2)ID选择符0,x,0,0
(3)class选择符/属性选择符/伪类选择符 0,0,x,0
(4&#x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值