這是由掘金上一個(gè)面試者一道題目的思考,要求用css實(shí)現(xiàn),本來覺得很簡(jiǎn)單不想動(dòng)手,不過經(jīng)常覺得不動(dòng)手容易理解不好,所以試試。
要求:
A元素垂直居中
A元素距離屏幕左右各邊各10px
A元素里的文字font—size:20px,水平垂直居中
A元素的高度始終是A元素寬度的50%
----
我的理解是頁(yè)面上除了A元素,大部分情況還存在其它元素,所以A元素要用一個(gè)盒子包起來以免干擾其它元素,A元素在該盒子內(nèi)滿足上述問題需求即可,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>盒子模型居中</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.box {
position: relative;
background-color: palegoldenrod;
width: 100%;
box-sizing: border-box;
padding-top: calc(25% - 5px);
padding-bottom: calc(25% - 5px);
}
.Abox {
position: absolute;
top: 0;
bottom: 0;
margin: auto;
background-color: plum;
margin-left: 10px;
margin-right: 10px;
width: calc(100% - 20px);
text-align: center;
font-size: 20px;
}
</style>
</head>
<body>
<div class="box">
<div id="Abox" class="Abox">A元素垂直居中 A元素距離屏幕左右各邊各10px A元素里的文字font—size:20px,水平垂直居中 A元素的高度始終是A元素寬度的50% </div>
</div>
</body>
</html>
以上實(shí)現(xiàn)可以滿足Abox在box中垂直居中,不需要提前知道box和Abox的高度。
其實(shí)覺得最不好處理是在不知道任何實(shí)際寬高的情況下,A元素的高度始終是A元素寬度的50%。
0.全局和背景
* {
margin: 0px;
padding: 0px;
}
.box {
background-color: red;
}
.Abox {
background-color: greenyellow;
}
1.先出來簡(jiǎn)單的垂直居中,Abox垂直居中,box用相對(duì)定位,Abox用絕對(duì)定位結(jié)合top:0;bottom:0;margin:auto即可實(shí)現(xiàn)。
.box {
position: relative;
width: 100%;
}
.Abox {
position: absolute;
top: 0;
bottom: 0;
margin: auto;
}
2.A元素距離屏幕左右10px,box寬度為100%,則A元素寬度要用100%減去左右兩邊共20px=>
.Abox {
margin-left: 10px;
margin-right: 10px;
width: calc(100% - 20px);
}
3.box高度不知,但Abox的高度始終為Abox寬度的一半,想著利用下ie的怪異盒子模型,盒子的width=內(nèi)容的width+padding+border==>用padding去撐起盒子的width,讓內(nèi)容的width和border為0,所以題目轉(zhuǎn)換為求Abox的高,即為求一半盒子的width,1/2(100% - 20px)==>(50% - 10px)再對(duì)半即為padding-top,padding-bottom==>(25% - 5px).將Abox高套在box上撐高整個(gè)區(qū)域。
.box{
box-sizing:border-box;
padding-top:calc(25% - 5px);
padding-bottom:calc(25% - 5px);
}
4.A元素里的字體font-size:20px,水平居中:
.Abox{
font-size:20px;
text-align:center;
}
Abox其實(shí)整個(gè)可視區(qū)域的高度是靠怪異盒子模型里的padding去撐起來的,也就是上面的190px實(shí)際上不是對(duì)應(yīng)css里面的height,而是padding-top和padding-bottom的疊加,內(nèi)容的height實(shí)際上為0,那么普通line-height等于height的情況就處理不了內(nèi)部文字的垂直居中了。所以這種情況應(yīng)該怎么處理呢?還是說怪異盒子模型來處理這道題的居中還是根本就不適合的?
后面完善的時(shí)候會(huì)補(bǔ)上js的做法和display:flex的做法。
第一次知道 padding 可以這么用,厲害厲害。
Abox 的 height 是 190px 沒錯(cuò)啊,box 的 height 才為 0。
line-height 適合處理單行文字的垂直居中,多行就不行了。
題主想用絕對(duì)定位來垂直居中,但是需要 Abox 有具體的 height 且與文本區(qū)域的 height 一樣。
然后這種情況我覺得可以給文本區(qū)域加個(gè)包含塊來解決。
利用表格樣式:
<div class="box">
<div id="Abox" class="Abox">
<table>
<tbody>
<tr>
<td>A元素垂直居中 A元素距離屏幕左右各邊各10px A元素里的文字font—size:20px,水平垂直居中 A元素的高度始終是A元素寬度的50%</td>
</tr>
</tbody>
</table>
</div>
</div>
table {
height: 100%;
}
利用變換 transform:
<div class="box">
<div id="Abox" class="Abox">
<div class="inner">A元素垂直居中 A元素距離屏幕左右各邊各10px A元素里的文字font—size:20px,水平垂直居中 A元素的高度始終是A元素寬度的50%</div>
</div>
</div>
.inner {
position: absolute;
top: 50%;
transform: translateY(-50%);
}北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。