位置詳解
z-index
文章出處 連結
範例

改變紅框



Red
Green
Blue
疊放順序
(Stacking Order)
HTML document 中的每一個 element 可以被放在其他 element 的前面或是後面。
  • z-index 值相同時, 在文件中排序在後的會疊在上面
  • 有設 position 屬性的 element 會被堆放在沒有 position 屬性(沒有明確指定而是預設的 static position)的 element 上。
  • z-index 只對具有非 static (relative、absolute、fixed) 的 element 有效 。
  • z-index 的設定會創造疊放群組 (stacking context)
疊放群組
(Stacking Contexts)
指的是一組具有相同父元素的 elements 具有相同的疊放順序 (stacking order) 。
  • 疊放群組 (stacking contexts)以一個單一的 DOM 做為根元素,DOM 下的子元素都會被歸類在在疊放順序(stacking order)中的同一個位置。
當一個 element 是文件的根節點的時候 (也就是 <html>) 當一個 element 有非 static value 的 position 屬性以及非 auto 的 z-index 屬性 當一個 element 具有小於 1 的 opacity
position
相關文章 連結一
static 預設的, 不指定的話所有元素皆自動設為static , 指正常文件從左至右、由上而下的排列
absolute
absolute 元件的 CSS top 、 left 、 bottom 、 right 座標原點,是由目前元件延著 DOM Tree 往上找, 找到第一個有「 position : relative 」或「 position : absolute 」元件的左上角。
如果父元件或更上層的元件沒有「 position : relative 」或「 position : absolute 」,則以 body 的左上角為原點。
relative
relative 則是以元件本身的左上角做為 top 、 left 、 bottom 、 right 的座標原點。 更多時候,加上「 position : relative 」,不是為了要位移元件本身, 而是為了作為元件內有「 position : absolute 」子元件的座標原點。
它的位置會以相對於它在正常順序 (指原來配置的空間仍會存在, 兩邊的元素不會因設定而填滿本來的位置, 也不會因元素被移到新位置而被推開) 中的位置來調整. (可以參照範例的第二個)
                                            
//#div6 的座標原點是 #div4 的左上角, #div4 的座標原點是 #div2 的左上角, #div2 的座標原點是 #div2 本身的左上角。
fixed 相對瀏覽器視窗的位置來指定元素的位置 (固定在瀏覽器的某一個位置, 且不隨scrollbar的捲動而移動).
sticky browser 支援度不高, 連chrome也沒有支援
範例
  1. 原始不設定任何position (預設為 static)

  2. root 設為 relative

    與下方的 3 比較 , 注意它的空間仍保留沒有被鄰近的元素所填滿
                                                    
                                                    .div-root {
                                                        position:relative; 
                                                        top:20px; 
                                                        left:-40px;
                                                    }
                                                
  3. root 設為 absolute

    與上方的 2 比較 , 注意它的空間被鄰近的元素填滿了...這是absolute跟relative的差別之一
                                                    /*因為我不想讓 root 跑到最上面, 所以在這裏設 relative (設absolute的話會亂了版面)*/
                                                    .div-sample{
                                                        position:relative;
                                                    }
                                                    .div-root {
                                                        position:absolute; 
                                                        top:120px; 
                                                        left:540px;
                                                    }
                                                    
  4. div-1a 設定為 absolute

    .div-1a 會跑到螢幕的最上方去了
                                                        .div-1a {
                                                            position:absolute;
                                                            top:0;
                                                            left:0;
                                                            width:200px;
                                                        }
                                                        
  5. div-1a 設定為 relative

    .div-1a 仍然以它原始位置做相對位移
                                                        .div-1a {
                                                            position:relative;
                                                            top:15px;
                                                            left:15px;
                                                        }
                                                        
  6. div-root 為relative , div-1a 為absolute

    與下方相同, 差在 div-root 有多設定位移量, div-1a 不變, 仍然是跟著相同的位移量移動
                                                    .div-root {
                                                        position:relative; 
                                                    }
                                                    .div-1a
                                                    {
                                                        position:absolute; 
                                                        top:15px;
                                                        right:0;
                                                    }
                                                
  7. div-root 為relative , div-1a 為absolute (注意 div-root 有位移)

                                                    .div-root {
                                                        position:relative; 
                                                        top: 15px;
                                                        left: 15px;
                                                    }
                                                    .div-1a
                                                    {
                                                        position:absolute; 
                                                        top:15px;
                                                        right:0;
                                                    }
                                                        
  8. div-1a、div-1b各設為absolute

                                                        .div-root {
                                                            position:relative;
                                                            height:200px;       /*設高度是為了讓 top 的 % 設定效果更明顯*/
                                                        }
                                                        .div-1a {
                                                            position:absolute;
                                                            top:25%;
                                                            right:0;    /*注意一個right*/
                                                        }
                                                        .div-1b {
                                                            position:absolute;
                                                            top:50%;
                                                            left:0;     /*注意一個left*/
                                                        }
                                                            /*這個有 float 排版的感覺*/
                                                        
  9. div-root 設為 sticky

                                                        .div-root {
                                                            position:relative;
                                                            height:200px;       /*設高度是為了讓 top 的 % 設定效果更明顯*/
                                                        }
                                                        .div-1a {
                                                            position:absolute;
                                                            top:25%;
                                                            right:0;    /*注意一個right*/
                                                        }
                                                        .div-1b {
                                                            position:absolute;
                                                            top:50%;
                                                            left:0;     /*注意一個left*/
                                                        }
                                                            /*這個有 float 排版的感覺*/
                                                        
offset 範例
top、left、bottom、right的設定
  1. top: 50%; bottom: 0; left: 50%; right: 0;

  2. top: 50%; bottom: 0; left: 50%; right: 0; margin: 2em

  3. top: 60%; bottom: 10%; left: 60%; right: 10%; margin: 0;

float
浮動
文章參考
浮動基本上會使得元素在有足夠的空間時,往父元素的左邊或右邊靠緊。接著原本跟在這個元素後面的其他元素,就會自動往上跑。
  • DOM 的 position 設為 absolute 時,float 會失效。
  • DOM 為 float 時, 自動變成區塊顯示元素 (display: block) 這時候可以設定元素的 width 和 height
範例

原始無 float

A
B
    
A
B

A : float:right;,B 元素就會自動往上跑

A
B

B : float:right;, A 元素並不會受到干擾, B 元素也不會往父元素的上邊靠
這個我比較無法理解

A
B

A : float:left;,B 元素就會自動往上跑 , 結果被A元素蓋住了

A
B

B : float:left;

A
B

A, B 都 float:right

A
B

A, B 都 float:left

A
B

A : float:left , B : float:right

A
B

A : float:right , B : float:left

A
B
clear 清除浮動
clear 在告訴該元素的左邊(left)、右邊(right)、兩邊(both)都不可以有任何東西,若有的話,該元素會自動往下移。

A : float:right , B : float:left 且想讓A, B都顯示在 root 的虛線框內 就加個 div 且指定 clear :both; 的元素

A
B
overflow 清除浮動

overflow 也可以清除浮動, 而且較方便簡單。注意的是要用auto及hidden來清除。

A
B
clearfix 方法清除浮動 請參考 範例
Box Model

A : float:left , B : float:right 排版時須考慮 root 元的的寛度 , 如果寬度不夠時會出現下面這種症狀

A
B
用於文繞圖的處理 在圖片裡設置 float

原來的狀況

這個例子是用來顯示 float:left 會如何影響整個頁面的呈現。在這裡,圖案浮動於左邊。



這個例子是用來顯示 float:left 會如何影響整個頁面的呈現。在這裡,圖案浮動於左邊。



這個例子是用來顯示 float:left 會如何影響整個頁面的呈現。在這裡,圖案浮動於左邊。
Box Model
box-sizing
content-box

width、height是 content 區塊的大小,不包含內距與邊框 .這就是預設的內容方盒模型

 

 

 

    .borderSizingContainer {
        background-color:#ffd800;
        height:200px;
        width:200px;
        border:0px solid rgb(0, 0, 0);
        margin:0;
        padding:0;
    }
    .borderSizingContainer::before {
        content:'外部容器 , 以黃色背景為底色, padding-top:2em;';
    }
    .borderBox, .contentBox {
        /*兩個設定都一樣, 差在 box-sizing 不同 */
        height:200px;
        width:200px;
        border:5px solid red;
        padding:10px;
        background-color:white;
    }
    .borderBox {
        box-sizing:border-box;
    }
        .borderBox::after {
            content:'border-box 模式';
        }
    .contentBox {
        box-sizing:content-box;
    }
    .contentBox::after {
        content:'content-box 模式';
    }
border-box

width、height是包含 content + padding + border 的區域大小。

 

 

這用在當你使用 % 來指定元素的整體大小時特別有用, 它可以不用考慮邊框 padding 的大小, 而以百分比完美的切割比例。

顯示與可視性
範例

visibility visibility: hidden; 設定為此狀態時, 原來元素所在的空間會保留,元素本身仍然不見 可視性
display

一般設為 block、inline...... , 這裏是討論要設定成 none 的情況。
當設定成 none 時不會保留元素原本該顯示的空間 , 所以鄰近的元素會往原本的區塊靠近.

垂直置中 CSS 垂直置中的七個方法
七個垂直置中的方法
設定行高 ( line-height )
添加偽元素
calc 動態計算
使用表格或假表格
transform
絕對定位
Flexbox