CSS布局


title: CSS布局
date: 2016-09-14 22:55
tags: CSS


0x00 display 屬性

display屬性可以對元素的屬性進行轉換,使塊級元素具有行級元素的特征,使行級元素具有塊元素的特征。

屬性值|描述
:---:|:---:|:---
none|隱藏元素
inline|轉換行級元素
block|轉換塊級元素
inline-block|行內塊級元素

關于 inline 常見的例子是:把 li 元素修改成 inline,制作成水平菜單。

去掉 img 標簽產生的下邊距的方法是將 img 設置: display:block.或者設置:


inline-block

簡單的講設置了 inline-block 屬性的元素既擁有了 block 元素可以設置 widthheight 的特性,又保持了inline元素不換行的特性。

inline-block 空白符

其實有 inline-block 空白符并不是怪 inline-block ,而是 inline ,因為默認情況下 inline 就是存在空白符的。

我們編寫代碼時寫的空格,換行都會產生空白符。在瀏覽器中,空白符是不會被瀏覽器忽略的,多個連續的空白符瀏覽器會自動將其合并成一個。

<a href="">1</a>
<a href="">2</a>
<a href="">3</a>
<a href="">4</a><a href="">5</a><a href="">6</a>

如上:1,2,3,4之間在瀏覽器中顯示時將存在空隙,4,5,6,之間將不存在空隙。

要去除空白符產生的間隙,可以通過設置 font-size 屬性控制各個元素間產生的間隙的大小。

.advertisement {
        font-size: 0px;
    }
    .advertisement a{
        font-size: 14px;
        margin:0;
        padding: 0;
    }

inline-block 應用

網頁頭部菜單

一個應用場景是,除了使用 floatli 進行橫向導航布局外,還可以使用 inline-block 進行 li 導航設計。當然他們各有優劣,float屬性會造成高度塌陷,需要清除浮動等問題。而 inline-block 則會帶來 空白符 的問題。

內聯塊元素

除了菜單之外,一切需要行內排列并且可設置大小的需求就可以用inline-block來實現。
例如使用a標簽做按鈕時,需要設置按鈕的大小,我們就可以使用inline-block來實現。

inline-block 布局

一個簡單的三欄布局:

.news, .showProduct , .contact{

        display: inline-block;
        width: 30%;
        height: 95%;
        margin: 1em;
    }
    
<div class="contentContainer">
        <div class="content">
        <div class="news">news</div>
        <div class="showProduct">showProduct</div>
        <div class="contact">contact</div>
        </div>
    </div>

vertical-align 屬性會影響到 inline-block 元素,你可能會把它的值設置為 top 。


0x01 margin-auto 與 max-width

位塊級元素設置 width 可以阻止其從左到右撐滿容器,然后使用 margin-auto 屬性來使其水平居中。

#main{
    width:200px
    margin-auto;
}

唯一的問題是,當瀏覽器窗口比元素的寬度還要窄時,瀏覽器會顯示一個水平滾動條來容納頁面。在這種情況下使用 max-width 替代 width可以使瀏覽器更好地處理小窗口的情況。這點在移動設備上顯得尤為重要,

#main{
    maxwidth:200px
    margin-auto;
}

0x02 box-sizing [CSS3]

為了解決布局中的煩人的數學問題,box-sizing 應運而生。

box-sizing 有兩個屬性值:content-box , border-box

content-box

content-box :表示元素的寬度與高度不包括填充padding與邊框border的寬度與高度。對其寬度和高度的設定是對其內容的高度和寬的設定。當padding與border改變時將使其向外擴張。此時內容的高度和寬度不變。

border-box

border-box :表示元素的寬度與高度包括填充padding與邊框border的寬度與高度。對其寬度和高度的設定是對其本身實際高度和寬的設定。當padding與border改變時將使其向內容空間塌陷。此時內容的高度和寬度將隨之改變。

想要頁面上所有的元素都有如此表現,那么可以:

* {
    -webkit-box-sizing:border-box;
    -moz-box-sizing:border-box;
    box-sizing:border-box;
}

0x3 position 屬性

position 屬性一共有四個值: static , relative , absolute , fixed

static

默認值,元素將按照正常文檔流規則排列

relative

相對定位,元素元素仍然處于正常文檔流當中,元素原來的位置將會保留,此后以此元素原來的靜態位置作為參考點。

absolute

絕對定位,元素脫離正常文檔流,不在占據原來的位置,參考已定位 的父元素位置進行偏移。(如果父元素沒有設置定位屬性值(這個值要是非 static)會一層層向上找尋定位參考元素,可以一直追溯到 body 然后根據它的位置偏移)

fixed

固定定位,元素脫離正常文檔流,不再占用原來的位置,此后以瀏覽器的可視區域的四角作為參考點。

如果它一個元素是 position: static,那么它的絕對定位子元素會跳過它直接相對于 body 元素定位。

!Note 何為文檔流?
將窗體自上而下分成一行行,并在每一行中按從左到右的順序排放元素,即為文檔流。
有三種情況將使得元素脫離文檔流,分別是浮動(float left or right)、絕對定位(position:absolute)、固定定位(position:fixed)。

參考來源:
http://www.cnblogs.com/fsjohnhuang/p/3967350.html

CSS 三種定位機制: 文檔流,浮動(float),定位(position)
使用浮動和定位能夠使元素脫離文檔流


0x04 float 浮動屬性

float 屬性可以控制元素浮動的方式為: left, right , none ,inherit

在 CSS 中,任何元素都可以浮動。浮動元素會生成一個 塊級框,而不論它本身是何種元素。

向右浮動,浮動元素將會逆序顯示,向左,則相反。

假如在一行之上只有極少的空間可供浮動元素,那么這個元素會跳至下一行,這個過程會持續到某一行擁有足夠的空間為止。

使用浮動(float)的一個比較疑惑的事情是他們怎么影響包含他們的父元素的。如果父元素只包含浮動元素,那么它的高度就會塌縮為零。

值得注意的是,在同一個父元素中,浮動元素對非浮動元素的影響是,浮動元素將會覆蓋非浮動元素的空間,進而擠壓非浮動元素的內容。

圖片溢出處理

使用 float 一個最簡單的場景就是文字對圖片的環繞,但是這里也存在一個問題,就是當圖片的大小超過了包含該圖片的容器,而且圖片本身是浮動的,那么此時,圖片將會溢出到容器外面。

解決思路是:

  1. 對容器使用 overflow:auto 屬性,那么容器將會自動調整大小區包裹圖片
.img { float:right;}
.containerImg{overflow:auto;}
  1. 對圖片本身進行控制。
.container img{
    float:right;
    width:50%;
}

甚至還能同時使用 min-width 和 max-width 來限制圖片的最大或最小寬度。

清除浮動

clear屬性

為了讓 float 元素不影響其他的元素,可以使用 clear 屬性清除浮動屬性,但是 clear 屬性不是作用于 浮動 元素而是作用于下一元素的。

將浮動元包裹在一起

另外一種是的浮動元素不影響其它元素的方法,就是不清楚浮動而是將所有浮動的元素放在一個父元素中。

使用空 div

我們還可以在浮動元素與非浮動元素之間放置一個空的 div,并為其設置 clear 屬性。

<style type="text/css">

.clear{clear:both}
</style>

<div>
    <div class="float1"></div>
    <div class="float2"></div>
    <div class="clear"></div>
    <p></p>
</div>

0x05 visibility 屬性

屬性值 描述
visible 顯示元素
hidden 隱藏元素
collapse 當在表格元素中使用時,可以隱藏一行或者一列,但被行列占據的空間會留給其他內容使用,該值應用于其它元素,會被呈現為 hidden
visibility:hidden 和 display:none

使用CSS display:none 屬性后,HTML元素(對象)的寬度、高度等各種屬性值都將“丟失”,原有空間回收;而使用 visibility:hidden 屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置仍然存在。


0x06 overflow 屬性

屬性值 描述
visible 溢出內容出現在元素框之外;(默認)
hidden 隱藏溢出內容
auto 自適應索要顯示的內容,需要時產生滾動條
scroll 溢出內容被修剪且始終顯示滾動條

此外, 使用 overflow-x 可以橫向顯示樣式, overflow-y 將縱向顯示樣式。


0x07 flexbox

新的 flexbox 布局模式被用來重新定義CSS中的布局方式。


0x08 所有瀏覽器下的CSS透明度

下面這種方式可以實現所有瀏覽器下的透明度設置:

.transparent {
    zoom:1;
    filter:alpha(opacity=50);
    opacity:0.5;
}

Zoom 屬性是IE瀏覽器的專有屬性,Firefox等瀏覽器不支持。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,796評論 1 92
  • 前言 溫馨提示:本文較長,圖片較多,本來是想寫一篇 CSS 布局方式的,但是奈何 CSS 布局方式種類太多并且實現...
    sunshine小小倩閱讀 3,173評論 0 59
  • CSS布局模型 布局:將元素以正確的大小擺放在正確的位置上 CSS包含3種基本的布局模型流動模型(Flow)浮動模...
    _空空閱讀 1,082評論 0 4
  • 原文地址: http://tt-ghost.github.io/2016/07/14/css布局那點事 說到布局,...
    村頭的貓閱讀 544評論 0 2
  • ReactDOM.render() JSX語法 JSX允許直接在模板中插入JS變量,如果這個變量是一個數組,則會展...
    黃小猛閱讀 356評論 0 0