当前位置: 首页 > 科技观察

10道CSS高频面试题,你知道吗?

时间:2023-03-12 07:17:07 科技观察

1。什么是BFC机制BFC(BlockFormattingContext),块级格式化上下文,是一个独立的渲染区域,将BFC内部元素与外部元素隔离开来,使得内部元素和外部元素的定位不会相互冲突独家影响力。触发条件(以下任意一项)float的值不是noneoverflow的值是不可见的display的值是table-cell、tabble-caption和inline-block的其中之一position的值不是static或anyreleative之一IE下Layout可以通过zoom触发BFC布局和普通文档流布局:1.区别:BFC布局规则:1.浮动元素的高度会由parent计算(父元素触发BFC)2.非-浮动元素不会覆盖浮动元素的位置(非浮动元素触发BFC)3.margin不会传递给父级(父级触发BFC)4.相邻两个元素的上下边距属于同一BFC会重叠1.普通文档流布局:浮动元素的高度不会被父级计算。2、非浮动元素会覆盖浮动元素的位置。3.margin会传递给父元素。4.两个相邻元素上方和下方的外边距会重叠。开发中的应用防止marginOverlap可以包含浮动元素——clearinternalfloating(清除浮动的原理是两个div都在同一个BFC区域)自适应双列布局可以防止元素被浮动元素覆盖2.NewCSS3中的选择器和属性只是在这里列出。具体用法可以看我这篇关于css3新选择器和属性的文章。属性选择器属性选择器含义描述E[att^="val"]属性att的值以"val"元素开头E[att$="val"]属性att的值以"val"元素结尾E[att*="val"]属性att的值包含元素结构"val"字符串伪类选择器选择器含义说明E:root匹配文档的根元素,对于HTML文档,是HTML元素E:nth-child(n)匹配其父元素的第n个子元素,第一个数为1E:nth-last-child(n)匹配其父元素的最后第n个子元素,第一个数为1E:nth-of-type(n)类似于:nth-child(),但只匹配标签相同的元素E:nth-last-of-type(n)类似于:nth-last-child(),但只匹配相同类型标签元素E:last-child匹配父元素的最后一个子元素,相当于:nth-last-child(1)E:first-of-type匹配下同一标签的第一个子元素父元素,等价于:nth-of-type(1)E:last-of-type匹配父元素下使用相同标签的最后一个子元素,等价于:nth-last-of-type(1)E:only-child匹配only父元素下的子元素,相当于:first-child:last-child或:nth-child(1):nth-last-child(1)E:only-of-type匹配父元素下唯一使用相同标签的子元素,相当于:first-of-type:last-of-type或:nth-of-type(1):nth-last-of-type(1)E:empty匹配不包含任何子元素的元素。请注意,文本节点也被视为子元素。CSS3新属性属性说明兼容transition设置transition效果transform变换效果(移动、缩放、旋转、拉长或拉伸)animation动画box-shadow阴影效果FF3.5、Safari4、Chrome3text-shadow文字阴影FF3.5、Opera10,Safari4,Chrome3border-colors为边框设置多种颜色FF3+boder-image图片边框FF3.5,Safari4,Chrome3text-overflow文本截断IE6+,Safari4,Chrome3,Opera10word-wrap自动换行IE6+,FF3.5,Safari4,Chrome3border-radius圆角边框FF3+??,Safari4,Chrome3opacityopacityallbox-sizing控制框模型合成模式FF3+,Opera10,Safari4、Chrome3outlineFF3+、safari4、chrome3、opera10background-size没有指定背景图片的大小safari4、chrome3、opera10background-origin指定背景图片从哪里开始显示safari4、chrome3、FF3+??background-clip指定从哪里开始切割背景图片safari4、chrome3rgba根据r、g、b三个颜色通道设置颜色值,通过asafari设置透明度4、chrome3、FF3、opera103.居中布局水平居中内联元素:text-align:center块级元素:margin:0auto绝对定位和移动:absolute+transform绝对定位和负边距:absolute+margin弹性布局:flex+justify-content:center垂直居中子元素为单行文本:line-height:heightabsolute+transformflex+align-items:centertable:display:table-cell;vertical-align:middle使用position和top和negativemargin水平和垂直居中1.已知元素宽高:绝对定位+margin:auto:div{width:200px;height:200px;background:green;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto;}2.已知元素宽高:绝对定位+负margindiv{width:200px;height:200px;background:green;position:absolute;left:0;top:0;bottom:0;right:0;margin:auto;}3.absolute+transformdiv{width:200px;height:200px;background:green;position:absolute;left:50%;/*Position50%ofparent*/top:50%;transform:translate(-50%,-50%);/*Own50%*/}4.flex+justify-content+align-items.box{height:600px;display:flex;justify-content:center;//子元素水平居中align-items:center;//子元素垂直居中/*aa只需要三句即可实现水平垂直居中带变量宽度和高度*/}.box>div{background:green;width:200px;height:200px;}4.清除浮动的方法有哪些,它们的优缺点是什么?Usetheemptyelementwithclearattribute在浮动元素后使用一个空元素,如

,在CSS中赋值.clear{clear:both;}属性来清除浮动.您还可以使用进行清理。优点:简单,代码量少,兼容性好缺点:加入非语义的html元素不利于代码语义化,后期维护成本高。使用css的overflow属性添加overflow:hidden;或溢出:自动;float可以清除,在IE6中需要触发hasLayout,比如为父元素设置容器的宽高或者设置zoom:1。添加overflow属性后,浮动元素回到容器层,撑起容器高度,达到清理浮动的效果。优点:简单,代码少,浏览器支持好缺点:不能和position结合使用,因为多余的size会被隐藏overflow:hidden使用CSS:after伪元素结合:after伪元素(注意这个不是伪类,而是伪元素,表示一个元素之后最近的元素)和IEhack,可以完美兼容目前主流浏览器,这里的IEhack指的是触发hasLayout。在浮动元素的容器中添加一个clearfix的类,然后在该类中添加一个:after伪元素,实现在元素末尾添加一个不可见的块元素(Blockelement)来清除浮动。添加一个不可见的空格“020”或点“.”通过CSS伪元素在容器内部元素的末尾,赋值clear属性清除浮动。需要注意的是,对于IE6和IE7浏览器,添加一个zoom:1;到clearfix类来触发haslayout。优点:浏览器支持好,不易出现奇怪问题(目前:大网站都用,如:腾讯、网易、新浪等)缺点:代码多,必须两行代码结合使用,使得主流浏览器支持设置父元素的高度简单,代码少,容易掌握缺点:只适用于固定高度的布局5.纯CSS创建三角形的原理是什么在写三角形之前,我就直接背了代码,没去探究原因,我也没有,直到有一次面试,面试官让我讲讲css中创建三角形的原理,我……回来就赶紧看了资料。接下来我把当时我理解的过程列一下:1.写一个我们最熟悉的边框应用.box{width:100px;height:100px;border:3pxsolid;border-color:#1b93fb#1bfb24#efad48#ef4848;}效果如下:2、接下来我们增加边框值.box{width:100px;height:100px;border:50pxsolid;border-color:#1b93fb#1bfb24#efad48#ef4848;}就是不难发现边框渲染不是正方形而是梯形。3.当增加border的基础上,此时我们将box的width和height改为0,会产生什么效果!.box{width:0px;height:0px;border:50pxsolid;border-color:#1b93fb#1bfb24#efad48#ef4848;}四个三角形组成的矩形呈现在我们眼前。如果我们只想要一个三角形,我们能想象让其他三个不可见吗?4.设置透明度隐藏三个三角形。box{width:0px;height:0px;border:50pxsolid;border-color:transparenttransparenttransparent#ef4848;}三角形就这样出来了,很简单,当然我们也可以用逆向思维来写这个效果,就是先把所有的边框设置成Transparent,然后在哪边设置你需要的颜色,效果是一样的。box{width:0px;height:0px;border:50pxsolidtransparent;border-left:50pxsolid#ef4848;}这样给面试官解释一下应该问题不大,重重点是了解border的应用6.三栏布局的实现方法有哪些,分别对三栏布局进行说明。即左右模块宽度固定,中间模块自适应浏览器变化。最终你要完成的效果如下图所示:下面列出了四种实现方式,开发时可以根据自己的实际需要选择适合自己的方式:FlexLayout1
2
3
简单实用,是现在流行的方案,但需要考虑浏览器兼容性。绝对定位布局123这个方案也简单实用,可以先放元素,让主要内容先加载!双飞翼布局<分区ass="main">圣杯布局圣杯布局和双飞翼布局问题的解决方法和前半部分是一样的,就是三列都浮动,只是左右两列加了负边距使它们与中间的列div对齐,形成三列布局七。css3实现0.5px的细线八。link和@importaffiliation和@import的区别在于CSS提供的语法规则,它只有导入样式表的功能;link是HTML提供的标签,它不仅可以加载CSS文件,还可以定义RSS、rel连接属性等。2.加载顺序的区别加载页面时,link标签引入的CSS是同时加载的;@import引入的CSS将在页面加载后加载。3.兼容性差异@import是CSS2.1特有的语法,所以只能在IE5+下识别;link标签是一个HTML元素,所以不存在兼容性问题。4、DOM可控性差异可以通过JS操作DOM,插入链接标签改变样式;由于DOM方法是基于文档的,因此不能使用@import来插入样式。css部分整理到这里。小伙伴们,有什么面试中的共同遭遇,可以在评论区给我留言。有时间我会整理一下。IT(踢)就是大家,方便你我。为什么开发时需要初始化css样式?因为浏览器兼容性问题,不同的浏览器对一些标签的默认值不同。如果不对CSS进行初始化,浏览器之间的页面显示往往会存在差异。10、CSS优化和性能提升的方法有哪些?尝试将样式写在单独的css文件中,并在head元素中引用它。把代码写成一个单独的css文件有几个好处:1.内容和样式分离,便于管理和维护2.减少页面大小3.CSS文件可以缓存和复用,降低维护成本。不要使用@import并避免使用复杂的选择器。层级越少越好,建议选择器的嵌套不要超过三层,如:简化页面样式文件,去掉不用的样式,使用CSS继承减少代码量来避免!重要的,你可以选择其他选择器