基础-必会知识(下)

2 基础-必会知识(下)

2.1 请问有哪些CSS浏览器兼容问题以及解决方案?

【考点映射】

  • CSS浏览器兼容问题

  • 兼容问题解决方案

【频率】★★★

【难度】☆

【参考答案】

目前,浏览器厂商众多,Chrome,Frirefox,Safari,Edge,IE6……对于同一段CSS代码,不同厂商、甚至同一厂商不同版本的解析效果极大可能不一致,其根本原因是浏览器内核不同,这就导致了页面显示效果不统一,产生了CSS兼容性问题

目前对兼容问题的解决方案:

  • 浏览器CSS样式初始化

在所有CSS开始前,对某些属性初始化,以防不同浏览器的显示效果不一样,通常不推荐一味地使用通配符统一初始化样式
*{
 margin: 0;
 padding: 0;
}
  • 浏览器私有属性

可直接在某个属性中额外添加浏览器私有写法,确保浏览器能识别该属性值,有两种开发思路,分别是渐近增强和优雅降级

渐进增强:先写某些特殊浏览器能识别的私有属性,再写通用写法确保大部分浏览器能正常显示

.transition {
-webkit-transform:rotate(-3deg); /*Chrome/Safari*/
-moz-transform:rotate(-3deg); /*Firefox*/
-ms-transform:rotate(-3deg); /*IE*/
-o-transform:rotate(-3deg); /*Opera*/
transform:rotate(-3deg); 
}

优雅降级:先确保大部分浏览器能正常显示,再写某些特殊浏览器能识别的私有属性

.transition {
transform:rotate(-3deg); 
-webkit-transform:rotate(-3deg); /*Chrome/Safari*/
-moz-transform:rotate(-3deg); /*Firefox*/
-ms-transform:rotate(-3deg); /*IE*/
-o-transform:rotate(-3deg); /*Opera*/
}
  • CSS hack语法(一般情况下,尽量避免使用CSS hack,过多滥用会造成html文档混乱,不易管理与维护)

  1. 条件hack,IE浏览器专有的hack方式,微软官方推荐

<!--[if IE]> 	
这段文字只在IE浏览器显示 	
<![endif]-->
<!--[if gte IE 6]> 	
这段文字只在IE6以上(包括)版本IE浏览器显示 	
<![endif]-->
    2. 属性级hack, CSS样式属性名前加上一些只有特定浏览器才能识别的hack前缀,以达到预期的页面展现效果
.test {
  color: red; /* All browsers */
  *color: blue;  /* IE7,IE6 */
  _color: skyblue;  /* IE6 */
}
    3. 选择符级hack,在CSS选择器前加上一些只有某些特定浏览器才能识别的前缀
*html /* *前缀只对IE6生效*/
*+html /* *+前缀只对IE7生效*/
@media screen\9{...} /*只对IE6/7生效*/
@media \0screen {body { background: red; }} /*只对IE8有效*/
@media \0screen\,screen\9{body { background: blue; }} /*只对IE6/7/8有效*/
@media screen\0 {body { background: green; }} /*只对IE8/9/10有效*/
@media screen and (min-width:0\0) {body { background: gray; }} /*只对IE9/10有效*/ 
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} /*只对IE10有效*/
  • 自动化插件

在解析CSS文件时,插件会自动添加浏览器前缀至CSS代码中,如Autoprefixer

2.2 请问Flex的常见写法:flex:1表达什么含义?

【考点映射】

  • Flex缩写

  • Flex实际应用

【频率】★★★★

【难度】☆

【参考答案】

虽说Flex具有众多属性,但在实际开发常简写为:flex:1,再结合display:flex,就能轻松打造出自适应布局,这也是Flex布局最大的优势。实际上flex为:flex-grow flex-shrink flex-basic三者的缩写。

flex-grow:定义在分配多余空间时,盒子的放大比例,默认为0,即存在剩余空间,也不放大

flex-shrink:定义在分配多余空间时,盒子的缩小比例(多余空间可能是负值),默认为1,即空间不足将缩小

flex-basis:定义在分配多余空间之前,盒子占据的主轴空间(可理解为基准值),通常根据该属性计算多余空间,默认为auto,即盒子自身大小

flex取值不同,空间分配计算值不同,有以下几种常见情况:

flex-grow

flex-shrink

flex-basis

flex: 2 3 23px

2

3

23px

当flex有三个值时,则依次分配给flex-grow、flex-shrink、flex-basic

flex: none

0

0

auto

当 flex 为none时,则计算值为0 0 auto

flex: auto

1

1

auto

当 flex 为auto时,则计算值为1 1 auto

flex: 1

1

1

0%

当 flex 为一个非负数字,该数字为 flex-grow 值,flex-shrink 取 1,flex-basis 取 0%

flex: 0%

1

1

0%

flex 为一个长度或百分比,该数字为 flex-basis 值,flex-grow 取 1,flex-shrink 取 1

flex: 23px

1

1

23px

flex: 2 3

2

3

0%

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端岗面试求职真题解析 文章被收录于专栏

前端岗位面试求职攻略及真题解析~~

全部评论

相关推荐

10-24 11:10
山西大学 Java
若梦难了:哥们,面试挂是很正常的。我大中厂终面挂,加起来快10次了,继续努力吧。
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务