我試圖將此元素置於螢幕中心,當我懸停時也是如此。
在下面的範例中,div 沒有居中,即使當我將其懸停時,知道我也進行了50% 變換,並且頂部/左側也進行了變換,這就是我用來使元素居中的常用方法。
* { box-sizing: border-box; } body { position: relative } .zoom { padding: 50px; background-color: green; transition: transform .2s; width: 200px; height: 200px; margin: 0 auto; transform: scale(.2) translate(-50%, -50%); position: absolute; top: 50%; left: 50%; } .zoom:hover { -ms-transform: scale(1.5); /* IE 9 */ -webkit-transform: scale(1.5); /* Safari 3-8 */ transform: scale(1.5); }
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div class="zoom"></div> </body> </html>
該錯誤位於
:hover
選擇器中,因為轉換中沒有translate()
,您基本上將其重置為 0,這不是您想要的。 因為它會忘記之前的內容並覆蓋它。這裡有一個簡單的解決方案:
❌
✅
這裡有一個簡單的解釋:
現代解決方案(更少的程式碼):
使用 CSS 網格 https://developer.mozilla.org/ en-US/docs/Web/CSS/grid
使用
place-items
它將自動居中,無需任何轉換或位置... https://developer.mozilla.org/en-US/docs/Web/CSS/place -items#此外,您不必在開始時對
0.2
進行縮放,只需從scale(1)
開始,然後透過懸停更大的比例來使其更大,例如4
。 (因此,在沒有任何懸停的情況下,它不會在從 200px 到 0.2scale 過渡開始時產生該錯誤)但是,如果您想讓 CSS 在 IE 和舊版瀏覽器中也能運作,那麼最好使用位置、平移、頂部、左側...
但是您的使用者使用的是現代瀏覽器,因此為了提高可讀性並更簡單地使用 Flexbox 或網格可能是一個好主意。
如需了解更多信息,請使用https://caniuse.com (例如,任何瀏覽器95% 都支援網格從2020 年開始,Chrome 從2017 年開始)
這裡是 CSS 網格解決方案
請記住,變換的順序決定了元素的顯示方式。您首先移動元素
top: 50%; left: 50%;
,並將其置於右下象限。然後你把它變小transform:scale(0.2)
然後然後你把它向左移動現在較小尺寸translate(-50%, -50%)
的50%。透過將翻譯放在第一位,元素會在變小之前居中。請記住,當您增加大小時,也要包含
translate(-50%, -50%)
,因為後續的翻譯將覆蓋當前的翻譯,而不是添加到其中。