知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
小程序中的垂直居中
發(fā)表時(shí)間:2021-5-11
發(fā)布人:葵宇科技
瀏覽次數(shù):2
題外話:前兩天和專(zhuān)業(yè)老師探討最近的一個(gè)項(xiàng)目,涉及到對(duì)一個(gè)浮動(dòng)的盒子局中的問(wèn)題,老師的解決方法打開(kāi)了我的新思路。讓我有了總結(jié)一下平時(shí)的居中問(wèn)題的想法。不然可能忘掉了以后又要到處尋找解決辦法了。另外也給我一個(gè)啟示:?jiǎn)⑹窘鉀Q方法有很多,就看你能不能對(duì)知識(shí)靈活運(yùn)用。也是通過(guò)這件事我體會(huì)到了“靈活運(yùn)用”的真正含義。做事情是這樣,做技術(shù)尤其要這樣。
這個(gè)總結(jié)要一直在整理完善中,以后有了什么新的想法、新的解決辦法都要再修改??上Р辉趃ithub中,不然可以集思廣益了。
———————————————--------------—開(kāi)始-分割線—-----------------———————————————
一、垂直居中
?。ㄏ到y(tǒng)筆記之) 父元素高度確定的【單行】文本
父元素高度確定的單行文本的豎直居中的方法是通過(guò)設(shè)置父元素的 height 和 line-height 高度一致來(lái)實(shí)現(xiàn)的;
line-height: 顧名思義,行高(行間距),指在文本中,行與行之間的 基線間的距離 )。
line-height 與 font-size 的計(jì)算值之差,在 CSS 中成為“行間距”。分為兩半,分別加到一個(gè)文本行內(nèi)容的頂部和底部。
這種文字行高與塊高一致帶來(lái)了一個(gè)弊端:當(dāng)文字內(nèi)容的長(zhǎng)度大于塊的寬時(shí),就有內(nèi)容脫離了塊。
最后效果見(jiàn)下邊的第一條 1.行高+高度:line-height:Npx(N = 與元素高度相同的值);
?。ㄏ到y(tǒng)筆記之) 父元素高度確定的【多行】文本
父元素高度確定的多行文本、圖片等的豎直居中的方法有兩種:
方法一:使用插入 table (包括tbody、tr、td)標(biāo)簽,同時(shí)設(shè)置 vertical-align:middle。
css 中有一個(gè)用于豎直居中的屬性 vertical-align,在父元素設(shè)置此樣式時(shí),會(huì)對(duì)inline-block類(lèi)型的子元素都有用。下面看一下例子:
html代碼:
1
2 <td class="wrap">
3
4
看我是否可以居中。p>
5 div>
6 </td>tr></tbody>table>
7 body>
css代碼:
1 table td{height:500px;background:#ccc}
因?yàn)?td 標(biāo)簽?zāi)J(rèn)情況下就默認(rèn)設(shè)置了 vertical-align 為 middle,所以我們不需要顯式地設(shè)置了。方法二:設(shè)置塊級(jí)元素的 display 為 table-cell(設(shè)置為表格單元顯示)
但這種方法兼容性比較差,只是提供大家學(xué)習(xí)參考。
在 chrome、firefox 及 IE8 以上的瀏覽器下可以設(shè)置塊級(jí)元素的 display 為 table-cell(設(shè)置為表格單元顯示),激活 vertical-align 屬性,
但注意 IE6、7 并不支持這個(gè)樣式, 兼容性比較差。
html
1 <div class="container">
2
3
看我是否可以居中。p>
4
看我是否可以居中。p>
5
看我是否可以居中。p>
6 div>
7 div>
css
1
2 .container{
3 height:300px;
4 background:#ccc;
5 display:table-cell;/*IE8以上及Chrome、Firefox*/
6 vertical-align:middle;/*IE8以上及Chrome、Firefox*/
7 }
8 style>
這種方法的好處是不用添加多余的無(wú)意義的標(biāo)簽,但缺點(diǎn)也很明顯,它的兼容性不是很好,不兼容 IE6、7而且這樣修改display的block變成了table-cell,破壞了原有的塊狀元素的性質(zhì)。
2017-04-25 17:53:04
————————————————————————————————————————————————————————————————————————————————————————————————————
其他三點(diǎn)我自己總結(jié)的方法如下:(其中第一條也是父元素高度確定的單行文本的處理方法)
1.行高+高度:line-height:Npx(N = 與元素高度相同的值);
正如N的值那樣,這種解決方法就是要盒模型是有高度設(shè)置的。舉例:
.box {
width: 45px;
height: 60px;
line-height: 60px;
}
高度是60px,行高也設(shè)置為60px,這樣,就可以實(shí)現(xiàn)垂直居中的問(wèn)題。
如圖:影視二字就可以垂直居中了。
可行性分析:就像圖片中看到的那樣,只有兩個(gè)字,他們排在一行不會(huì)換行,一旦換行的話,行高就會(huì)應(yīng)用于文字,由于行高過(guò)大的原因,會(huì)導(dǎo)致剩下的文字跑出畫(huà)面了。
如右圖:
2:【父元素高度確定】定位+外邊距:position:absolute;top:50%;margin-top: -Bpx;(B是元素的高度/2的值)
這里就不一定需要盒模型的固定高度了,只需要物體的高度,比如字體。至于怎么獲得字體的高度,就去瀏覽器的調(diào)試工具(Dreamweaver也可以也有這個(gè)功能,實(shí)時(shí)編輯的工具都是可以的。)中看。當(dāng)不設(shè)置高度值得時(shí)候,將鼠標(biāo)移到對(duì)應(yīng)的標(biāo)簽上,自然會(huì)有寬高顯示出來(lái)。
喏:
這么一看高度就是19px;
所以設(shè)置的話:
.box{
position: absolute;
top: 50%;
margin-top: -10px;
}
可行性分析:絕對(duì)定位absolute是一個(gè)魔鬼,不到萬(wàn)不得已不能碰他。
那么怎么既避免absolute的絕對(duì)定位使用,又要實(shí)現(xiàn)想要的布局呢?
3:【父元素高度確定】外邊距+高度:margin-top:50%-Mpx;(M是元素的高度/2的值)
不知道這種寫(xiě)法,以前也沒(méi)有見(jiàn)過(guò)。但是正如開(kāi)篇說(shuō)的那樣,我從來(lái)沒(méi)這么想過(guò)可以這么玩css,所以很多次我既想要設(shè)置width是100%,又要刨除掉padding、border等的值。你就不知道應(yīng)該是百分幾了!當(dāng)然我后來(lái)是用box-sizing解決了,讓padding'等算進(jìn)了總width中,但有時(shí)候涉及到響應(yīng)式的話,還是很麻煩的要弄好多個(gè)@media來(lái)限制,動(dòng)輒上30了,那是多么的土且笨的解決啊。直到那么一天,我接受了老師的偶然實(shí)驗(yàn)的想法,讓我眼前一亮,那就是讓css做加減法!
說(shuō)到讓css自己做加減法,我以前記得看一本書(shū)(or文章吧!who care)是有講過(guò)css可以做加減法,但我竟然沒(méi)想到,讓他做不同單位值得加減法!老師也是一臉興奮的跟我講,我也不知道可以這樣,那天就是試了試,沒(méi)想到成功了。哈哈,是啊,偉大而又神奇的css,總是給我們驚喜。這就是我愛(ài)它的原因吧。
可能你現(xiàn)在會(huì)想到或已經(jīng)知道有一個(gè)css屬性可以做計(jì)算,沒(méi)錯(cuò)!就是calc().
這個(gè)屬性我看過(guò)一片前輩大神的博客,用法講的很詳細(xì),鏈接貼在這里了:http://www.w3cplus.com/css3/how-to-use-css3-calc-function.html
但我想,直接讓css做加減法既然是可以的,何必還調(diào)用這個(gè)看上去就像個(gè)js函數(shù)一樣的東東呢?畢竟他不是兼容性的。
css直接做加減法的方法雖然直白且低級(jí),但是我們沒(méi)有后遺癥?。。ㄎ抑皇请S便說(shuō)說(shuō),畢竟我沒(méi)有測(cè)試過(guò)!不負(fù)責(zé)任奧?。?!233333)
廢話說(shuō)了這么多,就是一個(gè)核心理念,不管什么單位和數(shù)值了,那么頭疼的響應(yīng)式運(yùn)算,就交給我們的css自動(dòng)運(yùn)算吧。
額(⊙o⊙)…貌似變換成了水平的問(wèn)題解決。
好,那接下來(lái)就是水平:
——————————————————————————————————————————————————
二、水平居中(系統(tǒng)筆記見(jiàn)最后邊)
1:【內(nèi)聯(lián)元素】文本居中:text-align:center(不解釋?zhuān)?/p>
可行性分析:一個(gè)盒子內(nèi)部的文字、元素(有固定寬度)的居中問(wèn)題他是可以解決的。
那么條件不夠呢?
沒(méi)條件就要?jiǎng)?chuàng)造條件嘛!沒(méi)有wrap就包一個(gè)嘛!沒(méi)有寬度就定下來(lái)嘛!別矯情。問(wèn)題總是可以解決的。
2:【定寬塊元素】自動(dòng)水平外邊距:margin:0 auto;(更加不想解釋?zhuān)?/p>
0:垂直方向margin可變值,表示margin-top、margin-bottom兩個(gè)的值,如果設(shè)置的話,二者一樣。如果不想二者一樣,可以在auto后再設(shè)置一個(gè):margin: Apx auto Bpx;
auto:水平方向margin,auto就是自動(dòng),也算是讓css自動(dòng)計(jì)算距離左右的位置吧,
可行性分析:必須要元素定寬,即要設(shè)置寬度值。
3:【需要定寬】絕對(duì)定位+外邊距:position:absolute;left:50%;margin-left: -Bpx;(B是元素的寬度/2的值)(更加不想解釋?zhuān)?/p>
有個(gè)盒模型,他有自己的寬度高度、又是絕對(duì)定位。這種情況,想讓他水平居中的話用text-align與margin:0 auto;的方法都是不可取的。畢竟absolute已經(jīng)飛起來(lái)了,脫離了文檔流,任何限制都對(duì)他沒(méi)有作用了。但是,好處是不管他以前什么屬性,用了absolute之后就可以設(shè)置寬高了。所以就有了解決辦法。
相關(guān)案例查看更多
相關(guān)閱讀
- APP
- 云南軟件設(shè)計(jì)
- 網(wǎng)站建設(shè)方案 doc
- 軟件定制
- 昆明小程序定制開(kāi)發(fā)
- 搜索排名
- 云南網(wǎng)站設(shè)計(jì)
- 云南小程序開(kāi)發(fā)課程
- 跳轉(zhuǎn)小程序
- web服務(wù)
- 云南網(wǎng)站建設(shè)首選
- 汽車(chē)報(bào)廢系統(tǒng)
- vue開(kāi)發(fā)小程序
- 小程序開(kāi)發(fā)聯(lián)系方式
- 搜索引擎優(yōu)化
- 快排推廣
- 支付寶小程序被騙
- 云南小程序開(kāi)發(fā)報(bào)價(jià)
- 智慧農(nóng)貿(mào)市場(chǎng)
- 云南小程序開(kāi)發(fā)首選品牌
- 網(wǎng)站小程序
- Web開(kāi)發(fā)框架
- 做小程序被騙
- 昆明網(wǎng)站開(kāi)發(fā)
- asp網(wǎng)站
- 報(bào)廢車(chē)拆解回收管理系統(tǒng)
- web開(kāi)發(fā)
- 微信小程序
- 小程序被騙
- 百度人工排名