HTML+CSS實戰系列——盒模型製作

2020-12-17 尚學堂前端學院

主要內容

盒模型的概念標準盒模型怪異盒模型彈性盒模型學習目標

一、CSS 盒子模型(Box Model)

1、概念

所有HTML元素可以看作盒子,在CSS中,"box model"這一術語是用來設計和布局時使用。

CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:邊距(margin),邊框(border),填充(padding),和實際內容(content)。

盒模型允許我們在其它元素和周圍元素邊框之間的空間放置元素。

下面的圖片說明了盒子模型(Box Model):

不同部分的說明:

1)Margin(外邊距) - 清除邊框外的區域,外邊距是透明的。

2)Border(邊框) - 圍繞在內邊距和內容外的邊框。

3)Padding(內邊距) - 清除內容周圍的區域,內邊距是透明的。

4)Content(內容) - 盒子的內容,顯示文本和圖像。

如果把盒子模型看作是一個生活中的快遞,那麼內容部分等同於你買的實物,內邊距等同於快遞盒子中的泡沫,邊框等同於快遞盒子,外邊距等同於兩個快遞盒子之間的距離。

下面看一個例子:

【實例1-1】

HTML代碼如下:

Css代碼如下:

效果圖如下:

控制臺中的盒模型如下:

通過代碼和圖給大家簡單講解一下,最中間藍色區域就是我們定義的寬度和高度,也就是content的寬度和高度,當我們給padding加一個寬度的時候整個整體也變寬了,padding的距離就是綠色部分,在padding外面就是border,淺黃色部分,由圖也很明顯的看出也增加了整個整體的寬度,border外面是margin部分,深黃色區域。

二、標準盒模型

概念W3C盒子模型(標準盒模型)

根據 W3C 的規範,元素內容佔據的空間是由 width 屬性設置的,而內容周圍的 padding 和 border 值是另外計算的;即在標準模式下的盒模型,盒子實際內容(content)的width/height=我們設置的width/height;盒子總寬度/高度=width/height+padding+border+margin。

2、內容區域(content)

Content內容區域包含寬度(width)和高度(height)兩個屬性。

塊級元素默認寬度為100%,行內元素默認寬度是由內容撐開,不管塊級元素還是行內元素,默認高度都是由內容撐開。

塊級元素可以設置寬高屬性,行內元素設置寬高屬性不生效。

寬度(width)和高度(height)可以取值為像素(px)和百分比(%)。

3、內邊距(Padding

3.1定義

CSS padding(填充)是一個簡寫屬性,定義元素邊框與元素內容之間的空間,即上下左右的內邊距。

3.2可能的值

1)定義一個固定的填充(像素, pt, em,等)

2)使用百分比值定義一個填充

3.3單邊內邊距屬性

在CSS中,它可以指定不同的側面不同的填充:

【實例2-1】

分別代表:

(1)上內邊距是 25px

(2)右內邊距是 50px

(3)下內邊距是 25px

(4)左內邊距是 50px

3.4簡寫屬性

為了縮短代碼,它可以在一個屬性中指定的所有填充屬性。

這就是所謂的簡寫屬性。所有的填充屬性的簡寫屬性是 padding :

Padding屬性,可以有一到四個值。

(1) padding:25px 50px 75px 100px;

上填充為25px

右填充為50px

下填充為75px

左填充為100px

(2) padding:25px 50px 75px;

上填充為25px

左右填充為50px

下填充為75px

(3)padding:25px 50px;

上下填充為25px

左右填充為50px

(4)padding:25px;

所有的填充都是25px

3.5padding需要注意的問題

padding會撐大容器

3.6padding實現導航條

【實例2-2】

4、邊框(Border

4.1定義

CSS邊框屬性允許你指定一個元素邊框的樣式和顏色。

4.2邊框樣式

邊框樣式屬性指定要顯示什麼樣的邊界。

border-style屬性用來定義邊框的樣式

border-style 值:

none: 默認無邊框

dotted: 定義一個點線邊框

dashed: 定義一個虛線邊框

solid: 定義實線邊框

double: 定義兩個邊框。 兩個邊框的寬度和 border-width 的值相同

4.3邊框寬度

您可以通過 border-width 屬性為邊框指定寬度

4.4邊框顏色

border-color屬性用於設置邊框的顏色

您還可以設置邊框的顏色為"transparent"。

注意: border-color單獨使用是不起作用的,必須得先使用border-style來設置邊框樣式。

4.5邊框單獨設置各邊

在CSS中,可以指定不同的側面不同的邊框:

上面的例子也可以設置一個單一屬性:

border-style屬性可以有1-4個值:

(1)border-style:dotted solid double dashed;

上邊框是 dotted

右邊框是 solid

底邊框是 double

左邊框是 dashed

(2)border-style:dotted solid double;

上邊框是 dotted

左、右邊框是 solid

底邊框是 double

(3)border-style:dotted solid;

上、底邊框是 dotted

右、左邊框是 solid

(4)border-style:dotted;

四面邊框是 dotted

上面的例子用了border-style。然而,它也可以和border-width 、 border-color一起使用。

4.6邊框簡寫屬性

上面的例子用了很多屬性來設置邊框。

你也可以在一個屬性中設置邊框。

你可以在"border"屬性中設置:

border-widthborder-style (required)border-color

5、外邊距(Margin

5.1定義

CSS margin(外邊距)屬性定義元素周圍的空間。

5.2取值

(1)Auto

(2)定義一個固定的margin

(3)定義一個使用百分比的邊距

5.3單邊外邊距屬性

在CSS中,它可以指定不同的側面不同的邊距:

5.4簡寫屬性

為了縮短代碼,有可能使用一個屬性中margin指定的所有邊距屬性。這就是所謂的簡寫屬性。

所有邊距屬性的簡寫屬性是 margin :

margin屬性可以有一到四個值。

(1)margin:25px 50px 75px 100px;

上邊距為25px右邊距為50px下邊距為75px左邊距為100px(2)margin:25px 50px 75px;

上邊距為25px左右邊距為50px下邊距為75px(3)margin:25px 50px;

上下邊距為25px左右邊距為50px(4)margin:25px;所有的4個邊距都是25px5.5margin需要注意的問題

(1)外邊距合併問題

垂直方向上外邊距相撞時,取較大值 注意:浮動元素的外邊距不合併【實例2-1】

效果圖如下:

(2)margin-top問題

當給子元素設置margin-top時,父元素會跟著子元素一起下來:

解決方法:

①父元素設置overflow:hidden;②父元素或者子元素設置float③父元素設置border:1px solid transparent;④父元素設置padding-top:1px;【實例2-2】

效果如下:

5.6margin練習

三、怪異盒模型

1.概念

IE盒子模型(怪異盒模型)

在該模式下,瀏覽器的 width 屬性不是內容的寬度,而是內容、內邊距和邊框的寬度的總和;即在怪異模式下的盒模型,盒子的(content)寬度+內邊距padding+邊框border寬度=我們設置的width(height也是如此),盒子總寬度/高度=width/height + margin 。

2.Box-sizing

CSS3指定盒子模型種類

box-sizing 屬性允許您以特定的方式定義匹配某個區域的特定元素。

box-sizing: content-box;//寬度和高度分別應用到元素的內容框。在寬度和高度之外繪製元素的內邊距和邊框。

box-sizing: border-box;// 為元素設定的寬度和高度決定了元素的邊框盒。就是說,為元素指定的任何內邊距和邊框都將在已設定的寬度和高度內進行繪製。通過從已設定的寬度和高度分別減去邊框和內邊距才能得到內容的寬度和高度。

即box-sizing屬性可以指定盒子模型種類,content-box指定盒子模型為W3C(標準盒模型),border-box為IE盒子模型(怪異盒模型)。

四、彈性盒模型(flex box)

1.定義

彈性盒子是 CSS3 的一種新的布局模式。

CSS3 彈性盒是一種當頁面需要適應不同的屏幕大小以及設備類型時確保元素擁有恰當的行為的布局方式。

引入彈性盒布局模型的目的是提供一種更加有效的方式來對一個容器中的子元素進行排列、對齊和分配空白空間。

2.CSS3彈性盒內容

彈性盒子由彈性容器(Flex container)和彈性子元素(Flex item)組成。

彈性容器通過設置 display 屬性的值為 flex 將其定義為彈性容器。

彈性容器內包含了一個或多個彈性子元素。

注意: 彈性容器外及彈性子元素內是正常渲染的。彈性盒子只定義了彈性子元素如何在彈性容器內布局。

彈性子元素通常在彈性盒子內一行顯示。默認情況每個容器只有一行。

【實例4.1】

3、父元素上的屬性

3.1display 屬性

display:flex;開啟彈性盒

display:flex;屬性設置後子元素默認水平排列

3.2flex-direction屬性

(1)定義

flex-direction 屬性指定了彈性子元素在父容器中的位置。

(2)語法

flex-direction的值有:

row:橫向從左到右排列(左對齊),默認的排列方式。

row-reverse:反轉橫向排列(右對齊,從後往前排,最後一項排在最前面。

column:縱向排列。

column-reverse:反轉縱向排列,從後往前排,最後一項排在最上面。

(3)實例

3.3justify-content 屬性

(1)定義

內容對齊(justify-content)屬性應用在彈性容器上,把彈性項沿著彈性容器的主軸線(main axis)對齊

(2)語法

各個值解析:

①flex-start:

彈性項目向行頭緊挨著填充。這個是默認值。第一個彈性項的main-start外邊距邊線被放置在該行的main-start邊線,而後續彈性項依次平齊擺放。

②flex-end:

彈性項目向行尾緊挨著填充。第一個彈性項的main-end外邊距邊線被放置在該行的main-end邊線,而後續彈性項依次平齊擺放。

③center:

彈性項目居中緊挨著填充。(如果剩餘的自由空間是負的,則彈性項目將在兩個方向上同時溢出)。

④space-between:

彈性項目平均分布在該行上。如果剩餘空間為負或者只有一個彈性項,則該值等同於flex-start。否則,第1個彈性項的外邊距和行的main-start邊線對齊,而最後1個彈性項的外邊距和行的main-end邊線對齊,然後剩餘的彈性項分布在該行上,相鄰項目的間隔相等。

⑤space-around:

彈性項目平均分布在該行上,兩邊留有一半的間隔空間。如果剩餘空間為負或者只有一個彈性項,則該值等同於center。否則,彈性項目沿該行分布,且彼此間隔相等(比如是20px),同時首尾兩邊和彈性容器之間留有一半的間隔(1/2*20px=10px)。

效果圖展示:

(3)實例

3.4align-items 屬性

(1)定義

align-items 設置或檢索彈性盒子元素在側軸(縱軸)方向上的對齊方式。

(2)語法

各個值解析:

①flex-start:彈性盒子元素的側軸(縱軸)起始位置的邊界緊靠住該行的側軸起始邊界。

②flex-end:彈性盒子元素的側軸(縱軸)起始位置的邊界緊靠住該行的側軸結束邊界。

③center:彈性盒子元素在該行的側軸(縱軸)上居中放置。(如果該行的尺寸小於彈性盒子元素的尺寸,則會向兩個方向溢出相同的長度)。

(3)實例

四、子元素上的屬性

4.1flex-grow

flex-grow 根據彈性盒子元素所設置的擴展因子作為比率來分配剩餘空間。

默認為0,即如果存在剩餘空間,也不放大。如果只有一個子元素設置,那麼按擴展因子轉化的百分比對其分配剩餘空間。0.1即10%,1即100%,超出按100%【實例4-2】

五、瀏覽器內核

瀏覽器最重要或者說核心的部分是「Rendering Engine」,可大概譯為「渲染引擎」,不過我們一般習慣將之稱為「瀏覽器內核」。負責對網頁語法的解釋(如標準通用標記語言下的一個應用HTMLJavaScript)並渲染(顯示)網頁。 所以,通常所謂的瀏覽器內核也就是瀏覽器所採用的渲染引擎,渲染引擎決定了瀏覽器如何顯示網頁的內容以及頁面的格式信息。不同的瀏覽器內核對網頁編寫語法的解釋也有不同,因此同一網頁在不同的內核的瀏覽器裡的渲染(顯示)效果也可能不同,這也是網頁編寫者需要在不同內核的瀏覽器中測試網頁顯示效果的原因。

六、廠商前綴

css標準中各個屬性也要經歷從草案(WD)到推薦(REC)的過程,css中的屬性進展都不一樣。瀏覽器廠商在標準尚未明確情況下提前支持會有風險,同時也會出現有的瀏覽器廠商支持的好,有的支持的不好,所以就用廠商前綴加以區分。

CSS3中一些新功能也是目前導致各大瀏覽器不兼容的一個原因,這些新功能的出現,瀏覽器廠商們變便開始嘗試融合、試驗,所以就在這些功能前加上自己的特定前綴來執行自己的特定解決方法,為了讓這些功能能在完全確認下來前使用;

下面就是我們經常用到的前綴及其兼容瀏覽器:

-webkit-

Apple Webkit團隊,兼容Android, Safari, Chrome等;

-moz-

Mozilla,兼容Firefox等;

-ms-

Microsoft基金會,兼容IE;

-o-

兼容Opera

因此對於一些較新的css3特性,需要添加以上前綴兼容每個瀏覽器,例如實現線性漸變,標準寫法是 linear-gradient(),但是一下瀏覽器還未完全確定這一特性,就在前面添加一個前綴來進行試驗執行,如 -webkit-linear-gradient;

下面是開發中常用的兼容寫法:

七、Css Hack

由於不同廠商的瀏覽器,或者是同一廠商的瀏覽器的不同版本,如IE6和IE7,對CSS的解析認識不一樣,因此會導致生成的頁面效果不同,得不到我們所需要的頁面效果。 這個時候我們就需要針對不同的瀏覽器去寫不同的CSS,讓它能夠同時兼容不同的瀏覽器,能在不同的瀏覽器中也能得到我們想要的頁面效果。

css hack並不是什麼技術,只是針對於在不同瀏覽器上的bug的解決方案。一般都是利用各瀏覽器的支持CSS的能力和BUG來進行的。

hack這個詞,看翻譯也知道它屬於是一種「暴力」的作法,儘量找到通用方法而減少對CSS Hack的使用,大規模使用CSS Hack會帶來維護成本的提高以及瀏覽器版本變化而帶來類似Hack失效等系列問題。(對當前瀏覽器版本起作用的hack,也許升級一下,界面就又亂了)

下面我們學習常用的幾個hack,主要僅針對IE瀏覽器,IE6以下不再考慮。

1.條件hack

【示例1】

【示例2】

【示例3】

通過上面三個例子我們可以發現:

條件注釋它的格式為

大於 gt

大於或等於 gte

小於 lt

小於或等於 lte

非指定版本 !

這些條件幫我們更精確的篩選瀏覽器版本

2、屬性級Hack

同一段文字在IE6,7,8顯示為不同顏色

八、作業

https://www.meizu.com/

相關焦點

  • HTML+CSS:圖文結合讓你深入理解css盒模型
    本篇文章要給大家講的算是比較重點的內容了,css盒模型。理解了它對你以後頁面的排版和布局有著非常關鍵的作用。什麼是css盒模型?css盒子模型 又稱框模型 (Box Model) ,它包含了元素內容(content)、內邊距(padding)、邊框(border)、外邊距(margin)幾個要素。下圖就為我們標準的盒模型示意圖。css盒模型進階練習1)我們來看下邊的一個例子。
  • web前端學習什麼是css盒子模型
    web前端學習什麼是css盒子模型? 在網頁中,一個元素佔有空間的大小由幾個部分構成,其中包括元素的內容(content),元素的內邊距(padding),元素的邊框(border),元素的外邊距(margin)四個部分。
  • 如何在HTML文檔中使用CSS樣式表?
    DOCTYPE html><html> <head> <meta charset="utf-8"> <title>奔月教程(runoon.com)</title> </head> <body> .
  • Python學習第235課——html引入css的4種方式
    之前我們寫css代碼,都是在html文件的<head>標籤裡面的<style>標籤裡面,直接寫css代碼。在html中以這種方式引入css,叫做內嵌式方法。當我們只有一個或幾個html文件時,用內嵌式方法引入css是沒有什麼問題的,但是當我們的網站比較大,網頁比較多的時候,每一個html文件,我們都用內嵌式去引入css的話,不但寫的時候比較麻煩,而且以後維護起來也比較麻煩。
  • 深入理解CSS盒子模型
    ifaou在幫助我解決我問題的同時,還推薦我閱讀一篇有關CSS盒子模型的文章《The CSS Box Model》,閱讀之後受益匪淺,才知道自己對盒子模型知識還是如此欠缺。恰逢學期末,項目驗收後暫時告一段落,有空閒的時間。於是想把這篇文章翻譯出來,一方面再給自己一點挑戰和鍛鍊,另一方面也給大家參考,讓更多的人受益。這篇文章適合初級web設計朋友,讓你對盒子模型有更近一步的理解。
  • 前端面試常考問題之css盒模型
    一、題目:談一談你對CSS盒模型的認識專業的面試,一定會問 CSS 盒模型。對於這個題目,我們要回答一下幾個方面:(1)基本概念:content、padding、margin。(2)標準盒模型、IE盒模型的區別。不要漏說了IE盒模型,通過這個問題,可以篩選一部分人。
  • css如何製作梯形 - 百度經驗
    想知道css如何製作梯形嗎,讓我們一起來學習一下吧。新建html頁面。如圖:在html頁面創建一個div標籤。如圖:設置梯形class樣式,並引用該樣式,然後保存。如圖:使用瀏覽打開就可以看到梯形了。DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>Document</title>    <style type="text/css">        .trapezoid{            border-bottom: 100px solid
  • html製作電視劇列表詳情
    效果圖:html布局:<html><head><meta charset="utf-8"><title>電視劇詳情列表</title><link rel="stylesheet" type="text/css" href="css/tv.css"/></head>
  • 零基礎html5+div+css+js網頁開發教程第003期 html代碼基本結構
    在第二期中,我們對html做了入門,已經有了對網頁開發基本的了解。本節知識開始書寫html網頁結構。本節知識視頻教程以下開始文字講解:一、Html代碼基本結構html代碼就像一個人一樣,可以分成幾個部分。我們先來了解三個節點。
  • 9款流行的 HTML5/CSS3 框架推薦
    Gridless 是個很棒的HTML5 和CSS3 框架,製作跨平臺網站排版、布局等。 作者 Harry Roberts ,該框架應用於較小的屏幕,主要特點是甚至對IE6+的新的HTML5 元素的基本支持。 Less Framework 4 是個CSS網格系統,用於設計自適應網站,包括4個布局和3組排版預設。
  • HTML+CSS:三種css的引入方式,內鏈式、嵌入式、外部式
    上篇文章我們簡單介紹了css的概念以及語法,本篇文章我們將為大家介紹下css的三種引入方式。(1)內鏈式引入內鏈式css樣式表就是把css代碼直接寫在現有的HTML標籤中,具體的使用方法如下面所示:<divstyle="color:red">設置文字的顏色為紅色</div>這裡要注意:樣式的內容寫在元素的開始標籤裡,並且css樣式代碼要寫在style=""雙引號中,如果有多條css樣式代碼設置可以寫在一起,中間用分號隔開
  • HTML與CSS簡介(一)
    對於使用css的設計師來說,class屬性就是最重要也是最經常使用的屬性之一。現在你可能有點暈頭轉向,但是後面我會不斷提到標籤、元素、屬性,如果不記得就回來看一下就好了。CSS這就是網頁的第二個核心——樣式。
  • 使用HTML DIV+CSS樣式+JavaScript實現自定義個性化的模態窗口
    DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title></title>
  • Web前端學習第20課,如何為HTML元素編寫CSS樣式表
    本節課主要有關CSS兩個方面的問題:css樣式規則怎麼寫以及寫在哪裡的問題。1.CSS的寫法規則CSS 寫法規則由兩部分構成:選擇器,以及一條或多條屬性聲明。選擇器是您需要設置樣式的 HTML 元素。每條聲明由屬性和值組成。屬性是您希望設置元素哪方面的樣式,比如文本的顏色color,每個屬性有一個具體的取值。屬性和值之間用冒號分開。
  • 超文本標記語言HTML之快速入門HTML簡介、HTML入門
    首先第一步就要學習HTML與CSS,這並不需要去學一大堆的諸如Dreamweaver,Firework之類的各種網頁設計工具,關鍵是學會和理解HTML網頁嵌套的block結構與CSS的box模型。許多ASP.NET控制項最後都必須轉化為HTML。而且,div+CSS是當前主流的網頁布局模型。
  • 將CSS樣式代碼應用到HTML頁面的幾種方式
    type=」text/css」用來定義文件的類型為樣式表文本文件。例如,設置一個div標籤的樣式,那麼文檔中所以用<div>和</div>框住的內容就應用該樣式,如下圖:又如,定義一個樣式類,引用該類,代碼及效果如下圖:內嵌式樣式表是可以被重複引用的,但是卻不能跨頁使用。
  • CSS樣式表和選擇器
    ,一個人負責寫css)比如說,有一個樣式需要在一百個頁面上顯示,如果是html來實現,那要寫一百遍,現在有了css,只要寫一遍。現在,html只提供數據和一些控制項,完全交給css提供各種各樣的樣式。CSS的重點知識點盒子模型、浮動、定位CSS 整體感知我們先來看一段簡單的css代碼:<!
  • css font-family屬性設置元素的字體
    font-family屬性定義及用法在css中,font-family屬性是使用來規定元素的字體系列,把多個字體名稱作為一個「回退」系統來保存,如果瀏覽器不支持第一個字體,則會嘗試下一個。有兩種類型的字體系列名稱:指定的系列名稱:具體字體的名稱,比如:"times"、"courier"、"arial"。通常字體系列名稱:比如:"serif"、"sans-serif"、"cursive"、"fantasy"、"monospace"語法格式:css語法:font-family:字體1,字體2,...
  • css3 box-sizing屬性筆記
    box-sizing屬性;box-sizing屬性語法格式box-sizing: content-box/border-box/inherit;參數說明content-box:這是由CSS2.1規定的寬度高度行為,寬度和高度分別應用到元素的內容框,在寬度和高度之外繪製元素的內邊距和邊框;border-box:為元素設定的寬度和高度決定了元素的邊框盒,
  • HTML最基本的知識
    是 網頁製作必備的程式語言 「超文本」就是指頁面內可以包含圖片、連結,甚至音樂、程序等非文字元素。超文本標記語言的結構包括「頭」部分(英語:Head)、和「主體」部分(英語:Body),其中「頭」部提供關於網頁的信息,「主體」部分提供網頁的具體內容。下圖就是html的模板。