CSS + xHTML 網頁排版基礎教程



使用 xHTML(div系列標籤) 排版 絕非因 table 排版不佳而使用
, table 與 div系列 其實各自有其好處

這裡刻意強調 div系列標籤意指 ,
網站的構成並非單靠 div 建構

table 優點 :

    1.排版快速
    2.相容性高
    3.容易理解


      缺點 :

    1.程式碼與排版美術樣式混雜
    2.讀取速度較慢
    3.影響搜尋引擎結果



div 優點 :

    1.排版彈性高
    2.結構較大之網頁,事後修改容易
    3.讀取速度快
    4.提高搜尋引擎結果
    5.code簡潔


    缺點 :

    1.撰寫code較長,較花時間
    2.初學不易理解




單靠div建構 缺點 :

    1.一個全是div結構,無法透過code看出其網站結構
      反倒是table,tr .td仍可看出來有行列之分

    2.影響日後維護






1.馬上來排版


    排版意味者我們希望一個空白的版面,可以切出我們想要的區塊
    填放我們要放的內容

    排版前注意
    我們試著把div想像成一個很大的區塊
    ul是其中部份區塊,而li又是其中更小的塊狀


    1.1.假設我們今天要來排最典型 三個大並排區塊
   
    我們對 d-table , d-row加上紅線與藍線
    方便我們觀察區塊變化

    另外對 d-table 加上  height: 200px;
    方便我們對 d-table 區塊包覆情況觀察


 <style type="text/css">
    
    .d-table{
        border:1px solid red;
        height: 200px;
    }
    
    .d-row{

        border:1px solid blue;
    }</style>

<div class="d-table">
   
        <div class="d-row">
            <div class="d-col">第一個欄位</div>
            <div class="d-col">第二個欄位</div>
        </div>
   
        <div class="d-row">
            <div class="d-col">第三個欄位</div>
            <div class="d-col">第四個欄位</div>
        </div>
   
        <div class="d-row">
            <div class="d-col">第五個欄位</div>
            <div class="d-col">第六個欄位</div>
        </div>
 </div>

    
    這時會看到由上而下排列,如下圖:

    
    仔細觀察,框架是由左側開始,但實際上並不是"真正的從左側開始"排列
    因此我們在樣式裡加上以下 float:left;
    .d-row{

        float:left;
        border:1px solid blue;

    }


   
    讓 d-row強制從左邊開始排列
    (正確來說應該是從左上角開始排列)
    可以看到下圖結果,三個區塊開始並排
    如果無法理解,試著想像一下,原本三個大區塊硬是要由上而下擠滿整個空間
    強制靠左後,由於內容寬度較短,由左擠至右,自然就變成三個並排區塊


    以此類推這樣的結構便可架構出自己想要的排版






    2.margin 和 padding 的使用

    各位有發現框線與框線間粘的好緊,我們希望都有其間距
    我們在 d-row 加上 margin : 5px;
    意思是由該區塊往外推的距離   

    .d-row{

        float:left;
        border:1px solid blue;
        margin : 5px;

    }


    如下圖:



    在 d-table 加上 padding : 5px;
    意思是該區塊邊線至內容的距離


    .d-table{

        border:1px solid red;
        height: 200px;
        padding : 5px;

    }


    如下圖:
    內容又受到 table往內壓縮之結果


    下圖中例子便可以看出
    1.對A來說,padding表往內壓縮 B框架的間距
    2.對B來說,padding表往內擠壓 B內容的間距
    3.對B來說margin往外推出與外層間的距離


    事實上不管是 margin 或是 padding 還有上下左右之區分
    用來控制"微調"重要的框架中內容元素的間距

    padding-top (上) 
    padding-right (右) 
    padding-bottom (下) 
    padding-left (左)

    margin-top (上邊界) 
    margin-right (右邊界) 
    margin-bottom (下邊界) 
    margin-left (左邊界)



    3.ul,li替代其中巢狀結構

    上述代碼全部都是以div建構而成,我們試著以ul,li
    替代後的結果變為

    <div class="d-table">
        <ul class="d-row1">
            <li class="d-col">第一個欄位</li>
            <li class="d-col">第二個欄位</li>
        </ul>

        <ul class="d-row2">
            <li class="d-col">第三個欄位</li>
            <li class="d-col">第四個欄位</li>
        </ul>


        <ul class="d-row3">
            <li class="d-col">第五個欄位</li>
            <li class="d-col">第六個欄位</li>
        </ul>
     </div>

        使用方法不變,但從code更能看出其結構性







        3.內容元素間的微調距離

        大架構抵定後就是對內容元素做些微調整
        不外乎就是透過 margin 與 padding 去對內容間距做微調
        達到我們想要的視覺效果

        注:使用li標籤在未給予css樣式前左邊會有一個黑圓圈
        賦予樣式後則消失


       
        在d-table我們加入     height   : 900px;
        .d-table{
            border   : 1px solid red;
            height   : 900px;
        }


        對d-row1加入
            padding-top  : 40px;
            padding-left : 50px;



        表示對d-row1框架上距與左距微調50px

        並增加
         width    : 300px;
         height   : 800px;
    
        .d-row1{
            float    : left;
            border   : 1px solid blue;
    
            padding-top  : 50px;
            padding-left : 50px;
    
            width    : 300px;
            height   : 800px;
        };
           



        新增以下兩個樣式
        結構為 d-col1與2 ,為d-row1底下的兩個小區塊
        故意設間距不一樣,為了讓它看出其差異性
        可隨意控制不同兩個區塊特性   
         .d-row1 .d-col1{
    
            padding-top  : 10px;
            padding-left : 20px;
    
        }
    
       
        .d-row1 .d-col2{
            padding-top  : 15px;
            padding-left : 25px;
        }



        在框架結構裡也記得調整為底下
         <div class="d-table">
    
                <ul class="d-row1">
                    <li class="d-col1">第一個欄位</li>
                    <li class="d-col2">第二個欄位</li>
                </ul>

       


        代碼沒有問題的話,就會像下圖這樣

       


        注:
        (1)若css樣式未指定層級路徑
         .d-col1{
            padding-top  : 10px;
            padding-left : 20px;
        }


        css 樣式則會去尋找所有該標籤設定的組合設置
        若想要設置到對的區塊,應避免標籤重覆

        當然有時候,重覆標籤設計亦是為了後續維護便利性
        才可以調整一個全部都一起調整


        (2)若指定的css 為非人為賦予的,例如 li ,ul
        則標籤層級可以寫為
        (前面不加任何 . 與 # 囉)
         .d-row1 li{
    
        }



        (3)若有使用外部樣式連結時,修改其中一區塊中外部樣式內容
           其他內容若也有套用同樣樣式,則會一起被調整到




        4.id與class區別
       
        id為一頁面唯一的標示,用來定義特殊的元素內容
        就好比人的名子,一個屋子下一個人只會有一個名子
        用法與class一樣 只是由原本的 .css{  } , 改為 #css{  }
       
        #css5 {height:25px; width: 200px;}
        <div id="css5">我是ID例子</div>



        而class是一種樣式,就好比衣服可以套用在不同人身上


        概念上來說
        id是先找到結構/內容,再給它定義樣式;class是先定義好一種樣式,
        再套給多個結構/內容。
        歸納成一句話就是:class可以反複使用而id在一個頁面中僅能被使用一次
       

    沒有留言:

    張貼留言