css面试题整理 简书

这篇博客汇总了CSS面试中常见的问题,包括display:none与visibility:hidden的区别、position与display、overflow、float的相互影响、浮动及清除浮动的方法、移动端布局的媒体查询、CSS预处理器的使用、CSS性能优化技巧、margin和padding的应用场景、CSS伪元素的理解,以及HTML5新标签的语义和应用场景等。此外,还探讨了CSS中的display属性、position定位、浮动、Flexbox布局、浏览器兼容性问题等深入话题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.display:none与visibility:hidden的区别?

display:none 不显示对应的元素,在文档布局中不再分配空间(回流+重绘)

visibility:hidden 隐藏对应元素,在文档布局中仍保留原来的空间(重绘)

2. position跟display、overflow、float这些特性相互叠加后会怎么样?

display属性规定元素应该生成的框的类型;position属性规定元素的定位类型;float属性是一种布局方式,定义元素在哪个方向浮动。

类似于优先级机制:position:absolute/fixed优先级最高,有他们在时,float不起作用,display值需要调整。float 或者absolute定位的元素,只能是块元素或表格。

3.为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式?

浮动元素碰到包含它的边框或者浮动元素的边框停留。由于浮动元素不在文档流中,所以文档流的块框表现得就像浮动框不存在一样。浮动元素会漂浮在文档流的块框上。

浮动带来的问题:

父元素的高度无法被撑开,影响与父元素同级的元素

与浮动元素同级的非浮动元素(内联元素)会跟随其后

若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构。

清除浮动的方式:

1)父级div定义height

2)最后一个浮动元素后加空div标签 并添加样式clear:both。

3)包含浮动元素的父标签添加样式overflow为hidden或auto。

4)父级div定义zoom

5)父级div定义overflow:auto

4.设置元素浮动后,该元素的display值是多少?

自动变成display:block

5.移动端的布局用过媒体查询吗?

通过媒体查询可以为不同大小和尺寸的媒体定义不同的css,适应相应的设备的显示。

<head>里边<link rel=”stylesheet” type=”text/css” href=”xxx.css” media=”only screen and (max-device-width:480px)”>

CSS : @media only screen and (max-device-width:480px) {/css样式/}

6. 使用 CSS 预处理器吗?

Less sass


 

7. CSS优化、提高性能的方法有哪些?

避免过度约束

避免后代选择符

避免链式选择符

使用紧凑的语法

避免不必要的命名空间

避免不必要的重复

最好使用表示语义的名字。一个好的类名应该是描述他是什么而不是像什么

避免!important,可以选择其他选择器

尽可能的精简规则,你可以合并不同类里的重复规则


 

8.margin和padding分别适合什么场景使用?

何时使用margin:

需要在border外侧添加空白

空白处不需要背景色

上下相连的两个盒子之间的空白,需要相互抵消时。

何时使用padding:

需要在border内侧添加空白

空白处需要背景颜色

上下相连的两个盒子的空白,希望为两者之和。

9. ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用?

单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。

::before就是以一个子元素的存在,定义在元素主体内容之前的一个伪元素。并不存在于dom之中,只存在在页面之中。

:before 和 :after 这两个伪元素,是在CSS2.1里新出现的。起初,伪元素的前缀使用的是单冒号语法,但随着Web的进化,在CSS3的规范里,伪元素的语法被修改成使用双冒号,成为::before ::after

10.li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。

解决方法:

可以将<li>代码全部写在一排

浮动li中float:left

在ul中用font-size:0(谷歌不支持);可以使用letter-space:-3px

11 display:inline-block 什么时候会显示间隙?

有空格时候会有间隙 解决:移除空格

margin正值的时候 解决:margin使用负值

使用font-size时候 解决:font-size:0、letter-spacing、word-spacing

12 style标签写在body后与body前有什么区别?

页面加载自上而下 当然是先加载样式。

写在body标签后由于浏览器以逐行方式对HTML文档进行解析,当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染,在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题)

13 CSS属性overflow属性定义溢出元素内容区的内容会如何处理?

参数是scroll时候,必会出现滚动条。

参数是auto时候,子元素内容大于父元素时出现滚动条。

参数是visible时候,溢出的内容出现在父元素之外。

参数是hidden时候,溢出隐藏。

14.请写出至少5个HTML5新增的标签,并说明其语义和应用场景?

<header>:主要用于定义内容的介绍展示区域,描述了文档的头部区域,比如定义文章的头;

<nav>:定义导航链接的部分;

<section>:定义了文档中的节,比如章节、页眉、页脚或文档中的其他部分;

<article>:定义独立的内容;

<aside>:定义页面主区域之外的内容,比如侧边栏;

<figcaption>:定义<figure>元素的标题,一般被放置在<figure>元素内的第一个或最后一个位置处;

<figure>:定义独立的流内容,比如图形、图标、照片、代码等;

<footer>:定义文档的底部区域,描述文档的页脚,比如作者、著作权信息、联系方式等;

15.元素隐藏有哪些?

1)display:none设置元素的display为none是最常用的隐藏元素的方法。

2)visibility:hidden设置元素的visibility为hidden也是一种常用的隐藏元素的方法,和display:none的区别在于,元素在页面消失后,其占据的空间依旧会保留着,所以它只会导致浏览器重绘而不会重排。visibility:hidden适用于那些元素隐藏后不希望页面布局会发生变化的场景

3)opacity:0opacity属性我相信大家都知道表示元素的透明度,而将元素的透明度设置为0后,在我们用户眼中,元素也是隐藏的,这算是一种隐藏元素的方法。这种方法和visibility:hidden的一个共同点是元素隐藏后依旧占据着空间,但我们都知道,设置透明度为0后,元素只是隐身了,它依旧存在页面中。

16.css如何实现文本超出隐藏?

.line-limit-length {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; //文本不换行,这样超出一行的部分被截取,显示...
}
<div class="item">
    <p class="line-limit-length">最新消息:神秘地球黑洞深不可测,不停吸入周围海水。</p>
    <i class="icon icon-arrow-Go"></i> //图标字体
</div>

17. display有哪些值?说明他们的作用?

inline(默认)–内联
none–隐藏
block–块显示
table–表格显示
list-item–项目列表
inline-block

18 position的值?

static(默认):按照正常文档流进行排列;
relative(相对定位):不脱离文档流,参考自身静态位置通过 top, bottom, left, right 定位;
absolute(绝对定位):参考距其最近一个不为static的父级元素通过top, bottom, left, right 定位;
fixed(固定定位):所固定的参照对像是可视窗口。

19 CSS3有哪些新特性?

RGBA和透明度
background-image background-origin(content-box/padding-box/border-box) background-size background-repeat
word-wrap(对长的不可分割单词换行)word-wrap:break-word
文字阴影:text-shadow: 5px 5px 5px #FF0000;(水平阴影,垂直阴影,模糊距离,阴影颜色)
font-face属性:定义自己的字体
圆角(边框半径):border-radius 属性用于创建圆角
边框图片:border-image: url(border.png) 30 30 round
盒阴影:box-shadow: 10px 10px 5px #888888
媒体查询:定义两套css,当浏览器的尺寸变化时会采用不同的属性


20 请解释一下CSS3的flexbox(弹性盒布局模型),以及适用场景?

该布局模型的目的是提供一种更加高效的方式来对容器中的条目进行布局、对齐和分配空间。在传统的布局方式中,block 布局是把块在垂直方向从上到下依次排列的;而 inline 布局则是在水平方向来排列。弹性盒布局并没有这样内在的方向限制,可以由开发人员自由操作。
试用场景:弹性布局适合于移动前端开发,在Android和ios上也完美支持。


21.CSS优化、提高性能的方法有哪些?

避免过度约束
避免后代选择符
避免链式选择符
使用紧凑的语法
避免不必要的命名空间
避免不必要的重复
最好使用表示语义的名字。一个好的类名应该是描述他是什么而不是像什么
避免!important,可以选择其他选择器
尽可能的精简规则,你可以合并不同类里的重复规则


22. ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用

单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。
::before就是以一个子元素的存在,定义在元素主体内容之前的一个伪元素。并不存在于dom之中,只存在在页面之中。
:before 和 :after 这两个伪元素,是在CSS2.1里新出现的。起初,伪元素的前缀使用的是单冒号语法,但随着Web的进化,在CSS3的规范里,伪元素的语法被修改成使用双冒号,成为::before ::after

23 li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

行框的排列会受到中间空白(回车空格)等的影响,因为空格也属于字符,这些空白也会被应用样式,占据空间,所以会有间隔,把字符大小设为0,就没有空格了。
解决方法:

可以将<li>代码全部写在一排
浮动li中float:left
在ul中用font-size:0(谷歌不支持);可以使用letter-space:-3px


24 .display:inline-block 什么时候会显示间隙?

有空格时候会有间隙 解决:移除空格
margin正值的时候 解决:margin使用负值
使用font-size时候 解决:font-size:0、letter-spacing、word-spacing


25.有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度

外层div使用position:relative;高度要求自适应的div使用position: absolute; top: 100px; bottom: 0; left: 0

26.上下margin重合的问题

在重合元素外包裹一层容器,并触发该容器生成一个BFC。例子:


<div class="aside"></div>
<div class="text">
    <div class="main"></div>
</div>
<!--下面是css代码-->
 .aside {
            margin-bottom: 100px;  
            width: 100px;
            height: 150px;
            background: #f66;
        }
        .main {
            margin-top: 100px;
            height: 200px;
            background: #fcc;
        }
         .text{
/*盒子main的外面包一个div,通过改变此div的属性使两个盒子分属于两个不同的BFC,以此来阻止margin重叠*/
            overflow: hidden;  //此时已经触发了BFC属性。
        }

 

27.float和position相同点和不同点

float和position相似点:

1、都是将元素浮动起来

2、元素一旦设置就与父元素没关系了 float和position

不同点:

1、position与top、left等配套使用

2、float位置移动通过margin、padding等实现

3、overflow和clear对position无效

4、布局通常使用float,而不是position

28.常见的浏览器兼容性问题。

       1、网页居中问题。问题症状:IE6下常规设置无法使页面居中。

              解决方案:body{text-align:center}

       2、某些浏览器不支持某些属性。问题症状:IE6下不支持min-width、max-height等属性。

              解决方案:具体情况具体分析

       3、png透明图片支持问题。问题症状:IE6下不支持透明图片。

              解决方案:js方法或css滤镜

       4、不同浏览器的标签默认的外边距和内边距不同。问题症状:不加样式控制的情况下,各自的margin 、padding、p等差异较大。

              解决方案:CSS里    *{margin:0; padding:0;}

       5、块属性标签float后,又有横行的margin情况下,在IE6显示margin比设置的大

              问题症状:常见症状是IE6中后面的一块被顶到下一行。

              解决方案:在float的标签样式控制中加入 display:inline;将其转化为行内属性;或使用hack方法

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值