成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

css常用技巧整理-布局綜述篇

endiat / 1073人閱讀

摘要:效果圖為了讓效果更明顯,特意設(shè)置了兩邊字體大小不同關(guān)鍵代碼父容器子容器這里要提一下的是,只對(duì)于內(nèi)聯(lián)元素或者內(nèi)聯(lián)內(nèi)容有效,比如說為塊級(jí)元素標(biāo)簽設(shè)置行高,實(shí)際上是為標(biāo)簽中的內(nèi)聯(lián)文字設(shè)置了行高。允許指定負(fù)長(zhǎng)度值和百分比值。

前言

先扯一段廢話來引入好了。又很久沒有寫文章了(間接性躊躇滿志,持續(xù)性混吃等死),幾個(gè)月了登上來看到有人收藏和點(diǎn)贊,感到很慚愧,最近主要精力花費(fèi)在react和redux,在寫項(xiàng)目的過程中發(fā)現(xiàn)當(dāng)前學(xué)習(xí)重心偏向js和框架學(xué)習(xí),css的知識(shí)不夠扎實(shí),正好碰到公司的技術(shù)大牛分享css心得,借此機(jī)會(huì)恰好梳理一下自己的知識(shí)。

本篇的內(nèi)容主要是pc端的常規(guī)布局,說到這里,雖然目前flex布局和grid布局比較火,用起來也確實(shí)很方便,但是這兩個(gè)方案有個(gè)比較致命的地方--需要高版本瀏覽器的支持(IE10以上),而很多項(xiàng)目需要考慮到IE8以下的兼容,所以目前在pc端項(xiàng)目中仍然使用一些常規(guī)的布局方案。

正文

為了更容易理解,還是采用舉例的方式進(jìn)行知識(shí)點(diǎn)說明

水平布局類 一側(cè)元素固定寬度,另一側(cè)元素自動(dòng)填充滿父容器

案例1:比如需要寫這樣一個(gè)評(píng)論區(qū)域,左側(cè)是固定寬度的區(qū)域放置評(píng)論者的頭像,右側(cè)是評(píng)論的內(nèi)容和信息等

這時(shí)候可以這樣寫

 .left{
    position:absolute;
    width:200px;
  }
  .right{
    padding-left:200px;
  }
一側(cè)不定寬,另一側(cè)元素自動(dòng)填充滿父容器

案例2:如果把上個(gè)案例左邊的頭像換成評(píng)論者昵稱,由于昵稱長(zhǎng)度不一定,所以左側(cè)的寬度不能寫死,此時(shí)采用如下寫法:

  .left{
    float: left;
  }
  .right{
   overflow: auto;  }

這種寫法的原理是觸發(fā)右邊元素的BFC特性(關(guān)于bfc的詳細(xì)介紹不在本篇提出,網(wǎng)上有比較多的文章介紹),可以先簡(jiǎn)單的說一下,BFC的簡(jiǎn)單來說,主要是使元素成為一個(gè)獨(dú)立的容器,不受外界因素的影響。這種寫法也可以用在有側(cè)邊欄的頁面布局上,以及常見的帶有標(biāo)題和時(shí)間戳的文章列表項(xiàng)上,看下面的例子:

類似于上圖這種,需要顯示文章標(biāo)題和發(fā)布時(shí)間情況,可能有些人會(huì)采取左側(cè)標(biāo)題左浮動(dòng),右側(cè)時(shí)間戳右浮動(dòng)的寫法來寫,這樣的寫法其實(shí)是不夠穩(wěn)健的:如果標(biāo)題的長(zhǎng)度太長(zhǎng),或者說整個(gè)容器的寬度變小的時(shí)候,效果會(huì)變成這樣:右側(cè)的元素會(huì)被擠到下一行去

,而采用上面的寫法時(shí)是這樣的:

如果再配合上css的文字超出部分省略號(hào),就可以變成這種效果:當(dāng)容器寬度小的時(shí)候,標(biāo)題根據(jù)長(zhǎng)度自適應(yīng)顯示。

(關(guān)于white-space這個(gè)屬性,在后續(xù)的文章會(huì)再提到,占個(gè)坑)
關(guān)鍵代碼:

.left{
    float: left;
    background-color: lightpink;
    text-overflow: ellipsis;
    max-width: 171px;
    overflow: hidden;
    white-space: nowrap;
  }
  .right{
    overflow: auto;
    background-color: lightblue;
  }
水平居中類

對(duì)于定寬元素,直接使用margin:0 auto;(其實(shí)只有左右是auto即可 上下的可以設(shè)置其它值):

.inner{
      width: 300px;
      height:400px;
      margin: 0 auto;
    }

對(duì)于非定寬的元素,在父容器上使用text-align:center即可

.box{
      text-align:center;
    }

以上兩種都比較簡(jiǎn)單和常見,不再贅述。

垂直居中類 文字(內(nèi)聯(lián))內(nèi)容的垂直居中

案例3:還是剛剛上面的文章列表項(xiàng),如果需要讓標(biāo)題和時(shí)間戳都垂直居中, 那么可以讓子元素的line-height值等于li的高度,即可實(shí)現(xiàn)內(nèi)部的文字居中。
效果圖(為了讓效果更明顯,特意設(shè)置了兩邊字體大小不同):

關(guān)鍵代碼:

    //父容器
   .box{
        height:40px;
    }
    //子容器
    .inner{
        line-height:40px;
    }
       

這里要提一下的是,line-hight只對(duì)于內(nèi)聯(lián)元素或者內(nèi)聯(lián)內(nèi)容有效,比如說為塊級(jí)元素p標(biāo)簽設(shè)置行高,實(shí)際上是為p標(biāo)簽中的內(nèi)聯(lián)文字設(shè)置了行高。(行高的詳細(xì)計(jì)算也不在本文贅述,后續(xù)看情況是否另寫)

塊盒的垂直居中

案例4:假設(shè)現(xiàn)在我們需要寫一個(gè)工具條,工具條的高度不確定,工具條內(nèi)的圖標(biāo)高度有可能不一樣,但是都要垂直居中。 目標(biāo)效果圖:

像上面這種效果,可能會(huì)有人提出對(duì)不同的圖標(biāo)使用不同margin:top的值來使它們強(qiáng)制垂直居中,但是這樣的寫法是很不方便的,如果工具欄的高度有所變化,需要進(jìn)行相應(yīng)調(diào)整。比較合適的寫法是像下面這樣:

//父容器
.toolbar{
    font-size:0
    height:300px;
}
  .toolbar:after{
    content:"";
    display: inline-block;
    vertical-align: middle;
    width: 0;
    height: 100%;
  }
//子容器
  .inner{
    display: inline-block;
    vertical-align: middle;
  }

這個(gè)例子可能需要詳細(xì)解釋下。首先先問一個(gè)問題吧:vertical-align: middle;這個(gè)屬性是怎么生效的?字面上翻譯過來是“垂直方向居中”,那請(qǐng)問這里的垂直方向居中是以什么為參照物的呢?,
css2.1里面提到:

for inline non-replaced elements, the box used for alignment is the box whose height is the "line-height" (containing the box"s glyphs and the half-leading on each side, see above). For all other elements, the box used for alignment is the margin box.
在w3c上是這樣描述的:
該屬性定義行內(nèi)元素的基線相對(duì)于該元素所在行的基線的垂直對(duì)齊。允許指定負(fù)長(zhǎng)度值和百分比值。這會(huì)使元素降低而不是升高。在表單元格中,這個(gè)屬性會(huì)設(shè)置單元格框中的單元格內(nèi)容的對(duì)齊方式。

簡(jiǎn)單的來說,可以認(rèn)為這些設(shè)置了inline-block內(nèi)部塊盒,它們vertical-align的是相對(duì)于父容器的行高來設(shè)置的。好了,第二個(gè)關(guān)鍵點(diǎn)是,在上面的案例中 我們并不確定父元素box的行高,那這時(shí)候父元素box的行高就等于子行內(nèi)元素中高度最高的一個(gè),對(duì)于上面?zhèn)晤悓傩缘淖饔么蠹铱隙ǘ贾?,相?dāng)于給box添加一個(gè)子元素,由于我們給這個(gè)偽類設(shè)置了inline-block,使之具有內(nèi)聯(lián)元素的特征,又設(shè)置了高度為100%,那么當(dāng)父容器具有固定高度時(shí),這個(gè)偽類元素能保證,父容器的行高等于高度,從而保證了其他元素的vertical-align: middle;能夠真正相對(duì)于父容器的高度居中

還有一點(diǎn)就是,使用inline-block的元素會(huì)導(dǎo)塊級(jí)元素出現(xiàn)間隙(具體的原因關(guān)系到inline-block的屬性特性,本文暫時(shí)不提),通用的解決方案是給父容器加上font-size:0

絕對(duì)定位元素的居中

對(duì)于已知寬高的絕對(duì)定位元素,可以簡(jiǎn)單的這樣寫:

.inner {
   position: absolute;
    left:50%;
    top:50%;
    width: 100px;
    height: 100px;
    margin-left: -50px;
    marigin-right: -50px;
}

關(guān)鍵思路就是設(shè)置負(fù)邊距為自身寬高的一半。
如果在ie9以上,可以使用transform屬性簡(jiǎn)化代碼,此時(shí)可以不需要知道元素自身的寬高

.inner {
   position: absolute;
    left:50%;
    top:50%;
    width: 100px;
    height: 100px;
    transform: translate(-50%,-50%);
}
小結(jié)

本文主要是對(duì)pc端常用的一些布局寫法做了整理,總體上還是偏向于在某種情況下怎么做的思路來寫的, 其實(shí)其中很多的東西值得深入研究,比如BFC,line-heightdisplay:inline-block的一些內(nèi)容,但是由于篇(lan)幅(duo)的關(guān)系無法在文中詳細(xì)說明,后續(xù)再一一補(bǔ)上吧(如果懶癌沒有發(fā)作的話,畢竟每次寫文章之前寫結(jié)構(gòu)、畫圖、寫代碼、組織語言都要花費(fèi)一番功夫,寫完一次都會(huì)恐懼一段時(shí)間。。。)還有就是,很感謝那些支持和關(guān)注的人,你們給了我前進(jìn)的動(dòng)力。
然后是慣例:如果這篇文章對(duì)你有幫助,請(qǐng)大方的點(diǎn)收藏和推薦吧,以上內(nèi)容屬于個(gè)人見解,如果有不同意見,歡迎指出和探討。請(qǐng)尊重作者的版權(quán),轉(zhuǎn)載請(qǐng)注明出處,如作商用,請(qǐng)與作者聯(lián)系,感謝!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/112423.html

相關(guān)文章

  • [譯]148個(gè)資源讓你成為CSS專家

    摘要:層疊樣式表二修訂版這是對(duì)作出的官方說明。速查表兩份表來自一份關(guān)于基礎(chǔ)特性,一份關(guān)于布局。核心第一篇一份來自的基礎(chǔ)參考指南簡(jiǎn)寫速查表簡(jiǎn)寫形式參考書使用層疊樣式表基礎(chǔ)指南,包含使用的好處介紹個(gè)方法快速寫成高質(zhì)量的寫出高效的一些提示。 迄今為止,我已經(jīng)收集了100多個(gè)精通CSS的資源,它們能讓你更好地掌握CSS技巧,使你的布局設(shè)計(jì)脫穎而出。 CSS3 資源 20個(gè)學(xué)習(xí)CSS3的有用資源 C...

    impig33 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡(jiǎn)介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡(jiǎn)介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    muddyway 評(píng)論0 收藏0
  • HTML-CSS

    摘要:但是,從字體上來說雪碧圖制作,使用以及相關(guān),圖文。由于采用了編譯,所以能夠保證在瀏覽器不支持標(biāo)準(zhǔn)布局的情況下,回滾到舊版本的,保證移動(dòng)設(shè)備中能呈現(xiàn)出一樣的布局效果。我不想陷入和的紛爭(zhēng),但是有一件事是確定的極大的提升了移動(dòng)端 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問題:怎樣通過 CSS 簡(jiǎn)單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開始學(xué)習(xí) CSS 的時(shí)候,看到 ...

    xiaokai 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<