(高階)居中沒有寬度的元素
本文節選自《CSS設計指南(第3版》。
第1章完全免費試讀,電子書線上熱賣中:http://www.ituring.com.cn/book/1111以下內容節選自第7章“CSS3實戰”。
在一個元素內居中另一個元素有時候會很困難。對於常規、靜態定位的元素,可以讓它向左或向右浮動,或者使用text-align
屬性讓它在父元素內居左、居右或居中。還可以利用自動外邊距(margin:0 auto
)來居中元素。這些方法的問題在於,要居中的元素必須是有寬度的。像這裡用於構成選單的HTML列表,它可能是根據資料庫資訊動態生成的,或者說將來有可能手工編輯,總之你不可能提前設定它的寬度。我收到很多郵件,都是詢問怎麼在容器內部居中選單的。下面也算是統一回答吧,我們來看看怎麼居中一個沒有設定寬度的元素。
在display
屬性的值中,inline-block
具有一些特殊的混合行為。正如它的名字所暗示的,它既有塊級元素的特點,也有行內元素的行為。從塊級元素角度說,可以為它設定外邊距和內邊距,也可以通過它簡便而有效地包圍其他塊級元素。從行內元素角度看,它會收縮包裹自己的內容,而不是擴充套件填充父元素。換句話說,inline-block
元素的寬度始終等於其內容寬度。這種元素還有一個特點,就是可以包圍浮動元素。不過,這種元素也有一個問題,即不能給它的外邊距設定auto
值——而這恰恰又是在更大的容器內居中元素的最簡單方法。
解決方案就是為要居中元素的父元素(這裡的nav
)應用text-align:center
,為要居中的元素(這裡的ul
)設定display:inline-block
,讓它包含列表項。這樣設定就可以得到我們想要的結果:沒有固定寬度的元素也能在其父元素內居中。如前面程式碼開頭加粗的CSS宣告所示,我們就是這麼做的。現在選單完美居中了,因為其父元素nav
忽略了兩端絕對定位的元素,擴充套件到了與header
同寬。
為了演示這個技巧有多好,我們來去掉一個選單項。
圖7-8 即使去掉選單項,選單整體上仍然居中
如圖7-8所示,去掉最後一個選單項之後,整個選單照樣居中。對於不同使用者會看到不同選單(比如,區別是否為註冊會員)的動態站點來說,這個技巧的確太有用了。還一個地方要特別留意,就是我沒有直接為第一和第五個選單項新增圓角效果,否則將來如果增減選單項就會出問題。如前面程式碼末尾加粗的宣告所示,為了讓CSS適應選單項的動態變化,我們把圓角效果應用給了:first-child
和last-child
元素。這樣一來,第五個選單項被刪掉後,第四個選單項就會成為最後一個子元素,從而取得應用給:last-child
的圓角效果。
相關文章
- 不定寬度下,元素的垂直居中,水平居中
- CSS子元素居中(父元素寬高已知,子元素未知)CSS
- js實現未知寬高的元素在指定元素中垂直水平居中JS
- css不定寬度元素水平居中程式碼例項CSS
- 不定寬高元素的水平垂直居中
- css面試題實現元素垂直水平居中-包括未知寬高的元素五種回答CSS面試題
- 子元素固定寬度 父元素寬度被撐開
- 位置寬高元素垂直水平居中效果
- 未知寬高圖片在元素中垂直水平居中程式碼例項
- css不定寬高元素垂直水平居中效果CSS
- 在pos:a元素不設定寬度的情況下,他的最大寬度是受父元素的寬度所限制的。
- 兩列居中寬度固定佈局
- 如何獲取寬度自適應的元素的width寬度值
- 一列固定寬度居中佈局
- CSS進階——絕對定位元素的寬高是如何定義的CSS
- 透徹理解塊級元素的寬度
- CSS Tips——未知寬度高度居中對齊CSS
- 兩列居中寬度自適應佈局
- 【CSS】水平垂直居中的4種實現(寬高不定)CSS
- js拖動調整元素寬度JS
- js如何獲取元素的高度和寬度JS
- 如何設定span元素的寬度和高度
- 如何用css設定span元素的寬度CSS
- jQuery如何獲取元素的寬度和高度jQuery
- 一列居中寬度自適應佈局
- app直播原始碼,css寬度不固定,水平居中APP原始碼CSS
- CSS行內元素設定寬高CSS
- 根據id獲取元素的寬度的方法
- 最全的獲取元素寬高及位置的方法
- CSS 設定 span 元素 寬度與高度CSS
- 父盒子寬度不固定水平居中彈性佈局
- JS獲取元素寬高的兩種情況JS
- 相容所有瀏覽器長寬自適應元素垂直水平居中瀏覽器
- jQuery動態設定div元素的高度和寬度jQuery
- JavaScript動畫方式改變元素寬度和高度JavaScript動畫
- 元素水平居中
- 元素水平居中,垂直居中方法
- JavaScript獲取瀏覽器、元素、螢幕的寬高尺寸JavaScript瀏覽器