天天看點

CSS(四):布局與浮動傳統網頁布局的三種方式浮動切圖CSS屬性書寫順序頁面布局整體思路

目錄

  • 傳統網頁布局的三種方式
    • 普通流(标準流/文檔流)
  • 浮動
    • 為什麼需要浮動?
    • 什麼是浮動?
    • 浮動特性(重難點)
      • 脫标
      • 浮動元素一行顯示
      • 浮動元素具有行内塊元素特性
    • 浮動元素經常和标準流父級搭配使用
    • 浮動布局注意點
    • 為什麼需要清除浮動
    • 清除浮動
      • 清除浮動本質
      • 清除浮動方法
        • 額外标簽法
        • 父級添加overflow
        • 父級添加after僞元素
        • 父級添加雙僞元素
  • 切圖
    • 常見的圖檔格式
    • PS切圖
      • 圖層切圖
      • 切片切圖
      • PS插件切圖
  • CSS屬性書寫順序
  • 頁面布局整體思路

傳統網頁布局的三種方式

網頁布局的本質——用CSS來擺放個值,把盒子擺放到相應位置

CSS提供了三種傳統(PC端)布局方式(即盒子如何進行排列順序):

  • 普通流(标準流)
  • 浮動
  • 定位

普通流(标準流/文檔流)

标簽按照預設規定好方式排列,标準流是最基本的布局方式

  1. 塊級元素會獨占一行,從上向下順序排列。常用元素:div、hr、p、h1-h6、ul、ol、dl、form、table
  2. 行内元素會按照順序,從左到右順序排列,碰到父元素邊緣則自動換行。常用元素:span、a、i、em等
隻有标準流是不夠的,比如需要元素一左一右、搜尋欄定位在網頁最上端時。實際開發中,一個頁面基本都包含了三種布局方式(後面移動端學習新的布局方式)

浮動

為什麼需要浮動?

有很多的布局效果,标準流沒有辦法完成,此時就可以利用浮動完成布局,是以浮動可以改變元素标簽預設的排列方式

浮動的最典型應用:可以讓多個塊級元素一行内排列顯示

網頁布局第一準則:多個塊級元素縱向排列找标準流,多個塊級元素橫向排列找浮動

什麼是浮動?

float屬性用于建立浮動框,将其移動到一邊,直到左邊緣或右邊緣觸及包含塊或另一個浮動框的邊緣

文法:

屬性值 描述
none 元素不浮動(預設值)
left 元素向左浮動
right 元素向右浮動

浮動特性(重難點)

  1. 浮動元素會脫離标準流(脫标)
  2. 浮動的元素會一行内顯示并且元素頂部對齊
  3. 浮動的元素會具有行内塊元素的特性

脫标

設定了浮動(float)的元素最重要特性:

  1. 脫離标準普通流的控制(浮)移動到指定位置(動),即脫标
  2. 浮動的盒子不再保留原先的位置,讓其他标準流占有

舉例:兩個div盒子,第一個設定浮動,會産生疊加效果,因為第一個div不保留原始位置,第二個盒子向上移動,如下圖顯示

CSS(四):布局與浮動傳統網頁布局的三種方式浮動切圖CSS屬性書寫順序頁面布局整體思路

浮動元素一行顯示

如果多個盒子都設定了浮動,則它們會按照屬性值一行内顯示并且頂端對齊排列

CSS(四):布局與浮動傳統網頁布局的三種方式浮動切圖CSS屬性書寫順序頁面布局整體思路

注意:浮動的元素是互相貼靠在一起的(不會有縫隙),如果父級寬度裝不下這些浮動的盒子,多出的盒子會另起一行對齊

浮動元素具有行内塊元素特性

任何元素都可以浮動,不管原先是什麼模式的元素,添加浮動之後具有行内塊元素相似的特性

  • 如果行内元素有了浮動,則不需要轉換塊級/行内塊元素就可以直接給高度和寬度
  • 如果塊級盒子沒有設定寬度,預設寬度和父級一樣寬,但是添加浮動後,它的大小根據内容來決定
  • 浮動的盒子中間是沒有縫隙的,是緊挨着一起的

浮動元素經常和标準流父級搭配使用

為了限制浮動元素位置,網頁布局一般采取的政策是:

先用标準流的父元素排列上下位置,之後内部子元素采取浮動排列左右位置

CSS(四):布局與浮動傳統網頁布局的三種方式浮動切圖CSS屬性書寫順序頁面布局整體思路

浮動布局注意點

  1. 浮動和标準流的父盒子搭配

    先用标準流的父元素排列上下位置,之後内部子元素采取浮動排列左右位置

  2. 一個元素浮動了,理論上其餘的兄弟元素也要浮動

    (第一個元素不浮動,第二個盒子浮動時,第一個盒子獨占一行,第二個盒子貼着第一個盒子下沿浮動。第二個盒子浮動不會影響第一個盒子的标準流。)

    浮動盒子隻會影響浮動盒子後面的标準流,不會影響前面的标準流

為什麼需要清除浮動

前面浮動元素有一個标準流的父元素,父元素都有一個共同的特點:都是有高度的

但并不是所有父盒子都必須有高度,比如産品很多很多時、新聞不知道有多少文字不友善給高度時,理想中的狀态,讓子盒子撐開父親,有多少孩子,父盒子就有多高

但是父盒子不給高度,子盒子浮動時不占有位置,父盒子的高度變成0,就會影響下面的标準流盒子,即父盒子後面的盒子會占用父盒子的位置

CSS(四):布局與浮動傳統網頁布局的三種方式浮動切圖CSS屬性書寫順序頁面布局整體思路

清除浮動

清除浮動本質

本質:

  • 清除浮動的本質是清除浮動元素造成的影響
  • 如果父盒子本身有高度,則不需要清除浮動
  • 清除浮動之後,父級就會根據浮動的子盒子自動檢測高度。父級有了高度,就不會影響下面的标準流了

文法:

屬性值 描述
left 不允許左側有浮動元素(清除左側浮動的影響)
right 不允許右側有浮動元素(清除右側浮動的影響)
both 同時清除左右兩側浮動的影響

實際工作中,幾乎隻用 clear: both;

清除浮動的政策是:閉合浮動,即将浮動的影響限制在父盒子中

清除浮動方法

  1. 額外标簽法,也稱為隔牆法,是W3C推薦的做法
  2. 父級添加overflow屬性
  3. 父級添加after僞元素
  4. 父級添加雙僞元素

額外标簽法

額外标簽會在浮動元素末尾添加一個空的标簽,例如< div style=“clear: both”></div>,或者其他标簽(如<br />或塊級标簽等)

  • 優點:通俗易懂,書寫友善
  • 缺點:添加許多無意義的标簽,結構化較差

注意:要求這個新的空标簽必須是塊級元素

父級添加overflow

可以給父級添加overflow屬性,将其屬性值設定為hidden、auto或scroll

外邊距合并塌陷時也是通過overflow:hidden;(溢出隐藏)解決

(後面詳細講解)

  • 優點:代碼簡潔
  • 缺點:無法顯示溢出的部分

父級添加after僞元素

:after方式是額外标簽法的更新版,也是給父元素添加。文法:

.clearfix:after {
	content: "";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}
.clearfix {
	*zoom: 1;
}
           
  • 原理:在元素最後端添加一個新的行内盒子,将盒子内浮動元素與其他盒子隔開
  • after僞元素預設為行内元素,需要轉換為塊級元素
  • *zoom屬性為了相容IE6、7
  • 優點:沒有增加标簽,結構更簡單
  • 缺點:照顧低版本浏覽器
  • 代表網站:百度、淘寶、網易等

(後面詳細講解僞元素)

父級添加雙僞元素

也是給父元素添加,文法:

.clearfix:before, .clearfix:after {
	content: "";
	/* 轉化為塊級元素并且在一行顯示 */
	display: table;
}
.clearfix:after {
	clear: both;
}
.clearfix:before {
	*zoom: 1;
}
           
  • 原理:在大盒子内部前後都插入一個盒子,完全閉合
  • 優點:代碼更簡潔
  • 缺點:照顧低版本浏覽器
  • 代表網站:小米、騰訊等
為什麼雙僞元素方法中不需要height和visibility屬性?

切圖

常見的圖檔格式

  1. jpg圖像格式:JPEG(JPG)對色彩的資訊保留較好,高清,顔色較多,産品類的圖檔經常用jpg格式
  2. gif圖像格式:GIF格式最多隻能儲存256色,通常用來顯示簡單圖形及字型,但是可以儲存透明背景和動畫效果,實際經常用于一些圖檔小動畫效果
  3. png圖像格式:結合GIF和JPEG的優點,具有存儲形式豐富的特點,能夠保持透明背景。如果想要切成背景透明的圖檔,選擇png格式
  4. PSD圖像格式:photoshop的專用格式,裡面可以存放圖層、通道、遮罩等多種設計稿。對前段來說,最大的優點是可以直接從上面複制文字,獲得圖檔,還可以測量大小和距離

PS切圖

PS有很多切圖方式:圖層切圖、切片切圖、PS插件切圖等

圖層切圖

最簡單的切圖方式:右擊圖層 —> 快速導出為png

需要合并圖層再導出:選中需要的圖層 —> 合并圖層(ctrl+E)—> 右擊 —> 快速導出為png

切片切圖

  1. 利用切片工具手動劃出
  2. 導出為web裝置所用格式 —> 選擇所需圖檔格式存儲

PS插件切圖

cutterman切圖工具

CSS屬性書寫順序

建議遵循一下順序:

  1. 布局定位書寫:display / position / float / clear / visibility / overflow(display建議第一個寫,關系到模式)
  2. 盒子屬性:width / height / margin / padding / border / background
  3. 文本屬性:color / font / text-decoration / text-align / vertical-align / white-space / break-word
  4. 其他屬性(CSS3):content / cursor / border-radius / box-shadow / background:line-gradient…

頁面布局整體思路

  1. 首先确定頁面的版心(可視區)
  2. 分析頁面中的行子產品,以及每個行子產品中的列子產品(标準流)
  3. 一行中的列子產品經常浮動布局,先确定每個列的大小,之後确定列的位置
  4. 先有結構,後有樣式(理清布局結構再寫代碼)