css的關鍵---定位和佈局,以及一個動畫示例

1、塊元素、內聯元素、內聯塊元素

元素就是標籤,佈局中常用的有三種標籤,塊元素、內聯元素、內聯塊元素,瞭解這三種元素的特性,才能熟練的進行頁面佈局。

塊元素 
塊元素,也可以稱爲行元素,佈局中常用的標籤如:div、p、ul、li、h1~h6、dl、dt、dd等等都是塊元素,它在佈局中的行爲:

  • 支持全部的樣式
  • 如果沒有設置寬度,默認的寬度爲父級寬度100%
  • 盒子佔據一行、即使設置了寬度

內聯元素
內聯元素,也可以稱爲行內元素,佈局中常用的標籤如:a、span、em、b、strong、i等等都是內聯元素,它們在佈局中的行爲:

  • 支持部分樣式(不支持寬、高、margin上下、padding上下)
  • 寬高由內容決定
  • 盒子並在一行
  • 代碼換行,盒子之間會產生間距
  • 子元素是內聯元素,父元素可以用text-align屬性設置子元素水平對齊方式,用line-height屬性值設置垂直對齊方式

解決內聯元素間隙的方法 
1、去掉內聯元素之間的換行
2、將內聯元素的父級設置font-size爲0,內聯元素自身再設置font-size

內聯塊元素
內聯塊元素,也叫行內塊元素,是新增的元素類型,現有元素沒有歸於此類別的,img和input元素的行爲類似這種元素,但是也歸類於內聯元素,我們可以用display屬性將塊元素或者內聯元素轉化成這種元素。它們在佈局中表現的行爲:

  • 支持全部樣式
  • 如果沒有設置寬高,寬高由內容決定
  • 盒子並在一行
  • 代碼換行,盒子會產生間距
  • 子元素是內聯塊元素,父元素可以用text-align屬性設置子元素水平對齊方式,用line-height屬性值設置子元素垂直對齊方式

這三種元素,可以通過display屬性來相互轉化,不過實際開發中,塊元素用得比較多,所以我們經常把內聯元素轉化爲塊元素,少量轉化爲內聯塊,而要使用內聯元素時,直接使用內聯元素,而不用塊元素轉化了。

display屬性
display屬性是用來設置元素的類型及隱藏的,常用的屬性有:
1、none 元素隱藏且不佔位置
2、block 元素以塊元素顯示
3、inline 元素以內聯元素顯示
4、inline-block 元素以內聯塊元素顯示

 

2、定位

關於定位 
我們可以使用css的position屬性來設置元素的定位類型,postion的設置項如下:

  • relative 生成相對定位元素,元素所佔據的文檔流的位置不變,元素本身相對文檔流的位置進行偏移
  • absolute 生成絕對定位元素,元素脫離文檔流,不佔據文檔流的位置,可以理解爲漂浮在文檔流的上方,相對於上一個設置了相對或者絕對或者固定定位的父級元素來進行定位,如果找不到,則相對於body元素進行定位。
  • fixed 生成固定定位元素,元素脫離文檔流,不佔據文檔流的位置,可以理解爲漂浮在文檔流的上方,相對於瀏覽器窗口進行定位。
  • static 默認值,沒有定位,元素出現在正常的文檔流中,相當於取消定位屬性或者不設置定位屬性
  • inherit 從父元素繼承 position 屬性的值

定位元素特性 
絕對定位和固定定位的塊元素和行內元素會自動轉化爲行內塊元素

定位元素層級 
定位元素是浮動的正常的文檔流之上的,可以用z-index屬性來設置元素的層級

典型定位佈局 
1、固定在頂部的菜單(positon:fixed;top:0px;)
2、水平垂直居中的彈框(position:fixed; width: 800px;margin: -325px 0 0 -400px; top:50%;left:50%;)
3、固定的側邊的工具欄(裏面的按鈕會使用absolute來相對工具欄定位)
4、固定在底部的按鈕(positon:fixed;bottom:0px;)

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

動畫的要求是初始寬度左邊是100%,右邊是0%;切換後寬度左邊是10%,右邊是90%;並且設置一個覆蓋層當頁面縮小時候,覆蓋層蓋住縮小的頁面;
.image_page .zoom_in{transform:scale(1);width: 90%;height:600px;animation: animat_zoom_in 0.2s cubic-bezier(0.4, 0, 0.2, 1);}
.image_page .zoom_out{transform:scale(1);width: 10%;height:600px;}
.image_page .zoom_in2{transform:scale(1);width: 100%;height:600px;animation: animat_zoom_out 0.2s cubic-bezier(0.4, 0, 0.2, 1);}
.image_page .zoom_out2{transform:scale(1);width: 0%;height:600px;}

.coverage{position: absolute;display: none;z-index: 106;width: 100%;height: 100%;background-color: #dbe1f9;top:0px;text-align: center;line-height: 600px;font-size:18px; }
function page_switch(flag, image_name, pool_name){
    if(flag){
        //true 顯示snaps頁面
        $(".image_left").removeClass("zoom_in2").addClass("zoom_out");
        $(".image_right").removeClass("zoom_out2").addClass("zoom_in");
        $(".image_left").find(".coverage").css("display","block");
        $(".image_right").find(".coverage").css("display","none");
     }else {
        //false 顯示image頁面
        $(".image_right").removeClass("zoom_in").addClass("zoom_out2");
        $(".image_left").removeClass("zoom_out").addClass("zoom_in2");
        $(".image_right").find(".coverage").css("display","block ");
        $(".image_left").find(".coverage").css("display","none");
    }

}

一些場景技巧:

1、jQuery 的 index() 方法返回指定元素相對於其他指定元素的 index 位置,因此可用於獲取當前li元素順序。用來是頁面局部刷新後能保持子元素仍然active或者聚焦。

2、按鈕發送的消息,很長時間才收到,點擊時候修改顏色,數據收到後再遍歷按鈕清除顏色。、

$.each($(".image_page .snap_btn"), function () {
    finish_request($(this));
});

3、span和input作爲內聯塊元素文字對不齊,原因是文字基線不一樣,解決辦法

(1)、給其中一個元素設置vertical-align:top

(2)、使用float浮動

(3)、使用posion:absolute定位

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