Bootstrap

前端面试题(CSS篇八)

一、letter-spacing 与字符间距?

letter-spacing可以用来控制字符之间的间距,这里说的“字符”包括英文字母、汉字以及空格等。

letter-spacing具有以下一些特性。

(1)继承性。
(2)默认值是normal而不是0。虽然说正常情况下,normal的计算值就是0,但两者还是有差别的,在有些场景下,letter-spacing会调整normal的计算值以实现更好的版面布局。
(3)支持负值,且值足够大的时候,会让字符形成重叠,甚至反向排列。
(4)和text-indent属性一样,无论值多大或多小,第一行一定会保留至少一个字符。
(5)支持小数值,即使0.1px也是支持的。
(6)暂不支持百分比值。

二、常见的元素隐藏方式?

(1)使用 display:none;隐藏元素,渲染树不会包含该渲染对象,因此该元素不会在页面中占据位置,也不会响应绑定的监听事件。

(2)使用 visibility:hidden;隐藏元素。元素在页面中仍占据空间,但是不会响应绑定的监听事件。

(3)使用 opacity:0;将元素的透明度设置为 0,以此来实现元素的隐藏。元素在页面中仍然占据空间,并且能够响应元素绑定的监听事件。

(4)通过使用绝对定位将元素移除可视区域内,以此来实现元素的隐藏。

(5)通过 z-index 负值,来使其他元素遮盖住该元素,以此来实现隐藏。

(6)通过 clip/clip-path 元素裁剪的方法来实现元素的隐藏,这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。

-(7)通过 transform:scale(0,0)来将元素缩放为 0,以此来实现元素的隐藏。这种方法下,元素仍在页面中占据位置,但是不会响应绑定的监听事件。

资料参考:

《CSS 隐藏元素的八种方法》icon-default.png?t=N7T8https://juejin.im/post/584b645a128fe10058a0d625#heading-2

三、实现一个三角形?

/*三角形的实现原理是利用了元素边框连接处的等分原理。*/
.triangle {
  width: 0;
  height: 0;
  border-width: 100px;
  border-style: solid;
  border-color: tomato transparent transparent transparent;
}

四、隐藏元素的 background-image 到底加不加载?

相关知识点:

根据测试,一个元素如果display计算值为none,在IE浏览器下(IE8~IE11,更高版本不确定)依然会发送图片请求,Firefox浏览器不会,至于Chrome和Safari浏览器则似乎更加智能一点:如果隐藏元素同时又设置了background-image,则图片依然会去加载;如果是父元素的display计算值为none,则背景图不会请求,此时浏览器或许放心地认为这个背景图暂时是不会使用的。

如果不是background-image,而是<img>元素,则设置display:none在所有浏览器下依旧都会请求图片资源。

还需要注意的是如果设置的样式没有对应的元素,则background-image也不会加载。hover情况下的background-image,在触发时加载。

回答:

(1)元素的背景图片

元素本身设置 display:none,会请求图片 -父级元素设置 display:none,不会请求图片 -样式没有元素使用,不会请求 -:hover 样式下,触发时请求

(2)img 标签图片任何情况下都会请求图片

资料参考:

《CSS 控制前端图片 HTTP 请求的各种情况示例》icon-default.png?t=N7T8https://www.jb51.net/css/469033.html

五、如何实现单行/多行文本溢出的省略(...)?

/*单行文本溢出*/
p { 
     overflow: hidden;  
     text-overflow: ellipsis; 
     white-space: nowrap;
}​
/*多行文本溢出*/
p { 
     position: relative;  
     line-height: 1.5em;  /*高度为需要显示的行数*行高,比如这里我们显示两行,则为3*/  
     height: 3em;  
     overflow: hidden;
}
​p:after { 
     content: '...';  
     position: absolute; 
     bottom: 0;  right: 0;  
     background-color: #fff;
}

;