前端技術-布局解決方案


前端技術-布局解決方案

一、居中布局

1.水平居中

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

 

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

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

 

不定寬塊狀元素

①inline-block + text-align

c81f4038f42b4b38b045986d16940fa8

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

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

②table + margin

clipboard

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

image

③absolute + transform

c6f540d49b194156b1b732ee50633004

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

④flex + justify-content

4f61f79403c24408b268d50b9fb0980f

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

也可以

image

⑤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屬性會設置單元格內容的對齊方式

vertical-align:middle;

定寬塊狀元素

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

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

不定寬塊狀元素

①table-cell + vertical-align

d2ff8513b7624de89d2166266e2e5f01

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

②absolute + transform

clipboard[7]

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

③felx + align-items

01d41c9caf7f403da443f758a105046f

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

5c8564b27fe14d8c9f9b6a8ea0242d60

兼容性較好。

②absolute + transform

64406520ed7345ea8d7f495f78d64277

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

③felx + justify-content + align-items

9ac65f18277245dfbc2aabd76f552c79

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審查任何一個網頁的元素都會看到一個盒模型。

256156764299

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的中間位置,如下圖:

image

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

image

比如,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

ec32de5d80f349359475d1ad3009ef25

兼容ie6

0dd9c2b8b7f645e88b4cb30b7925754e

兼容性好。

②float + overflow

image

不兼容ie6。

③table

image

兼容ie8及以上。

④flex

image

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

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

定寬列樣式基本相同。

fb77cf849112413b97c94b387938226f

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

這樣的布局,自適應那部分的樣式應不涉及寬度相關設置

①float + overflow

clipboard[11]

②table

ed6bad568fe041718953be9cab7c2f39

③flex

image

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

不定寬列樣式基本相同。

image

三、等列布局

3e32426f53c04b60a10eb6fe30bdbcd5

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

效果:

a7519c2a526647fdb978047ee49798de

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

clipboard[13]

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

2、float

b6c3c0b7767e45a181f37ed4a8ac4d75

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

3、table

85fafb0328da4b8da36582c3046d917b

樣式與結構藕合性低

4、flex

clipboard[15]

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

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

clipboard[17]

1、table(自身等高)

image

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

image

2、felx(默認等高)

image

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

3、float(偽等高)

image

原理:設置margin,並隱藏。

頁面布局很重要,要合理規划。

-------------------------------------------------------------------------------------------------------------------------------------

轉載需注明轉載字樣,標注原作者和原博文地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM