最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
如上面的例子中看到的,当一个元素为其宽度分配一个百分比值时, width
是基于包含块的width
, height
是基于包含块的 height
。
padding
对于 padding
,垂直(padding-top/padding-bottom
)或水平(padding-left/padding-right
)都是基于包含块的 width
来计算。
来个例子:
.parent {
background: #eaeaea;
width: 300px;
height: 200px;
}
.child {
display: inline-block;
background: red;
padding-top: 50%;
padding-left: 50%;
}
.parent {
position: relative;
}
线上地址:https://codepen.io/khangnd/pen/powbjEL
在这个例子中:
-
父
div
的大小为6x4
。 -
子
div
的大小为0
,但padding-top
和padding-left
分别为50%
最后的结果是,子元素的大小相当于父级元素 1/2
宽度,也就是一个 3x3
的正方形。
margin
与 padding
,margin
的百分比(垂直和水平)也是相对于包含块的宽度来计算。
来个事例:
.parent {
background: #eaeaea;
width: 300px;
height: 200px;
}
.child {
display: inline-block;
background: red;
width: 50px;
height: 50px;
margin-top: 50%;
margin-left: 50%;
}
在这个例子中:
-
父级
div
的大小为6x4
。 -
margin-top
和margin-left
分别为50%
其结果是,子元素被定位在离父级元素的上边距和左边距3个单位的地方(父级宽度的1/2)。
top/bottom/left/right
top
、bottom
基于包含块的height
来计算,left
、right
基于包含块的width
来计算。
来个例子:
.parent {
position: relative;
background: #eaeaea;
width: 300px;
height: 200px;
}
.child {
position: absolute;
background: red;
width: 16.67%;
height: 25%;
top: 50%;
left: 50%;
}
在这个事例中:
-
父级
div
的大小为6x4
-
子元素有
position: absolute
,top
和left
分别为50%
最终结果,子 div
被定位在离父 div
的顶部边缘 2
个单位的位置(父 div
高度的 1/2
),并被定位在离父 div
的左侧边缘 3
个单位的位置(父 div
宽度的 1/2
)。
transform: translate()
一个用于动画/过渡的不可思议的属性,它也支持百分比值。然而,这个属性并不指其包含的块,而是指其自身。
来个例子:
.parent {
background: #eaeaea;
width: 300px;
height: 200px;
}
.child {
background: red;
width: 100px;
height: 50px;
transform: translate(50%, 50%);
}
在这个事例中:
-
父级
div
的大小为6x4
。 -
子
div
的大小为2x1
,使用transform: translate(50%, 50%)
最后结果,子 div
被定位在离父 div
的顶部边缘 0.5
个单位的位置(自身高度的 1/2
),并被定位在离父 div
的左侧边缘 1
个单位的位置(自身宽度的 1/2
)。
background-size
background-size
属性将百分比单元的复杂性提升到一个新的水平
此属性的百分比值指的是背景定位区域,类似于包含块,但添加了以下 3 个因素:
-
只有内容的块(
content-box
) -
带有内容和
padding
的块 (padding-box
) -
带有内容、
padding
和border
的块(border-box
)
这三个值是由 background-origin
给出,具体看 MDN :https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-origin
来个例子:
.parent {
background: #eaeaea;
width: 300px;
height: 200px;
}
.child {
background-image: url(https://d2fltix0v2e0sb.cloudfront.net/dev-rainbow.png);
background-size: 50% 50%;
background-repeat: no-repeat;
background-color: red;
width: 50%;
height: 50%;
}
在这个例子中:
-
父
div
的大小为6x4
-
子
div
的大小为3x2
,没有padding
,没有border
-
这里使用了一个DEV logo(比例为
1:1
)作为子div
的背景图像,背景大小属性设置为50% 50%
其结果是,背景图像被拉伸为 1.5 x 1
的大小。
background-position
与 background-size
类似,background-position
属性的百分比也依赖于背景定位区域。
在这个例子中:
分享
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
x 1` 的大小。
background-position
与 background-size
类似,background-position
属性的百分比也依赖于背景定位区域。
在这个例子中:
分享
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】