CSS问题汇总

本文总结了CSS中的格式化上下文概念,包括BFC、IFC、FFC和GFC,强调了BFC的作用。此外,讨论了使元素水平垂直居中的多种方法,并对比了隐藏元素的display:none、visibility:hidden和opacity:0的区别。最后,提到了CSS选择器的优先级和多行文本溢出省略的实现,以及CSS阻塞与优化策略。
摘要由CSDN通过智能技术生成

1.格式化上下文是什么?

格式化上下文既Formatting Context,简称FC。指的是元素在页面中的渲染环境,它更像一个容器,决定了其与相邻元素,子元素之间的布局关系

通常格式化上下面分为以下四类

  • 块格式化上下文(BFC:Block Formatting Context);
  • 内联格式化上下文(IFC:Inline formatting context);
  • 弹性布局格式化上下文(FFC:Flex Formatting Context);
  • 网格布局格式化上下文(GFC:GridLayout Formatting Context)

以BFC为例,通常,BFC的元素具有以下几个特点

  • 包含内部浮动,让浮动的内容和周围的内容等高
  • 将元素放置在不同的BFC的元素中可以解决元素外边距重叠的问题
  • BFC的元素不会与浮动元素发生重叠
  • BFC是个独立的容器,内外元素互不影响

可以产生BFC的常见情况有以下几种

  • 根元素:<html>
  • 浮动元素:float 值不为 none 的
  • 绝对定位元素:position 值为 absolute 、fixed 的
  • overflow 值不为 visible 、clip 的块级元素
  • 弹性元素,网格元素:指直接父元素是display 的值为 flex、grid ,且自身不是flex、grid、table的元素

2.实现div水平垂直居中有哪几种方式?

布局分两种情况,一种是子元素宽高固定,另一种是宽高不定的情况。
宽高固定
父元素相对定位,子元素绝对定位,子元素可以通过设置left,top为50%,并设置margin-left,margin-top的值为子元素的宽高的一半即可实现居中;
父元素相对定位,子元素绝对定位,子元素可以使用calc方法动态计算left,top的值实现居中

宽高不定
父元素相对定位,子元素绝对定位,子元素可以使用transform:translate(-50%,-50%)实现居中。需要注意的是,这里的-50%是基于子元素的宽度进行计算的;
父元素相对定位,子元素绝对定位,子元素可以通过设置top,left,bottom,right的值为0,且 margin:0 auto;
④通过display:flex、grid、table实现居中;

参考资料:Centering in CSS: A Complete Guide

注意:能实现宽高不定的元素水平居中的方法,那么都可以实现以上两种情况的水平居中对齐

3.设置元素隐藏的方式有哪几种?它们之间都有哪些区别?

display: none
DOM 结构:Render Tree会过滤掉display:none 的元素,因此浏览器不会渲染此元素,体现在界面上就是不会占据任何的空间;
事件监听:无法进行 DOM 事件监听;
性能:动态改变此属性时会引起重排,性能较差;
继承:不会被子元素继承,毕竟子类也不会被渲染;
transition:transition 不支持 display

visibility: hidden
DOM 结构:元素会被渲染,且占据一定空间,只是在界面上不可见而已;
事件监听:无法进行 DOM 事件监听;
性 能:动态改变此属性时会引起重绘,性能一般;
继 承:会被子元素继承,子元素可以通过设置 visibility: visible; 来取消隐藏;
transition:transition 支持 visibility

opacity: 0
DOM 结构:设置为0,元素隐藏,且占据空间;
事件监听:可以进行 DOM 事件监听;
性 能:动态改变此属性时会引起重绘,由于will-change支持opacity属性,我们可以手动开启GPU硬件加速来创建新的Layer从而避免重绘操作,这样使用性能较好;
继 承:会被子元素继承,但是,子元素不能通过设置opacity: 1 来使其显示;
transition:transition 支持 opacity

4.CSS选择器的优先级是什么?

在css中优先级高的选择器所对应的样式会被渲染到视图上,而css的优先级是用来衡量CSS选择器有效性的一个指标。权重值比较是我们度量优先级的方法,常见的选择器权重值如下所示

选择器权重值
importantInfinity
行内样式1000
id选择器100
类选择器,伪类10
标签选择器,伪元素1
* 通配符选择器0

5.如何用CSS、JS实现多行文本溢出省略效果(考虑兼容性)?

经过网上查找资料和实践,这位朋友的方案比较可行:李斌的博客

6.CSS阻塞包括哪些?如何优化?

CSS的引用方式有三种方式,分别是:①link标签外部引入,②通过style标签嵌入html,③通过style标签属性定义的内联样式,这三种方式均不会阻塞DOM解析,但是外部引入的方式会阻塞浏览器渲染,而且也会阻塞后面js脚本的执行。

优化方式有以下几种方式

  • 可以合并多个CSS文件并压缩

  • 通过CDN节点提升加载速度

  • 优化CSS源代码的结构

7.CSS选择器的读取顺序?

从cssom tree的解析效率来看,肯定是优于从左向右的方式的。因此,在实现上是从右向左的方式进行解析的。

参考资料:


浏览器渲染详细过程:重绘、重排和 composite 只是冰山一角

高性能Web动画和渲染原理系列(3)——transform和opacity为什么高性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值