作者:CavsZhouyou
https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/master/Css/Css.md
本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出!
1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?[1]
2.CSS 选择符有哪些?[2]
3.::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用。[3]
4.伪类与伪元素的区别[4]
5.CSS 中哪些属性可以继承?[5]
6.CSS 优先级算法如何计算?[6]
7.关于伪类 LVHA 的解释?[7]
8.CSS3 新增伪类有哪些?[8]
9.如何居中 div?[9]
10.display 有哪些值?说明他们的作用。[10]
11.position 的值 relative 和 absolute 定位原点是?[11]
12.CSS3 有哪些新特性?(根据项目回答)[12]
13.请解释一下 CSS3 的 Flexbox(弹性盒布局模型),以及适用场景?[13]
14.用纯 CSS 创建一个三角形的原理是什么?[14]
15.一个满屏品字布局如何设计?[15]
16.CSS 多列等高如何实现?[16]
17.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用 hack 的技巧?[17]
18.li 与 li 之间有看不见的空白间隔是什么原因引起的?有什么解决办法?[18]
19.为什么要初始化 CSS 样式?[19]
20.什么是包含块,对于包含块的理解?[20]
21.CSS 里的 visibility 属性有个 collapse 属性值是干嘛用的?在不同浏览器下以后什么区别?[21]
22.width:auto 和 width:100\x 的区别[22]
23.绝对定位元素与非绝对定位元素的百分比计算的区别[23]
24.简单介绍使用图片 base64 编码的优点和缺点。[24]
25.'display'、'position'和'float'的相互关系?[25]
26.margin 重叠问题的理解。[26]
27.对 BFC 规范(块级格式化上下文:blockformattingcontext)的理解?[27]
28.IFC 是什么?[28]
29.请解释一下为什么需要清除浮动?清除浮动的方式[29]
30.使用 clear 属性清除浮动的原理?[30]
31.zoom:1 的清除浮动原理?[31]
32.移动端的布局用过媒体查询吗?[32]
33.使用 CSS 预处理器吗?喜欢哪个?[33]
34.CSS 优化、提高性能的方法有哪些?[34]
35.浏览器是怎样解析 CSS 选择器的?[35]
36.在网页中应该使用奇数还是偶数的字体?为什么呢?[36]
37.margin 和 padding 分别适合什么场景使用?[37]
38.抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题][38]
39.简单说一下 css3 的 all 属性。[39]
40.为什么不建议使用通配符初始化 css 样式。[40]
41.absolute 的 containingblock(包含块)计算方式跟正常流有什么不同?[41]
42.对于 hasLayout 的理解?[42]
43.元素竖向的百分比设定是相对于容器的高度吗?[43]
44.全屏滚动的原理是什么?用到了 CSS 的哪些属性?(待深入实践)[44]
45.什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?(待深入了解)[45]
46.视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)[46]
47.如何修改 chrome 记住密码后自动填充表单的黄色背景?[47]
48.怎么让 Chrome 支持小于 12px 的文字?[48]
49.让页面里的字体变清晰,变细用 CSS 怎么做?[49]
50.font-style 属性中 italic 和 oblique 的区别?[50]
51.设备像素、css 像素、设备独立像素、dpr、ppi 之间的区别?[51]
52.layoutviewport、visualviewport 和 idealviewport 的区别?[52]
相关知识点:
(1)有两种盒子模型:IE盒模型(border-box)、W3C标准盒模型(content-box) (2)盒模型:分为内容(content)、填充(padding)、边界(margin)、边框(border)四个部分 IE盒模型和W3C标准盒模型的区别: (1)W3C标准盒模型:属性width,height只包含内容content,不包含border和padding (2)IE盒模型:属性width,height包含content、border和padding,指的是content +padding+border。 在ie8+浏览器中使用哪个盒模型可以由box-sizing(CSS新增的属性)控制,默认值为content-box,即标准盒模型; 如果将box-sizing设为border-box则用的是IE盒模型。如果在ie6,7,8中DOCTYPE缺失会将盒子模型解释为IE 盒子模型。若在页面中声明了DOCTYPE类型,所有的浏览器都会把盒模型解释为W3C盒模型。回答:
盒模型都是由四个部分组成的,分别是margin、border、padding和content。 标准盒模型和IE盒模型的区别在于设置width和height时,所对应的范围不同。标准盒模型的width和height属性的 范围只包含了content,而IE盒模型的width和height属性的范围包含了border、padding和content。 一般来说,我们可以通过修改元素的box-sizing属性来改变元素的盒模型。详细的资料可以参考:《CSS 盒模型详解》[53]
相关知识点:
单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3伪元素。(伪元素由双冒号和伪元素名称组成) 双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法, 比如:first-line、:first-letter、:before、:after等, 而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。 想让插入的内容出现在其它内容前,使用::before,否者,使用::after; 在代码顺序上,::after生成的内容也比::before生成的内容靠后。 如果按堆栈视角,::after生成的内容会在::before生成的内容之上。回答:
在css3中使用单冒号来表示伪类,用双冒号来表示伪元素。但是为了兼容已有的伪元素的写法,在一些浏览器中也可以使用单冒号 来表示伪元素。 伪类一般匹配的是元素的一些特殊状态,如hover、link等,而伪元素一般匹配的特殊的位置,比如after、before等。详细资料可以参考:《总结伪类与伪元素》[54]
相关资料:
每个CSS属性定义的概述都指出了这个属性是默认继承的,还是默认不继承的。这决定了当你没有为元素的属性指定值时该如何计算 值。 当元素的一个继承属性没有指定值时,则取父元素的同属性的计算值。只有文档根元素取该属性的概述中给定的初始值(这里的意思应 该是在该属性本身的定义中的默认值)。 当元素的一个非继承属性(在Mozilla code里有时称之为reset property)没有指定值时,则取属性的初始值initial v alue(该值在该属性的概述里被指定)。 有继承性的属性: (1)字体系列属性 font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust (2)文本系列属性 text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、 text-transform、direction、color (3)表格布局属性 caption-side border-collapse empty-cells (4)列表属性 list-style-type、list-style-image、list-style-position、list-style (5)光标属性 cursor (6)元素可见性 visibility (7)还有一些不常用的;speak,page,设置嵌套引用的引号类型quotes等属性 注意:当一个属性不是继承属性时,可以使用inherit关键字指定一个属性应从父元素继承它的值,inherit关键字用于显式地 指定继承性,可用于任何继承性/非继承性属性。回答:
每一个属性在定义中都给出了这个属性是否具有继承性,一个具有继承性的属性会在没有指定值的时候,会使用父元素的同属性的值 来作为自己的值。 一般具有继承性的属性有,字体相关的属性,font-size和font-weight等。文本相关的属性,color和text-align等。 表格的一些布局属性、列表属性如list-style等。还有光标属性cursor、元素可见性visibility。 当一个属性不是继承属性的时候,我们也可以通过将它的值设置为inherit来使它从父元素那获取同名的属性值来继承。详细的资料可以参考:《继承属性》[55]《CSS 有哪些属性可以继承?》[56]
相关知识点:
CSS的优先级是根据样式声明的特殊性值来判断的。 选择器的特殊性值分为四个等级,如下: (1)标签内选择符x,0,0,0 (2)ID选择符0,x,0,0 (3)class选择符/属性选择符/伪类选择符 0,0,x,0 (4)元素和伪元素选择符0,0,0,x 计算方法: (1)每个等级的初始值为0 (2)每个等级的叠加为选择器出现的次数相加 (3)不可进位,比如0,99,99,99 (4)依次表示为:0,0,0,0 (5)每个等级计数之间没关联 (6)等级判断从左向右,如果某一位数值相同,则判断下一位数值 (7)如果两个优先级相同,则最后出现的优先级高,!important也适用 (8)通配符选择器的特殊性值为:0,0,0,0 (9)继承样式优先级最低,通配符样式优先级高于继承样式 (10)!important(权重),它没有特殊性值,但它的优先级是最高的,为了方便记忆,可以认为它的特殊性值为1,0,0,0,0。 计算实例: (1)#demo a{color: orange;}/*特殊性值:0,1,0,1*/ (2)div#demo a{color: red;}/*特殊性值:0,1,0,2*/ 注意: (1)样式应用时,css会先查看规则的权重(!important),加了权重的优先级最高,当权重相同的时候,会比较规则的特殊性。 (2)特殊性值越大的声明优先级越高。 (3)相同特殊性值的声明,根据样式引入的顺序,后声明的规则优先级高(距离元素出现最近的) (4) 部分浏览器由于字节溢出问题出现的进位表现不做考虑回答:
判断优先级时,首先我们会判断一条属性声明是否有权重,也就是是否在声明后面加上了!important。一条声明如果加上了权重, 那么它的优先级就是最高的,前提是它之后不再出现相同权重的声明。如果权重相同,我们则需要去比较匹配规则的特殊性。 一条匹配规则一般由多个选择器组成,一条规则的特殊性由组成它的选择器的特殊性累加而成。选择器的特殊性可以分为四个等级, 第一个等级是行内样式,为1000,第二个等级是id选择器,为0100,第三个等级是类选择器、伪类选择器和属性选择器,为0010, 第四个等级是元素选择器和伪元素选择器,为0001。规则中每出现一个选择器,就将它的特殊性进行叠加,这个叠加只限于对应的等 级的叠加,不会产生进位。选择器特殊性值的比较是从左向右排序的,也就是说以1开头的特殊性值比所有以0开头的特殊性值要大。 比如说特殊性值为1000的的规则优先级就要比特殊性值为0999的规则高。如果两个规则的特殊性值相等的时候,那么就会根据它们引 入的顺序,后出现的规则的优先级最高。对于组合声明的特殊性值计算可以参考:《CSS 优先级计算及应用》[57]《CSS 优先级计算规则》[58]《有趣:256 个 class 选择器可以干掉 1 个 id 选择器》[59]
详细的资料可以参考:《CSS3 新特性总结(伪类)》[60]《浅谈 CSS 伪类和伪元素及 CSS3 新增伪类》[61]
-水平居中:给 div 设置一个宽度,然后添加 margin:0 auto 属性
div { width: 200px; margin: 0 auto; }-水平居中,利用 text-align:center 实现
.container { background: rgba(0, 0, 0, 0.5); text-align: center; font-size: 0; } .box { display: inline-block; width: 500px; height: 400px; background-color: pink; }-让绝对定位的 div 居中
div { position: absolute; width: 300px; height: 300px; margin: auto; top: 0; left: 0; bottom: 0; right: 0; background-color: pink; /*方便看效果*/ }-水平垂直居中一
/*确定容器的宽高宽500高300的层设置层的外边距div{*/ position: absolute;/*绝对定位*/ width: 500px; height: 300px; top: 50%; left: 50%; margin: -150px00-250px;/*外边距为自身宽高的一半*/ background-color: pink;/*方便看效果*/ }-水平垂直居中二
/*未知容器的宽高,利用`transform`属性*/ div { position: absolute; /*相对定位或绝对定位均可*/ width: 500px; height: 300px; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: pink; /*方便看效果*/ }-水平垂直居中三
/*利用flex布局实际使用时应考虑兼容性*/ .container { display: flex; align-items: center; /*垂直居中*/ justify-content: center; /*水平居中*/ } .containerdiv { width: 100px; height: 100px; background-color: pink; /*方便看效果*/ }-水平垂直居中四
/*利用text-align:center和vertical-align:middle属性*/ .container { position: fixed; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0, 0, 0, 0.5); text-align: center; font-size: 0; white-space: nowrap; overflow: auto; } .container::after { content: ''; display: inline-block; height: 100%; vertical-align: middle; } .box { display: inline-block; width: 500px; height: 400px; background-color: pink; white-space: normal; vertical-align: middle; }回答:
一般常见的几种居中的方法有: 对于宽高固定的元素 (1)我们可以利用margin:0 auto来实现元素的水平居中。 (2)利用绝对定位,设置四个方向的值都为0,并将margin设置为auto,由于宽高固定,因此对应方向实现平分,可以实现水 平和垂直方向上的居中。 (3)利用绝对定位,先将元素的左上角通过top:50%和left:50%定位到页面的中心,然后再通过margin负值来调整元素 的中心点到页面的中心。 (4)利用绝对定位,先将元素的左上角通过top:50%和left:50%定位到页面的中心,然后再通过translate来调整元素 的中心点到页面的中心。 (5)使用flex布局,通过align-items:center和justify-content:center设置容器的垂直和水平方向上为居中对 齐,然后它的子元素也可以实现垂直和水平的居中。 对于宽高不定的元素,上面的后面两种方法,可以实现元素的垂直和水平的居中。详细资料可以参考:《CSS display 属性》[62]
相关知识点:
absolute 生成绝对定位的元素,相对于值不为static的第一个父元素的padding box进行定位,也可以理解为离自己这一级元素最近的 一级position设置为absolute或者relative的父元素的padding box的左上角为原点的。 fixed(老IE不支持) 生成绝对定位的元素,相对于浏览器窗口进行定位。 relative 生成相对定位的元素,相对于其元素本身所在正常位置进行定位。 static 默认值。没有定位,元素出现在正常的流中(忽略top,bottom,left,right,z-index声明)。 inherit 规定从父元素继承position属性的值。回答:
relative定位的元素,是相对于元素本身的正常位置来进行定位的。 absolute定位的元素,是相对于它的第一个position值不为static的祖先元素的padding box来进行定位的。这句话 我们可以这样来理解,我们首先需要找到绝对定位元素的一个position的值不为static的祖先元素,然后相对于这个祖先元 素的padding box来定位,也就是说在计算定位距离的时候,padding的值也要算进去。相关知识点:
Flex是FlexibleBox的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局。行内元素也可以使用Flex布局。注意,设为Flex布局以后,子元素的float、cl ear和vertical-align属性将失效。 采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为Flex 项目(flex item),简称"项目"。 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis),项目默认沿主轴排列。 以下6个属性设置在容器上。 flex-direction属性决定主轴的方向(即项目的排列方向)。 flex-wrap属性定义,如果一条轴线排不下,如何换行。 flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。 justify-content属性定义了项目在主轴上的对齐方式。 align-items属性定义项目在交叉轴上如何对齐。 align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。 以下6个属性设置在项目上。 order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。 flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。 flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。 flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间。它的默认 值为auto,即项目的本来大小。 flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为0 1 auto。 align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父 元素的align-items属性,如果没有父元素,则等同于stretch。回答:
flex布局是CSS3新增的一种布局方式,我们可以通过将一个元素的display属性值设置为flex从而使它成为一个flex 容器,它的所有子元素都会成为它的项目。 一个容器默认有两条轴,一个是水平的主轴,一个是与主轴垂直的交叉轴。我们可以使用flex-direction来指定主轴的方向。 我们可以使用justify-content来指定元素在主轴上的排列方式,使用align-items来指定元素在交叉轴上的排列方式。还 可以使用flex-wrap来规定当一行排列不下时的换行方式。 对于容器中的项目,我们可以使用order属性来指定项目的排列顺序,还可以使用flex-grow来指定当排列空间有剩余的时候, 项目的放大比例。还可以使用flex-shrink来指定当排列空间不足时,项目的缩小比例。详细资料可以参考:《Flex 布局教程:语法篇》[63]《Flex 布局教程:实例篇》[64]
详细资料可以参考:《前端应该掌握的 CSS 实现多列等高布局》[65]《CSS:多列等高布局》[66]
详细资料可以参考:《li 与 li 之间有看不见的空白间隔是什么原因引起的?》[67]
详细资料可以参考:《CSS 里的 visibility 属性有个鲜为人知的属性值:collapse》[68]
详细资料可以参考:《玩转图片 base64 编码》[69]《前端开发中,使用 base64 图片的弊端是什么?》[70]《小 tip:base64:URL 背景图片与 web 页面性能优化》[71]
详细资料可以参考:《position 跟 display、margincollapse、overflow、float 这些特性相互叠加后会怎么样?》[72]
相关知识点:
块级元素的上外边距(margin-top)与下外边距(margin-bottom)有时会合并为单个外边距,这样的现象称为“margin合 并”。 产生折叠的必备条件:margin必须是邻接的! 而根据w3c规范,两个margin是邻接的必须满足以下条件: •必须是处于常规文档流(非float和绝对定位)的块级盒子,并且处于同一个BFC当中。 •没有线盒,没有空隙,没有padding和border将他们分隔开 •都属于垂直方向上相邻的外边距,可以是下面任意一种情况 •元素的margin-top与其第一个常规文档流的子元素的margin-top •元素的margin-bottom与其下一个常规文档流的兄弟元素的margin-top •height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom •高度为0并且最小高度也为0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top 和margin-bottom margin合并的3种场景: (1)相邻兄弟元素margin合并。 解决办法: •设置块状格式化上下文元素(BFC) (2)父级和第一个/最后一个子元素的margin合并。 解决办法: 对于margin-top合并,可以进行如下操作(满足一个条件即可): •父元素设置为块状格式化上下文元素; •父元素设置border-top值; •父元素设置padding-top值; •父元素和第一个子元素之间添加内联元素进行分隔。 对于margin-bottom合并,可以进行如下操作(满足一个条件即可): •父元素设置为块状格式化上下文元素; •父元素设置border-bottom值; •父元素设置padding-bottom值; •父元素和最后一个子元素之间添加内联元素进行分隔; •父元素设置height、min-height或max-height。 (3)空块级元素的margin合并。 解决办法: •设置垂直方向的border; •设置垂直方向的padding; •里面添加内联元素(直接Space键空格是没用的); •设置height或者min-height。回答:
margin重叠指的是在垂直方向上,两个相邻元素的margin发生重叠的情况。 一般来说可以分为四种情形: 第一种是相邻兄弟元素的marin-bottom和margin-top的值发生重叠。这种情况下我们可以通过设置其中一个元素为BFC 来解决。 第二种是父元素的margin-top和子元素的margin-top发生重叠。它们发生重叠是因为它们是相邻的,所以我们可以通过这 一点来解决这个问题。我们可以为父元素设置border-top、padding-top值来分隔它们,当然我们也可以将父元素设置为BFC 来解决。 第三种是高度为auto的父元素的margin-bottom和子元素的margin-bottom发生重叠。它们发生重叠一个是因为它们相 邻,一个是因为父元素的高度不固定。因此我们可以为父元素设置border-bottom、padding-bottom来分隔它们,也可以为 父元素设置一个高度,max-height和min-height也能解决这个问题。当然将父元素设置为BFC是最简单的方法。 第四种情况,是没有内容的元素,自身的margin-top和margin-bottom发生的重叠。我们可以通过为其设置border、pa dding或者高度来解决这个问题。相关知识点:
块格式化上下文(Block Formatting Context,BFC)是Web页面的可视化CSS渲染的一部分,是布局过程中生成块级盒 子的区域,也是浮动元素与其他元素的交互限定区域。 通俗来讲 •BFC是一个独立的布局环境,可以理解为一个容器,在这个容器中按照一定规则进行物品摆放,并且不会影响其它环境中的物品。 •如果一个元素符合触发BFC的条件,则BFC中的元素布局不受外部影响。 创建BFC (1)根元素或包含根元素的元素 (2)浮动元素float=left|right或inherit(≠none) (3)绝对定位元素position=absolute或fixed (4)display=inline-block|flex|inline-flex|table-cell或table-caption (5)overflow=hidden|auto或scroll(≠visible)回答:
BFC指的是块级格式化上下文,一个元素形成了BFC之后,那么它内部元素产生的布局不会影响到外部元素,外部元素的布局也 不会影响到BFC中的内部元素。一个BFC就像是一个隔离区域,和其他区域互不影响。 一般来说根元素是一个BFC区域,浮动和绝对定位的元素也会形成BFC,display属性的值为inline-block、flex这些 属性时也会创建BFC。还有就是元素的overflow的值不为visible时都会创建BFC。详细资料可以参考:《深入理解 BFC 和 MarginCollapse》[73]《前端面试题-BFC(块格式化上下文)》[74]
详细资料可以参考:《[译]:BFC 与 IFC》[75]《BFC 和 IFC 的理解(布局)》[76]
详细资料可以参考:《CSS3@media 查询》[77]《响应式布局和自适应布局详解》[78]
详细资料可以参考:《CSS 优化、提高性能的方法有哪些?》[79]《CSS 优化,提高性能的方法》[80]
详细资料可以参考:《探究 CSS 解析原理》[81]
详细资料可以参考:《谈谈网页中使用奇数字体和偶数字体》[82]《现在网页设计中的为什么少有人用 11px、13px、15px 等奇数的字体?》[83]
详细资料可以参考:《CSS 规范-分类方法》[84]
详细资料可以参考:《简单了解 CSS3 的 all 属性》[85]
详细资料可以参考:《CSS 基础篇--CSS 中 IE 浏览器的 hasLayout,IE 低版本的 bug 根源》[86]《CSS 魔法堂:hasLayout 原来是这样的!》[87]
详细资料可以参考:《js 实现网页全屏切换(平滑过渡),鼠标滚动切换》[88]《用 ES6 写全屏滚动插件》[89]
详细资料可以参考:《响应式布局原理》[90]《响应式布局的实现方法和原理》[91]
详细资料可以参考:《如何实现视差滚动效果的网页?》[92]
详细资料可以参考:《去掉 chrome 记住密码后的默认填充样式》[93]《修改谷歌浏览器 chrome 记住密码后自动填充表单的黄色背景》[94]
详细资料可以参考:《谷歌浏览器不支持 CSS 设置小于 12px 的文字怎么办?》[95]
详细资料可以参考:《让字体变的更清晰 CSS 中-webkit-font-smoothing》[96]
详细资料可以参考:《什么是物理像素、虚拟像素、逻辑像素、设备像素,什么又是 PPI,DPI,DPR 和 DIP》[97]《前端工程师需要明白的「像素」》[98]《CSS 像素、物理像素、逻辑像素、设备像素比、PPI、Viewport》[99]《前端开发中像素的概念》[100]
相关知识点:
如果把移动设备上浏览器的可视区域设为viewport的话,某些网站就会因为viewport太窄而显示错乱,所以这些浏览器就决定 默认情况下把viewport设为一个较宽的值,比如980px,这样的话即使是那些为桌面设计的网站也能在移动浏览器上正常显示了。 ppk把这个浏览器默认的viewport叫做layout viewport。 layout viewport的宽度是大于浏览器可视区域的宽度的,所以我们还需要一个viewport来代表浏览器可视区域的大小,ppk把 这个viewport叫做visual viewport。 ideal viewport是最适合移动设备的viewport,ideal viewport的宽度等于移动设备的屏幕宽度,只要在css中把某一元 素的宽度设为ideal viewport的宽度(单位用px),那么这个元素的宽度就是设备屏幕的宽度了,也就是宽度为100%的效果。i deal viewport的意义在于,无论在何种分辨率的屏幕下,那些针对ideal viewport而设计的网站,不需要用户手动缩放,也 不需要出现横向滚动条,都可以完美的呈现给用户。回答:
移动端一共需要理解三个viewport的概念的理解。 第一个视口是布局视口,在移动端显示网页时,由于移动端的屏幕尺寸比较小,如果网页使用移动端的屏幕尺寸进行布局的话,那么整 个页面的布局都会显示错乱。所以移动端浏览器提供了一个layout viewport布局视口的概念,使用这个视口来对页面进行布局展 示,一般layout viewport的大小为980px,因此页面布局不会有太大的变化,我们可以通过拖动和缩放来查看到这个页面。 第二个视口指的是视觉视口,visual viewport指的是移动设备上我们可见的区域的视口大小,一般为屏幕的分辨率的大小。visu al viewport和layout viewport的关系,就像是我们通过窗户看外面的风景,视觉视口就是窗户,而外面的风景就是布局视口 中的网页内容。 第三个视口是理想视口,由于layout viewport一般比visual viewport要大,所以想要看到整个页面必须通过拖动和缩放才 能实现。所以又提出了ideal viewport的概念,ideal viewport下用户不用缩放和滚动条就能够查看到整个页面,并且页面在 不同分辨率下显示的内容大小相同。ideal viewport其实就是通过修改layout viewport的大小,让它等于设备的宽度,这个 宽度可以理解为是设备独立像素,因此根据ideal viewport设计的页面,在不同分辨率的屏幕下,显示应该相同。详细资料可以参考:《移动前端开发之 viewport 的深入理解》[101]《说说移动前端中 viewport(视口)》[102]《移动端适配知识你到底知多少》[103]
[1]
1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?: #1介绍一下标准的-css-的盒子模型低版本-ie-的盒子模型有什么不同的
[2]2.CSS 选择符有哪些?: #2css-选择符有哪些
[3]3.::before 和:after 中双冒号和单冒号有什么区别?解释一下这 2 个伪元素的作用。: #3before-和after-中双冒号和单冒号有什么区别解释一下这-2-个伪元素的作用
[4]4.伪类与伪元素的区别: #4伪类与伪元素的区别
[5]5.CSS 中哪些属性可以继承?: #5css-中哪些属性可以继承
[6]6.CSS 优先级算法如何计算?: #6css-优先级算法如何计算
[7]7.关于伪类 LVHA 的解释?: #7关于伪类-lvha-的解释
[8]8.CSS3 新增伪类有哪些?: #8css3-新增伪类有哪些
[9]9.如何居中 div?: #9如何居中-div
[10]10.display 有哪些值?说明他们的作用。: #10display-有哪些值说明他们的作用
[11]11.position 的值 relative 和 absolute 定位原点是?: #11position-的值-relative-和-absolute-定位原点是
[12]12.CSS3 有哪些新特性?(根据项目回答): #12css3-有哪些新特性根据项目回答
[13]13.请解释一下 CSS3 的 Flexbox(弹性盒布局模型),以及适用场景?: #13请解释一下-css3-的-flexbox弹性盒布局模型以及适用场景
[14]14.用纯 CSS 创建一个三角形的原理是什么?: #14用纯-css-创建一个三角形的原理是什么
[15]15.一个满屏品字布局如何设计?: #15一个满屏品字布局如何设计
[16]16.CSS 多列等高如何实现?: #16css-多列等高如何实现
[17]17.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用 hack 的技巧?: #17经常遇到的浏览器的兼容性有哪些原因解决方法是什么常用-hack-的技巧
[18]18.li 与 li 之间有看不见的空白间隔是什么原因引起的?有什么解决办法?: #18li-与-li-之间有看不见的空白间隔是什么原因引起的有什么解决办法
[19]19.为什么要初始化 CSS 样式?: #19为什么要初始化-css-样式
[20]20.什么是包含块,对于包含块的理解?: #20什么是包含块对于包含块的理解
[21]21.CSS 里的 visibility 属性有个 collapse 属性值是干嘛用的?在不同浏览器下以后什么区别?: #21css-里的-visibility-属性有个-collapse-属性值是干嘛用的在不同浏览器下以后什么区别
[22]22.width:auto 和 width:100\x 的区别: #22widthauto-和-width100的区别
[23]23.绝对定位元素与非绝对定位元素的百分比计算的区别: #23绝对定位元素与非绝对定位元素的百分比计算的区别
[24]24.简单介绍使用图片 base64 编码的优点和缺点。: #24简单介绍使用图片-base64-编码的优点和缺点
[25]25.'display'、'position'和'float'的相互关系?: #25displayposition和float的相互关系
[26]26.margin 重叠问题的理解。: #26margin-重叠问题的理解
[27]27.对 BFC 规范(块级格式化上下文:blockformattingcontext)的理解?: #27对-bfc-规范块级格式化上下文blockformattingcontext的理解
[28]28.IFC 是什么?: #28ifc-是什么
[29]29.请解释一下为什么需要清除浮动?清除浮动的方式: #29请解释一下为什么需要清除浮动清除浮动的方式
[30]30.使用 clear 属性清除浮动的原理?: #30使用-clear-属性清除浮动的原理
[31]31.zoom:1 的清除浮动原理?: #31zoom1-的清除浮动原理
[32]32.移动端的布局用过媒体查询吗?: #32移动端的布局用过媒体查询吗
[33]33.使用 CSS 预处理器吗?喜欢哪个?: #33使用-css-预处理器吗喜欢哪个
[34]34.CSS 优化、提高性能的方法有哪些?: #34css-优化提高性能的方法有哪些
[35]35.浏览器是怎样解析 CSS 选择器的?: #35浏览器是怎样解析-css-选择器的
[36]36.在网页中应该使用奇数还是偶数的字体?为什么呢?: #36在网页中应该使用奇数还是偶数的字体为什么呢
[37]37.margin 和 padding 分别适合什么场景使用?: #37margin-和-padding-分别适合什么场景使用
[38]38.抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题]: #38抽离样式模块怎么写说出思路有无实践经验阿里航旅的面试题
[39]39.简单说一下 css3 的 all 属性。: #39简单说一下-css3-的-all-属性
[40]40.为什么不建议使用通配符初始化 css 样式。: #40为什么不建议使用通配符初始化-css-样式
[41]41.absolute 的 containingblock(包含块)计算方式跟正常流有什么不同?: #41absolute-的-containingblock包含块计算方式跟正常流有什么不同
[42]42.对于 hasLayout 的理解?: #42对于-haslayout-的理解
[43]43.元素竖向的百分比设定是相对于容器的高度吗?: #43元素竖向的百分比设定是相对于容器的高度吗
[44]44.全屏滚动的原理是什么?用到了 CSS 的哪些属性?(待深入实践): #44全屏滚动的原理是什么用到了-css-的哪些属性待深入实践
[45]45.什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的 IE?(待深入了解): #45什么是响应式设计响应式设计的基本原理是什么如何兼容低版本的-ie待深入了解
[46]46.视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?): #46视差滚动效果如何给每页做不同的动画回到顶部向下滑动要再次出现和只出现一次分别怎么做
[47]47.如何修改 chrome 记住密码后自动填充表单的黄色背景?: #47如何修改-chrome-记住密码后自动填充表单的黄色背景
[48]48.怎么让 Chrome 支持小于 12px 的文字?: #48怎么让-chrome-支持小于-12px-的文字
[49]49.让页面里的字体变清晰,变细用 CSS 怎么做?: #49让页面里的字体变清晰变细用-css-怎么做
[50]50.font-style 属性中 italic 和 oblique 的区别?: #50font-style-属性中-italic-和-oblique-的区别
[51]51.设备像素、css 像素、设备独立像素、dpr、ppi 之间的区别?: #51设备像素css-像素设备独立像素dprppi-之间的区别
[52]52.layoutviewport、visualviewport 和 idealviewport 的区别?: #52layoutviewportvisualviewport-和-idealviewport-的区别
[53]《CSS 盒模型详解》: https://juejin.im/post/59ef72f5f265da4320026f76
[54]《总结伪类与伪元素》: http://www.alloyteam.com/2016/05/summary-of-pseudo-classes-and-pseudo-elements/
[55]《继承属性》: https://developer.mozilla.org/zh-CN/docs/Web/CSS/inheritance
[56]《CSS 有哪些属性可以继承?》: https://www.jianshu.com/p/34044e3c9317
[57]《CSS 优先级计算及应用》: https://www.jianshu.com/p/1c4e639ff7d5
[58]《CSS 优先级计算规则》: http://www.cnblogs.com/wangmeijian/p/4207433.html
[59]《有趣:256 个 class 选择器可以干掉 1 个 id 选择器》: https://www.zhangxinxu.com/wordpress/2012/08/256-class-selector-beat-id-selector/
[60]《CSS3 新特性总结(伪类)》: https://www.cnblogs.com/SKLthegoodman/p/css3.html
[61]《浅谈 CSS 伪类和伪元素及 CSS3 新增伪类》: https://blog.csdn.net/zhouziyu2011/article/details/58605705
[62]《CSS display 属性》: http://www.w3school.com.cn/css/pr_class_display.asp
[63]《Flex 布局教程:语法篇》: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
[64]《Flex 布局教程:实例篇》: http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
[65]《前端应该掌握的 CSS 实现多列等高布局》: https://juejin.im/post/5b0fb34151882515662238fd
[66]《CSS:多列等高布局》: https://codepen.io/yangbo5207/post/equh
[67]《li 与 li 之间有看不见的空白间隔是什么原因引起的?》: https://blog.csdn.net/sjinsa/article/details/70919546
[68]《CSS 里的 visibility 属性有个鲜为人知的属性值:collapse》: http://www.webhek.com/post/visibility-collapse.html
[69]《玩转图片 base64 编码》: https://www.cnblogs.com/coco1s/p/4375774.html
[70]《前端开发中,使用 base64 图片的弊端是什么?》: https://www.zhihu.com/question/31155574
[71]《小 tip:base64:URL 背景图片与 web 页面性能优化》: https://www.zhangxinxu.com/wordpress/2012/04/base64-url-image-%E5%9B%BE%E7%89%87-%E9%A1%B5%E9%9D%A2%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/
[72]《position 跟 display、margincollapse、overflow、float 这些特性相互叠加后会怎么样?》: https://www.cnblogs.com/jackyWHJ/p/3756087.html
[73]《深入理解 BFC 和 MarginCollapse》: https://www.w3cplus.com/css/understanding-bfc-and-margin-collapse.html
[74]《前端面试题-BFC(块格式化上下文)》: https://segmentfault.com/a/1190000013647777
[75]《[译]:BFC 与 IFC》: https://segmentfault.com/a/1190000004466536#articleHeader5
[76]《BFC 和 IFC 的理解(布局)》: https://blog.csdn.net/paintandraw/article/details/80401741
[77]《CSS3@media 查询》: http://www.runoob.com/cssref/css3-pr-mediaquery.html
[78]《响应式布局和自适应布局详解》: http://caibaojian.com/356.html
[79]《CSS 优化、提高性能的方法有哪些?》: https://www.zhihu.com/question/19886806
[80]《CSS 优化,提高性能的方法》: https://www.jianshu.com/p/4e673bf24a3b
[81]《探究 CSS 解析原理》: https://juejin.im/entry/5a123c55f265da432240cc90
[82]《谈谈网页中使用奇数字体和偶数字体》: https://blog.csdn.net/jian_xi/article/details/79346477
[83]《现在网页设计中的为什么少有人用 11px、13px、15px 等奇数的字体?》: https://www.zhihu.com/question/20440679
[84]《CSS 规范-分类方法》: http://nec.netease.com/standard/css-sort.html
[85]《简单了解 CSS3 的 all 属性》: https://www.zhangxinxu.com/wordpress/2016/03/know-about-css3-all/
[86]《CSS 基础篇--CSS 中 IE 浏览器的 hasLayout,IE 低版本的 bug 根源》: https://segmentfault.com/a/1190000010883974
[87]《CSS 魔法堂:hasLayout 原来是这样的!》: https://segmentfault.com/a/1190000004632071
[88]《js 实现网页全屏切换(平滑过渡),鼠标滚动切换》: https://blog.csdn.net/liona_koukou/article/details/52680409
[89]《用 ES6 写全屏滚动插件》: https://juejin.im/post/5aeef41cf265da0ba0630de0
[90]《响应式布局原理》: https://blog.csdn.net/dreamerframework/article/details/8994741
[91]《响应式布局的实现方法和原理》: http://www.mahaixiang.cn/wzsj/278.html
[92]《如何实现视差滚动效果的网页?》: https://www.zhihu.com/question/20990029
[93]《去掉 chrome 记住密码后的默认填充样式》: https://blog.csdn.net/zsl_955200/article/details/78276209
[94]《修改谷歌浏览器 chrome 记住密码后自动填充表单的黄色背景》: https://blog.csdn.net/M_agician/article/details/73381706
[95]《谷歌浏览器不支持 CSS 设置小于 12px 的文字怎么办?》: https://570109268.iteye.com/blog/2406562
[96]《让字体变的更清晰 CSS 中-webkit-font-smoothing》: https://blog.csdn.net/huo_bao/article/details/50251585
[97]《什么是物理像素、虚拟像素、逻辑像素、设备像素,什么又是 PPI,DPI,DPR 和 DIP》: https://www.cnblogs.com/libin-1/p/7148377.html
[98]《前端工程师需要明白的「像素」》: https://www.jianshu.com/p/af6dad66e49a
[99]《CSS 像素、物理像素、逻辑像素、设备像素比、PPI、Viewport》: https://github.com/jawil/blog/issues/21
[100]《前端开发中像素的概念》: https://github.com/wujunchuan/wujunchuan.github.io/issues/15
[101]《移动前端开发之 viewport 的深入理解》: https://www.cnblogs.com/2050/p/3877280.html
[102]《说说移动前端中 viewport(视口)》: https://www.html.cn/archives/5975
[103]《移动端适配知识你到底知多少》: https://juejin.im/post/5b6d21daf265da0f9d1a2ed7#heading-14
- END - 学习交流 关注公众号【前端宇宙】,每日获取好文推荐添加微信,入群交流 “在看和转发”就是最大的支持