前端技術-佈局解決方案

原文                 http://www.cnblogs.com/jingwhale/p/4753686.html            

一、居中佈局

1.水平居中

行內元素

如果被設置元素爲  文本、圖片 等行內元素時,水平居中是通過給父元素設置  text-align:center 來實現的。

定寬塊狀元素

當被設置元素爲塊狀元素時用 text-align:center 就不起作用了。滿足定寬和塊狀兩個條件的元素是可以通過設置“左右margin”值爲“auto”來實現居中的。

.center{   
    margin:0 auto;   
    width:300px;   
    height:200px;   }

不定寬塊狀元素

①inline-block + text-align

yieaQb6.jpg%21web

inline-block:ie6、i7不兼容;ie6、i7下可用inline,zoom=1模擬inline-block;

缺點:child中的元素都居中,在child中使用text-align:left。

②table + margin

Jjquq2F.png%21web

ie6/7不兼容display:table;可將結構換成table,例如:

qAvYba.png%21web

③absolute + transform

jyuI3u.jpg%21web

ie9以上兼容,適合移動端。

④flex + justify-content

FVfmYrq.jpg%21web

ie9以上兼容,適合移動端。

也可以

FvymE3.png%21web

⑤float + position

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>Document</title>  <style>    .parent{float:left;position:relative;left:50%;}    .child{position:relative;left:-50%;}  </style></head><body>  <div class="parent">    <div class="child">DEMO</div>  </div></body></html>
2.垂直居中

在表單元格中,這個屬性會設置單元格框中的單元格內容的對齊方式

vertical-align:middle;

定寬塊狀元素

單行文本:垂直居中的方法是通過設置父元素的 height 和 line-height 高度一致來實現的

height:100px;line-height: 100px;

不定寬塊狀元素

①table-cell + vertical-align

qqAV7fY.jpg%21web

ie6/7不兼容display:table;可將結構換成table。

②absolute + transform

NbyMZ3E.png%21web

ie9以上兼容,適合移動端。

③felx + align-items

ZriM7fV.jpg%21web

ie9以上兼容,適合移動端。

3.水平、垂直居中

定寬塊狀元素

.center{   width:300px;    height:200px;    position:absolute;    left:50%;    top:50%;    margin:-100px 0 0 -150px 
}

 

這種方法,要讓DIV水平和垂直居中,必需知道該DIV得寬度和高度,然後設置位置爲絕對位置,距離頁面窗口左邊框和上邊框的距離設置爲50%, 這個50%就是指頁面窗口的寬度和高度的50%,最後將該DIV分別左移和上移,左移和上移的大小就是該DIV寬度和高度的一半。

不定寬塊狀元素

①inline-block + text-align + table-cell + vertical-align

AVf6Rzv.jpg%21web

兼容性較好。

②absolute + transform

zme6F3.jpg%21web

ie9以上兼容,適合移動端。

③felx + justify-content + align-items

qQRjIbM.jpg%21web

ie9以上兼容,適合移動端。

4.js實現水平、垂直居中

原理就是通過js設置DIV的CSS,獲取DIV的左、上的邊距偏移量,邊距偏移量的算法就是用頁面窗口的寬度減去該DIV得寬度,得到的值再除 以2即左偏移量,右偏移量算法相同。注意DIV的CSS設置要在resize()方法中完成,就是每次改變窗口大小時,都要執行設置DIV的CSS,以 jquery爲例,代碼如下:

$(window).resize(function(){ 
  $(".mydiv").css({ 
    position: "absolute", 
    left: ($(window).width() - $(".mydiv").outerWidth())/2, 
    top: ($(window).height() - $(".mydiv").outerHeight())/2   });		
});

此外在頁面載入時,就需要調用resize()。

$(function(){ 
    $(window).resize(); 
});

知識學習: display


行內元素(inline element)塊級元素(block element)
特點①不佔據一整行,隨內容而定,有以下特點:
②不可以設置寬高,也不可以設置行高,其寬度隨着內容增加,高度隨字體大小而改變。
③內聯元素可以設置外邊界,但是外邊界不對上下起作用,只能對左右起作用。
④也可以設置內邊界,但是內邊界在ie6中不對上下起作用,只能對左右起作用。
①總是在新行上開始,佔據一整行;
②高度,行高以及外邊距和內邊距都可控制;
③寬帶始終是與瀏覽器寬度一樣,與內容無關;
④它可以容納內聯元素和其他塊元素。
常用標籤a - 錨點,b - 粗體(不推薦),br - 換行,em - 強調,font - 字體設定(不推薦),i - 斜體,img - 圖片,input - 輸入框,label - 表格標籤,select - 項目選擇,small - 小字體文本,span - 常用內聯容器,定義文本內區塊,strike - 中劃線,strong - 粗體強調div -最常用的塊級元素,dl - 和dt dd搭配使用的塊級元素,form - 交互表單,h1 - 大標題,hr - 水平分隔線,ol - 排序表單,p - 段落,ul - 非排序列表

互相轉換:使用display設置可以使得行內元素擁有塊級元素的特性,反之也可以。

在css中,所有的元素都有盒模型,打開chrome審查任何一個網頁的元素都會看到一個盒模型。

eQruIjQ.png%21web

Position

用Div+CSS進行網站佈局時,做一些浮動層等特殊特殊效 果時要考慮到定位問題。這就要用到Position屬性等。 Position屬性有四個值:  static、fixed、absolute和relative,後面兩個在佈局中的定位裏是經常用到的。



absolute

對象從文檔流中抽取出來,原佔有的位置被後面的對象頂替上來

Top的值表示對象上邊框與瀏覽器窗口頂部的距離

bottom 的值表示對象下邊框與瀏覽器窗口底部的距離

兩者同時存在時,只有Top起作用;如果兩者都未指定,則其頂端將與原文檔流位置一致,即垂直保持位 置不變。

left的值表示對象左邊框與瀏覽器窗口左邊的距離

right的值表示對象右邊框與瀏覽器窗口右邊的距離

兩者同時 存在時,只有left起作用;如果兩者都未指定,則其左邊將與原文檔流位置一致,即水平保持位置不變。

Relative

對象原來佔有的位置保 留,其後面的對象按原來文檔流仍然保持原來的位置

Top的值表示對象相對原位置向下偏移的距離

bottom的值表示對象相對原位置向 上偏移的距離

兩者同時存在時,只有Top起作用。

left的值表示對象相對原位置向右偏移的距離

right的值表示對象相 對原位置向左偏移的距離

兩者同時存在時,只有left起作用。

在Position屬性值爲absolute的同時,如果有一級父對象(無論是父對象還 是祖父對象,或者再高的輩分,一樣)的Position屬性值爲Relative時,則上述的相對瀏覽器窗口定位將會變成相對父對象定位,這對精確定位是 很有幫助的。

vertical-align的解讀

W3C上對vertical-align的定義,大體上可以分爲兩個部分:

第一種用法,“在表單元格中,這個屬性會設置單元格框中的單元格內容的對齊方式。”這很容易理解,如果給一個表格的td加一個 vertical-align:middle的樣式,表格裏面的內容會垂直居中,同樣的如果給一個vertical-align:bottom就會底部對 齊,如果給一個vertical-align:top就會頂部對齊。

第二種用法,“該屬性定義行內元素的基線相對於該元素所在行的基線的垂直對齊。”可以打個比喻:假設有兩個行內元素a和b,a和b都是img,當a加了一個vertical-align:middle樣式之後,b的底部(基線)就會對齊a的中間位置,如下圖:

UNzuum.png%21web

如果a和b都加了一個vertical-align:middle樣式,那麼就互相對齊了對方的中間位置,也就是它們在垂直方向上的中線對齊了,如下圖:

VnY7ja.png%21web

比如,img和span一起出現,要想文字對齊圖片的中間位置,就需要爲圖片添加img{vertical-align:middle;}再比如 input和span連用時,谷歌火狐IE8以上版本里默認的是span在input的中間位置,但ie6/ie7裏,span底部和input底部對 齊,實現統一的辦法就是給input添加input{vertical-align:middle;},要想它們垂直方向上的中線對齊,就同時也爲 span設置span{vertical-align:middle;}

二、多列布局

1、一列定寬 + 一列自適應

①float + margin

byMZJ3.jpg%21web

兼容ie6

3m6bIf.jpg%21web

兼容性好。

②float + overflow

Z7FNZz.png%21web

不兼容ie6。

③table

juum6b.png%21web

兼容ie8及以上。

④flex

vAfmMnB.png%21web

適用於小範圍佈局;兼容性:Internet Explorer 9及更早IE版本不支持彈性框.

2、多列定寬 + 一列自適應

定寬列樣式基本相同。

EFzMzm.jpg%21web

3、不定寬(可以隨left內的寬度改變寬度) + 一列自適應

自適應樣式不涉及寬度相關設置

①float + overflow

vmyAjmM.png%21web

②table

y2iYBju.jpg%21web

③flex

uM3aqiQ.png%21web

4、多列不定寬 + 一列自適應

不定寬列樣式基本相同。

ne63eu2.png%21web

三、等列布局

2YbqEzF.jpg%21web

1、C+G=(W+G)*N

效果:

AFFnau.jpg%21web

如果都是定寬可以設置浮動,2,3,4列margin-left。不定:

byEzum3.png%21web

思想:增加一個間距。不難得出公式。

2、float

Nn6Zf2.jpg%21web

缺點:樣式與結構藕合性較強

3、table

bUbi2q6.jpg%21web

樣式與結構藕合性低

4、flex

FV3uAbe.png%21web

2、3、4margin-left,flex特性自動平均分配。

四、內容不同時,背景等高

fqqEb2R.png%21web

1、table(自身等高)

Yz2qQrA.png%21web

沒有間距,將background-clip:content-box.

 2UfaeiM.png%21web

2、felx(默認等高)

63Ur6fZ.png%21web

align-items側軸對齊伸縮項目,默認stretch:伸縮項目拉伸,填滿整個側軸。

3、float(僞等高)

bqqAfq2.png%21web

原理:設置margin,並隱藏。

頁面佈局很重要,要合理規劃。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章