Html和CSS布局技巧

單列布局水平居中

水平居中

水平居中的頁面布局中最為常見的一種布局形式掠哥,多出現(xiàn)于標題,以及內(nèi)容區(qū)域的組織形式秃诵,下面介紹四種實現(xiàn)水平居中的方法(注:下面各個實例中實現(xiàn)的是child元素的對齊操作续搀,child元素的父容器是parent元素)


使用inline-block 和 text-align實現(xiàn)

.parent{text-align: center;}

.child{display: inline-block;}

優(yōu)點:兼容性好;

不足:需要同時設(shè)置子元素和父元素


使用margin:0 auto來實現(xiàn)

.child{width:200px;margin:0 auto;}

優(yōu)點:兼容性好

缺點: 需要指定寬度


使用table實現(xiàn)

.child{display:table;margin:0 auto;}

優(yōu)點:只需要對自身進行設(shè)置

不足:IE6,7需要調(diào)整結(jié)構(gòu)


使用絕對定位實現(xiàn)

.parent{position:relative;}

/*或者實用margin-left的負值為盒子寬度的一半也可以實現(xiàn)菠净,不過這樣就必須知道盒子的寬度禁舷,但兼容性好*/

.child{position:absolute;left:50%;transform:translate(-50%);}

不足:兼容性差,IE9及以上可用


實用flex布局實現(xiàn)

/*第一種方法*/

.parent{display:flex;justify-content:center;}

/*第二種方法*/

.parent{display:flex;}

.child{margin:0 auto;}

缺點:兼容性差,如果進行大面積的布局可能會影響效率


垂直居中

vertical-align

“inline-block依賴型元素”毅往,說的是,只有一個元素屬于inline或是inline-block(table-cell也可以理解為inline-block水平)水平牵咙,其身上的vertical-align屬性才會起作用。

在使用vertical-align的時候攀唯,由于對齊的基線是用行高的基線作為標記洁桌,故需要設(shè)置line-height或設(shè)置display:table-cell;

/*第一種方法*/

.parent{display:table-cell;vertical-align:middle;height:20px;}

/*第二種方法*/

.parent{display:inline-block;vertical-align:middle;line-height:20px;}

實用絕對定位

.parent{position:relative;}

.child{positon:absolute;top:50%;transform:translate(0,-50%);}

實用flex實現(xiàn)

.parent{display:flex;align-items:center;}

水平垂直全部居中

利用vertical-align,text-align,inline-block實現(xiàn)

.parent{display:table-cell;vertical-align:middle;text-align:center;}

.child{display:inline-block;}

利用絕對定位實現(xiàn)

.parent{position:relative;}

.child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);}

利用flex實現(xiàn)

.parent{display:flex;justify-content:center;align-items:center;}


多列布局左列定寬,右列自適應(yīng)

該布局方式非常常見侯嘀,適用于定寬的一側(cè)常為導(dǎo)航另凌,自適應(yīng)的一側(cè)為內(nèi)容的布局

利用float+margin實現(xiàn)

.left{float:left;width:100px;}

.right{margin-left;margin-left:100px;}

注:IE6會有3px的bug

利用float+margin(fix)實現(xiàn)

<div class="parent">
? ? ? ? <div class="left"></div>
? ? ? ? <div class="right-fix">
????????????????<div class="right"></div>
????????</div>
</div>

.left{width:100px;float:left;}

.right-fix{width:100%;margin-left:-100px;float:right;}

.right{margin-left:100px;}


使用float+overflow實現(xiàn)

.left{width:100px;float:left;}

.right{overflow:hidden;}

overflow:hidden,觸發(fā)bfc模式戒幔,浮動無法影響低飒,隔離其他元素取劫,IE6不支持,左側(cè)left設(shè)置margin-left當作left與right之間的邊距,右側(cè)利用overflow:hidden 進行形成bfc模式

如果我們需要將兩列設(shè)置為等高端仰,可以用下述方法將“背景”設(shè)置為等高,其實并不是內(nèi)容的等高

.left{width:100px;float:left;}

.right{overflow:hidden;}

.parent{overflow:hidden;}

.left,.right{padding-bottom:9999px;margin-bottom:-9999px;}


使用table實現(xiàn)

.parent{display:table;table-layout:fixed;width:100%;}

.left{width:100px;}

.right,.left{display:table-cell;}

實用flex實現(xiàn)

.parent{display:flex;}

.left{width:100px;}

.right{flex:1;}

利用右側(cè)容器的flex:1跌前,均分了剩余的寬度钮糖,也實現(xiàn)了同樣的效果。而align-items 默認值為stretch枢析,故二者高度相等

右列定寬玉掸,左列自適應(yīng)

實用float+margin實現(xiàn)

.parent{background:red;height:100px;margin:0 auto;}

.left{background:green;margin-right:-100px;width:100%;float:left;}

.right{float:right;width:100px;background:blue;}

使用table實現(xiàn)

.parent{display:table;table-layout:fixed;width:100%;}

.left{display:table-cell;}

.right{width:100px;display:table-cell;}

實用flex實現(xiàn)

.parent{display:flex;}

.left{flex:1;}

.right{width:100px;}

兩列定寬,一列自適應(yīng)

基本html結(jié)構(gòu)為父容器為parent,自容器為left,center,right.其中醒叁,left,center定寬司浪,right自適應(yīng)

利用float+margin實現(xiàn)

.left,.center{float:left:width:200px;}

.right{margin-left:400px;}

利用float+overflow實現(xiàn)

.left,.center{float:left:width:200px;}

.right{overflow:hidden;}

利用table實現(xiàn)

.parent{display:table;table-layout:fixed;width:100%;}

.left,.center,.right{display:table-cell;}

.left,.center{width:200px;}

利用flex實現(xiàn)

.parent{display:flex;}

.left,.center{width:100px;}

.right{flex:1}

兩側(cè)定寬,中欄自適應(yīng)

利用float+margin實現(xiàn)

.left{width:100px;float:left;}

.center{float:left;width:100%;margin-right:-200px;}

.right{width:100px;float:right;}


利用table實現(xiàn)

.parent{width:100%;display:table;table-layout:fixed}

.left,.center,.right{display:table-cell;}

.left{width:100px;}

.right{width:100px;}

利用flex實現(xiàn)

.parent{display:flex;}

.left{width:100px;}

.center{flex:1;}

.right{width:100px;}

一列不定寬把沼,一列自適應(yīng)

利用float+overflow實現(xiàn)

.left{float:left;}

.right{overflow:hidden;}


利用table實現(xiàn)

.parent{display:table;table-layout:fixed;width:100%;}

.left{width:0.1%;}

.left,.right{display:table-cell;}

利用flex實現(xiàn)

.parent{display:flex;}

.right{flex:1;}

多列等分布局

多列等分布局常出現(xiàn)在內(nèi)容中啊易,多數(shù)為功能的,同階級內(nèi)容的并排顯示等饮睬。

實用float實現(xiàn)

.parent{margin-left:-20px}/*假設(shè)列之間的間距為20px*/

.column{float:left;width:25%;padding-left:20px;box-sizing:border-box;}


利用table實現(xiàn)

.parent-fix{margin-left:-20px;}

.parent{display:table;table-layout:fixed;width:100%;}

.column{display:table-cell;padding-left:20px;}


利用flex實現(xiàn)

.parent{display:flex;}

.column{flex:1;}

.column+.column{margin-left:20px;}


九宮格布局

使用table實現(xiàn)?

.parent{display:table;table-layout:fixed;width:100%;}

.row{display:table-row;}

.item{display:table-cell;width:33.3%;height:200px;}

實用flex實現(xiàn)

.parent{display:flex;flex-direction:column;}

.row{height:100px;display:flex;}

.item{width:100px;background:red;}

全屏布局


利用絕對定位實現(xiàn)

html,body,parent{height:100%;overflow:hidden;}

.top{position:absolute:top:0;left:0;right:0;height:100px;}

.left{position:absolute;top:100px;left:0;bottom:50px;width:200px;}

.right{position:absolute;overflow:auto;left:200px;right:0;top:100px;bottom:50px;}

.bottom{position:absolute;left:0;right:0;bottom:0;height:50px;}


利用flex實現(xiàn)

.parent{display:flex;flex-direction:column;}

.top{height:100px;}

.bottom{height:50px;}

.middle{flex:1;display:flex;}

.left{width:200px;}

.right{flex:1;overflow:auto;}

響應(yīng)式布局

meta標簽的實用

設(shè)置布局寬度等于設(shè)備寬度租谈,布局viewport等于度量viewport

媒體查詢

HTML 4和CSS 2目前支持為不同的媒體類型設(shè)定專有的樣式表, 比如, 一個頁面在屏幕上顯示時使用無襯線字體,

而在打印時則使用襯線字體, screen 和 print 是兩種已定義的媒體類型, 媒體查詢讓樣式表有更強的針對性,

擴展了媒體類型的功能;媒體查詢由媒體類型和一個或多個檢測媒體特性的條件表達式組成,

媒體查詢中可用于檢測的媒體特性有width、height和color(等), 使用媒體查詢, 可以在不改變頁面內(nèi)容的情況下,

為特定的一些輸出設(shè)備定制顯示效果。

語法

@media screen and (max-width:960px){....}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末割去,一起剝皮案震驚了整個濱河市窟却,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呻逆,老刑警劉巖夸赫,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咖城,居然都是意外死亡茬腿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門宜雀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來切平,“玉大人,你說我怎么就攤上這事辐董〗野螅” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵郎哭,是天一觀的道長他匪。 經(jīng)常有香客問我,道長夸研,這世上最難降的妖魔是什么邦蜜? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮亥至,結(jié)果婚禮上悼沈,老公的妹妹穿的比我還像新娘。我一直安慰自己姐扮,他們只是感情好絮供,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茶敏,像睡著了一般壤靶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惊搏,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天贮乳,我揣著相機與錄音,去河邊找鬼恬惯。 笑死向拆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的酪耳。 我是一名探鬼主播浓恳,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了颈将?” 一聲冷哼從身側(cè)響起梢夯,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吆鹤,沒想到半個月后厨疙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洲守,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡疑务,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梗醇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片知允。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叙谨,靈堂內(nèi)的尸體忽然破棺而出温鸽,到底是詐尸還是另有隱情,我是刑警寧澤手负,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布涤垫,位于F島的核電站,受9級特大地震影響竟终,放射性物質(zhì)發(fā)生泄漏蝠猬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一统捶、第九天 我趴在偏房一處隱蔽的房頂上張望榆芦。 院中可真熱鬧,春花似錦喘鸟、人聲如沸匆绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崎淳。三九已至,卻和暖如春愕把,著一層夾襖步出監(jiān)牢的瞬間凯力,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工礼华, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咐鹤,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓圣絮,卻偏偏與公主長得像祈惶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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