css筆記(二)——幾種常用的模式

來源:互聯網
上載者:User

標籤:css   布局   盒子寬度   

文本垂直置中

對於行內元素,height會自動收縮到包裹住文本的高度,所以不存在這個問題。但是對於block和inline-block等盒子項目,如果設定了height屬性,則文本預設會在上方顯示。如果希望文本在垂直方向上置中,可以設定line-height屬性等於height屬性,或者大於height屬性

<div>    hello world</div>

div {    height: 200px;    line-height: 200px;}

文本水平置中,表徵圖分列左右兩側

效果是左側一個小箭頭,右側一個小箭頭,日期顯示在中間

<div id="wrapper">    <span><</span>    <span>2014年5月11日</span>    <span>></span></div>

#wrapper{    text-align: center;    position: relative;    width: 200px;}#wrapper > span:first-child{    float: left;}#wrapper > span:last-child{    float: right;}

如果給2個float元素設定width(比如為了增大點擊地區的目的),則width應該設定成一樣,否則會破壞日期水平置中的效果

為float元素設定width

一般來說,行內元素(如span),會自動收縮以適應文本寬度,為其設定width屬性是無效的。但是當span元素被float了之後,就可以為其設定width屬性了

盒子有多大

對於塊元素,如block和inline-block,如果不設定其width,則會自動擴充到父容器的寬度。此時設定它的padding和border,不會改變盒子的大小(還是和父容器一樣寬),但是會縮小content的寬度

<div id="parent">    <div id="son">abc</div></div>

#parent {    widht: 200px;}#son {    padding: 1px;    border: 1px solid black;}

son的width自動擴充到200px,然後由於padding和border佔了4px,內容地區就是196px

如果設定了son的width,實際上設定的是content的width,加上border和padding後,實際的寬度會超過父容器

#son {    width: 200px;    padding: 1px;    border: 1px solid black;}

content的寬度是200px,加上border和padding的4px,最後盒子的寬度是204px

但是,如果設定box-sizing為border-box,則設定的width就變成了整個盒子的寬度,此時再設定border和padding,又會縮小content的寬度了

#son {    box-sizing: border-box;    width: 200px;    padding: 1px;    border: 1px solid black;}

實踐中,在全域設定box-sizing為border-box挺不錯的,這樣設定padding和border時,就不用擔心造成盒子寬度的變化了

水平排放li

<ul>    <li>1</li>    <li>2</li>    <li>3</li>    <li>4</li>    <li>5</li></ul>

ul{    font-size: 0;}li{    font-size: 1rem;    display: inline-block;    width: 20%;}

這裡的一個技巧是設定ul的font-size為0,因為</li>和<li>之間有空隙,在大部分瀏覽器上都會造成1px的間隙,造成一行無法容納5個li,於是最後一個li元素就會掉到下一行。因此把ul的font-size設定成0,在li中再恢複,可以避免此1px問題。用inline-block方式實現水平布局,大多都會有這個問題

N列固定比例水平布局

有點類似上面的li平鋪

<div>    <nav></nav>    <div></div>    <aside></aside></div>

div {    font-size: 0;}div > * {    display: inline-block;    font-size: 1rem;    vertical-align: top;}div > nav {    width: 30%;}div > div {    width: 50%;}div > aside {    width: 20%;}

基本上和li平鋪的模式完全一樣,區別是設定所有的子項目vertical-align: top。否則當各子項目的高度不一致時,看起來似乎沒有在同一行。其實用dev tools可以看出來,3個子項目還是在同一行,只是在垂直方向上沒有對齊,設定vertical-align可以解決此問題

某些列寬度固定,其他列寬度比例固定的水平布局

<div>    <nav></nav>    <div></div>    <aside></aside></div>

div {    display: -webkit-box;}div > nav {    width: 200px;}div > div {    -webkit-box-flex: 1;}div > aside {    -webkit-box-flex: 2;}

優點是不會出現1px問題,也不需要設定子項目為inline-block,很方便。另外,設定display: box之後,子項目會自動變成等高。這在某些情境下很方便,但是也不適用於另外一些情境。最後display: box,在老的瀏覽器上支援不好,所以這種方式沒有老技巧那麼通用。但是隨著瀏覽器日趨標準,我覺得慢慢就不是問題了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.