這里給大家分享我在網(wǎng)上總結(jié)出來(lái)的一些知識(shí),希望對(duì)大家有所幫助
引言
居中是我們?cè)谇岸瞬季种薪?jīng)常會(huì)遇到的問(wèn)題,其中包括水平居中和垂直居中。居中的方法很多,比如說(shuō)水平居中可以使用text-align: center
或者margin: 0 auto
等等來(lái)實(shí)現(xiàn),垂直居中則需要使用一些其它的特殊的技巧。比如說(shuō)常見(jiàn)的做法是使用transform
來(lái)實(shí)現(xiàn)垂直居中,margin-top
或者top
屬性,或者使用彈性布局。
transform的優(yōu)點(diǎn)
那么我們?yōu)槭裁匆褂?code>transform來(lái)實(shí)現(xiàn)垂直居中呢?
因?yàn)?code>transform屬于合成屬性,而margin-top
和top
屬于布局屬性。對(duì)于合成屬性,瀏覽器會(huì)將被動(dòng)畫(huà)元素放入一個(gè)獨(dú)立的層中進(jìn)行動(dòng)畫(huà),而不會(huì)對(duì)整個(gè)頁(yè)面進(jìn)行重繪,這可以提高頁(yè)面的性能。而對(duì)于布局屬性,任何一點(diǎn)的變化都可能導(dǎo)致整個(gè)頁(yè)面的重排和重繪,這會(huì)對(duì)頁(yè)面的性能產(chǎn)生很大的影響。
如果我們使用margin-top
或者top
來(lái)實(shí)現(xiàn)垂直居中,那么每次元素發(fā)生變化時(shí),瀏覽器都會(huì)對(duì)整個(gè)頁(yè)面進(jìn)行重排和重繪,這會(huì)導(dǎo)致頁(yè)面的性能受到很大的影響。而使用transform
來(lái)實(shí)現(xiàn)垂直居中,則可以將元素放入一個(gè)獨(dú)立的層中進(jìn)行動(dòng)畫(huà),避免了對(duì)整個(gè)頁(yè)面的重排和重繪,從而提高了頁(yè)面的性能。
下面是一個(gè)使用transform
實(shí)現(xiàn)垂直居中的示例代碼:
<div class="container"> <div class="box"> <p>這是一段文字</p> </div> </div> .container { position: relative; height: 300px; background-color: #eee; } .box { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
在上面的代碼中,我們首先將外層容器設(shè)置為position: relative
,并指定了一個(gè)固定的高度。然后,我們將內(nèi)層元素設(shè)置為position: absolute
,并使用top: 50%
和left: 50%
將其定位到父元素的中心位置。最后,我們使用transform: translate(-50%, -50%)
來(lái)將元素向左上方移動(dòng)自身寬度和高度的一半,從而實(shí)現(xiàn)了垂直居中的效果。
使用transform
來(lái)實(shí)現(xiàn)垂直居中可以避免對(duì)整個(gè)頁(yè)面的重排和重繪,從而提高頁(yè)面的性能。所以在實(shí)際的開(kāi)發(fā)中,我們應(yīng)該盡可能地使用合成屬性來(lái)進(jìn)行動(dòng)畫(huà)和布局,避免使用布局屬性,從而提高頁(yè)面的性能和用戶(hù)體驗(yàn)。
浮動(dòng)
對(duì)于浮動(dòng)居中,它在進(jìn)行元素的水平居中時(shí),可能會(huì)對(duì)頁(yè)面進(jìn)行重排。這是因?yàn)闉g覽器需要對(duì)元素的左右外邊距進(jìn)行計(jì)算,并將元素放置在父容器中間。這個(gè)過(guò)程會(huì)導(dǎo)致瀏覽器對(duì)整個(gè)頁(yè)面進(jìn)行重排,從而可能影響頁(yè)面的性能。此外,浮動(dòng)布局實(shí)現(xiàn)多列布局,可能會(huì)導(dǎo)致多列高度不一致,需要進(jìn)行額外處理。
但是,在某些情況下,浮動(dòng)居中并不會(huì)對(duì)頁(yè)面進(jìn)行重排。例如,如果我們將元素的寬度設(shè)置為固定的像素值,那么瀏覽器就可以很容易地計(jì)算出元素的左右外邊距,并將元素放置在父容器中間,而不需要對(duì)整個(gè)頁(yè)面進(jìn)行重排。在這種情況下,浮動(dòng)居中的性能表現(xiàn)可能會(huì)比較好。
所以說(shuō)浮動(dòng)居中可能會(huì)對(duì)頁(yè)面進(jìn)行重排,但在某些情況下,它的性能表現(xiàn)可能會(huì)比較好。在實(shí)際開(kāi)發(fā)中,我們則應(yīng)該根據(jù)具體的需求和情況來(lái)選擇。
彈性
彈性布局大家應(yīng)該也比較熟悉了,用彈性只有一次和無(wú)數(shù)次,在很多時(shí)候使用彈性布局真的很舒服,所以我們關(guān)于彈性布局就多描述一些。
彈性布局的優(yōu)點(diǎn)在于它可以方便地實(shí)現(xiàn)彈性盒子容器中彈性盒子項(xiàng)目的伸縮和排列,但是在使用彈性布局時(shí),如果頻繁修改彈性容器的屬性或彈性項(xiàng)目的排列順序,就可能會(huì)觸發(fā)頁(yè)面重排和重繪,從而影響頁(yè)面的性能和用戶(hù)體驗(yàn)。
導(dǎo)致原因
具體來(lái)說(shuō),以下幾種情況可能會(huì)導(dǎo)致彈性布局的頁(yè)面重排和重繪:
- 修改彈性容器的屬性
如果修改彈性容器的屬性,如flex-direction、justify-content、align-items等,會(huì)影響彈性盒子項(xiàng)目的排列和布局,從而導(dǎo)致頁(yè)面重排和重繪。
- 修改彈性項(xiàng)目的屬性
如果修改彈性項(xiàng)目的屬性,如flex-grow、flex-shrink、flex-basis等,會(huì)影響彈性盒子項(xiàng)目的伸縮和尺寸,從而導(dǎo)致頁(yè)面重排和重繪。
- 修改彈性項(xiàng)目的順序
如果修改彈性項(xiàng)目的排列順序,會(huì)影響彈性盒子項(xiàng)目的排列和布局,從而導(dǎo)致頁(yè)面重排和重繪。
優(yōu)化
以為了避免彈性布局的頁(yè)面重排和重繪,我們可以采取一些優(yōu)化措施,如:
-
盡可能減少修改彈性容器和彈性項(xiàng)目的屬性和順序。
-
將多個(gè)彈性容器和彈性項(xiàng)目盡可能合并為一個(gè)彈性容器和彈性項(xiàng)目,從而減少頁(yè)面重排和重繪。
-
將彈性容器和彈性項(xiàng)目的尺寸設(shè)置為固定值,從而減少頁(yè)面重排和重繪。
所以說(shuō),雖然彈性布局具有靈活和方便的優(yōu)點(diǎn),寫(xiě)起來(lái)很舒服,但是在使用時(shí)我們需要注意優(yōu)化,減少頁(yè)面重排和重繪,以提高頁(yè)面的性能和用戶(hù)體驗(yàn)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-746797.html
本文轉(zhuǎn)載于:
https://juejin.cn/post/7303587697100013606
如果對(duì)您有所幫助,歡迎您點(diǎn)個(gè)關(guān)注,我會(huì)定時(shí)更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進(jìn)步。
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-746797.html
到了這里,關(guān)于記錄--居中為什么要使用 transform?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!