編寫你的專屬CSS框架-Grid System

對于任何CSS框架而言網(wǎng)格系統(tǒng)都是最基礎(chǔ)的部分蛆挫。

CSS網(wǎng)格包含的要素

Creating Your Own CSS Grid System這篇文章的配圖太棒了,這里就直接用了...

  • container 容器
  • row 行
  • column 列
  • gutter 空隙

最普遍的Grid實現(xiàn)方式

就是類似于Bootstrap提供的分欄式柵格系統(tǒng),通過排方塊的方式布局揭璃,通常有很多尺寸的塊讓你挑選狮斗,一般提供12欄風(fēng)格。這些方案通常使用float和inline-block的方式實現(xiàn)补疑,一個典型的6欄式Grid實現(xiàn)方式如文章Creating Your Own CSS Grid System所述歧沪,代碼如下:

.container {
    width: 100%;
    max-width: 1200px;
    margin: auto;
}

.container * {
    box-sizing: border-box;
}

.row::before,
.row::after {
    content: "";
    display: table;
    clear: both;
}

[class*='col-'] {
    float: left;
    min-height: 1px;
    width: 16.66%;
    padding: 12px;
}

.clo-1 {
    width: 16.66%;
}

.col-2 {
    width: 33.33%;
}

.col-3 {
    width: 50%;
}

.col-4 {
    width: 66.664%;
}

.clo-5 {
    width: 83.33%;
}

.clo-6 {
    width: 100%;
}

不過這些實現(xiàn)方式都有一定的缺點,摘錄Better, Simpler Grid Systems中的片段莲组。

Using floats requires clearing them which has a whole host of layout issues, most notoriously that clearing an element sometimes forces it below an unrelated part of the page (take this Bootstrap issue for example). In addition, clearing floats usually requires using both before and after pseudo-elements, preventing you from using them for something else.

Inline block layouts must address the problem of white-space between inline-block items, and all of the solutions to that problem are hacky and annoying.

總的來說就是float的clearfix占用了before和after偽類以及會導(dǎo)致清除浮動后的后遺癥诊胞,inline-block有默認(rèn)的空白間隙問題。而flexbox就是為布局而生,很多之前CSS無法解決的問題遇到Flexbox迎刃而解撵孤。

使用flexbox來完成柵格系統(tǒng)

如果你還不知道Flexbox是什么迈着,可以看阮老師的Flex 布局教程:語法篇實戰(zhàn)篇,語法可能比較枯燥邪码,可以直接看實戰(zhàn)裕菠,然后看到不知道的回頭看語法。布局方面r阮老師參考了Solved by Flexbox 闭专,這篇文章可以用來學(xué)習(xí)有了Flex之后解決的CSS被詬病的問題奴潘。

目前我看到的最好的解決方案就是更棒,更簡潔的柵格系統(tǒng)影钉,以及根據(jù)這篇文章實現(xiàn)的milligram的柵格系統(tǒng)画髓。這篇文章中作者理想的柵格系統(tǒng)的特性如下:

  • 每一行里的每一個柵格默認(rèn)都是同寬同高。默認(rèn)自適應(yīng)平委。
  • 為了足夠靈活奈虾,能夠添加尺寸屬性到單獨的柵格中。沒有添加的肆汹,仍然簡單地平分剩下的可用空間愚墓。
  • 支持響應(yīng)式布局,可以添加媒體查詢到柵格中昂勉。
  • 每一個柵格可以在純直方向上置頂浪册,置底,劇中岗照。
  • 如果讓所有柵格擁有一致的大小和對其方式村象,在容器上添加屬性,子元素能夠繼承攒至,而不需要無意義的重復(fù)厚者。
  • 柵格能夠任意的嵌套。

容器


容器的作用在于限定網(wǎng)格系統(tǒng)的寬度迫吐,通常設(shè)置為100%库菲,一般會用max-width限定寬度,這里我們用1200p志膀,然后居中熙宇,margin auto就好。一個典型的container如下:

.container{
    margin: 0 auto;
    max-width: 120.0rem;
    padding: 0 2.0rem;
    width: 100%;
}

行Row


既然我們用Flexbox實現(xiàn)溉浙,那么Row就是Flexbox容器烫止,主軸為垂直方向,起點在上沿戳稽。

.row {
    display: flex;
}

列Column

 .column {
        display: block;
        flex: 1;
    }

Flex對齊方式

對齊Flexbox容器中的內(nèi)容

.row {
    &.row-top      { align-items: flex-start; }
    &.row-middle   { align-items: center; }
    &.row-bottom   { align-items: flex-end; }
    &.row-stretch  { align-items: stretch; }
    &.row-baseline { align-items: baseline; }
    &.row-left     { justify-content: flex-start; }
    &.row-center   { justify-content: center; }
    &.row-right    { justify-content: flex-end; }
    &.row-between  { justify-content: space-between; }
    &.row-around   { justify-content: space-around; }
}

輔助類(欄與偏移)

參考Bootstrap的12欄系統(tǒng)馆蠕。

.column {
    &.col-1    { flex: 0 0 calc(100% * 1 / 12); }
    &.col-2    { flex: 0 0 calc(100% * 2 / 12); }
    &.col-3    { flex: 0 0 calc(100% * 3 / 12); }
    &.col-4    { flex: 0 0 calc(100% * 4 / 12); }
    &.col-5    { flex: 0 0 calc(100% * 5 / 12); }
    &.col-6    { flex: 0 0 calc(100% * 6 / 12); }
    &.col-7    { flex: 0 0 calc(100% * 7 / 12); }
    &.col-8    { flex: 0 0 calc(100% * 8 / 12); }
    &.col-9    { flex: 0 0 calc(100% * 9 / 12); }
    &.col-10   { flex: 0 0 calc(100% * 10 / 12); }
    &.col-11   { flex: 0 0 calc(100% * 11 / 12); }
}

當(dāng)然少不了對應(yīng)的偏移

.column {
    &.col-off-1 {margin-left: calc(100% * 1 / 12); }
    &.col-off-2 {margin-left: calc(100% * 2 / 12); }
    &.col-off-3 {margin-left: calc(100% * 3 / 12); }
    &.col-off-4 {margin-left: calc(100% * 4 / 12); }
    &.col-off-5 {margin-left: calc(100% * 5 / 12); }
    &.col-off-6 {margin-left: calc(100% * 6 / 12); }
    &.col-off-7 {margin-left: calc(100% * 7 / 12); }
    &.col-off-8 {margin-left: calc(100% * 8 / 12); }
    &.col-off-9 {margin-left: calc(100% * 9 / 12); }
    &.col-off-10 {margin-left: calc(100% * 10 / 12); }
    &.col-off-11 {margin-left: calc(100% * 11 / 12); }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子互躬,更是在濱河造成了極大的恐慌播赁,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吨铸,死亡現(xiàn)場離奇詭異行拢,居然都是意外死亡祖秒,警方通過查閱死者的電腦和手機(jī)诞吱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竭缝,“玉大人房维,你說我怎么就攤上這事√е剑” “怎么了咙俩?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長湿故。 經(jīng)常有香客問我阿趁,道長,這世上最難降的妖魔是什么坛猪? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任脖阵,我火速辦了婚禮,結(jié)果婚禮上墅茉,老公的妹妹穿的比我還像新娘命黔。我一直安慰自己,他們只是感情好就斤,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布悍募。 她就那樣靜靜地躺著,像睡著了一般洋机。 火紅的嫁衣襯著肌膚如雪坠宴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天绷旗,我揣著相機(jī)與錄音喜鼓,去河邊找鬼。 笑死刁标,一個胖子當(dāng)著我的面吹牛颠通,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膀懈,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼顿锰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硼控,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤刘陶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后牢撼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匙隔,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年熏版,在試婚紗的時候發(fā)現(xiàn)自己被綠了纷责。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡撼短,死狀恐怖再膳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曲横,我是刑警寧澤喂柒,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站禾嫉,受9級特大地震影響灾杰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜熙参,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一艳吠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尊惰,春花似錦讲竿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膀捷,卻和暖如春迈嘹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背全庸。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工秀仲, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壶笼。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓神僵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親覆劈。 傳聞我的和親對象是個殘疾皇子保礼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案沛励? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,759評論 1 92
  • 一:在制作一個Web應(yīng)用或Web站點的過程中,你是如何考慮他的UI炮障、安全性目派、高性能、SEO胁赢、可維護(hù)性以及技術(shù)因素的...
    Arno_z閱讀 1,176評論 0 1
  • 簡介 CSS Grid布局 (又名"網(wǎng)格")企蹭,是一個基于二維網(wǎng)格布局的系統(tǒng),旨在改變我們基于網(wǎng)格設(shè)計的用戶界面方式...
    咕咚咚bells閱讀 2,513評論 0 4
  • 神園屠夢(全目錄) 書音醉書入瘋魔智末,姑姑怒火燒沈園谅摄; 萬神園宴皆陰謀,夢姬當(dāng)年神賭約吹害。 ——天屠計劃—— 萬神宴開...
    金獲大山閱讀 202評論 1 1
  • 洶涌澎湃的大海邊螟凭,有一群玲瓏剔透的小貝殼,它們穿著條紋似的小花衣它呀,手拉著手在海邊跑。哇棒厘!他們身上的每一道劃痕啊纵穿,不...
    靜者居記閱讀 590評論 0 3