CSS3盒模型溫故

来源:http://www.cnblogs.com/liu-fei-fei/archive/2016/05/30/5540895.html
-Advertisement-
Play Games

CSS有一種基礎設計模式叫盒模型,定義了Web頁面中的元素是如何看做盒子來解析的。每一個盒子有不同的展示界面,下麵就來介紹盒模型,主要有一下幾種盒模型:inline、inline-block、block、table、absolute position、float。瀏覽器把每個元素看做一個盒模型,每個 ...


CSS有一種基礎設計模式叫盒模型,定義了Web頁面中的元素是如何看做盒子來解析的。每一個盒子有不同的展示界面,下麵就來介紹盒模型,主要有一下幾種盒模型:inline、inline-block、block、table、absolute position、float。
瀏覽器把每個元素看做一個盒模型,每個盒模型是由以下幾個屬性組合所決定的:display、position、float、width、height、margin、paddinghe border等,不同類型的盒模型會產生不同的佈局

什麼是盒模型?
頁面中的每一個元素都是一個盒模型,包括HTML和body。如下圖,每一個盒模型都是由多種屬性組成的

重置盒模型解析模式
在W3C的傳統CSS2.1盒模型中,通過聲明width和height值來控制內容區域的寬度和高度,然後附加上內邊距和邊框等,稱為內容盒模型
在CSS中盒模型被分為兩種,第一種是W3C的標準模型,另一種是IE的傳統模型,它們相同之處都是對元素計算尺寸的模型,具體說就是對元素的width、height、padding和border以及元素實際尺寸的計算關係,不同之處是兩者的計算方法不一致
1)W3C的標準盒模型
外盒尺寸計算(元素空間尺寸)
element空間高度 = 內容高度+內距+邊框+外距
element空間寬度 = 內容寬度+內距+邊框+外距
內盒尺寸計算(元素大小)
element高度 = 內容高度+內距+邊框(height為內容高度)
element寬度 = 內容寬度+內距+邊框(width為內容寬度)
2)IE傳統下盒模型(IE6以下,不包含IE6版本或QuirksMode下IE5.5+)
外盒尺寸計算(元素空間尺寸)
element空間高度 = 內容高度+外距(height包含了元素內容寬度、邊框、內距)
element空間寬度 = 內容寬度+外距(包含了元素內容寬度、邊框、內距)
內盒尺寸計算(元素大小)
element高度 = 內容高度(height包含了元素內容寬度、邊距、內距)
element寬度 = 內容寬度(width包含了元素的內容寬度、邊距、內距)
做個小總結:我個人的理解就是,IE下的盒模型,直接設置了box-sizing:border-box;

1.CSS3盒模型屬性
語法及參數:box-sizing:content-box | border-box | inherit
三個屬性值說明:
content-box:預設值,讓元素維持W3C的標準盒模型。元素的寬度和高度(width/height)= 元素邊框寬度(border)+ 元素內距(padding)+ 元素內容寬度和高度(content width/height),也就是element width/height=border+padding+content width/height
border-box:此值會重新定義CSS2.1中盒模型組成的模式,讓元素維持IE傳統的盒模型(IE6以下版本和6 ~ 7怪異模式)。元素的寬度或高度 = 元素內容的寬度或高度。從盒模型介紹可知,這裡的內容寬度或高度包含了元素的border、padding、內容的寬度或高度(此處的內容寬度或高度 = 盒子的寬度或高度-邊框-內距)
inherit:此值是元素繼承父元素的盒模型模式

box-sizing屬性主要用來控制元素的盒模型的解析模式,其主要目的是控制元素的總寬度。box-sizing:border-box;這種設置使頁面佈局更加方便,只要對元素就行width設置,總寬度就固定不變
註:在Firefox瀏覽器中,box-sizing還可以設置一個padding-box屬性值,用來指定元素的寬度或高度包括內容的寬度或高度和內距,但不包括邊框寬度

瀏覽器相容性

2.CSS3內容溢出屬性
盒模型,也就是一個容器,容器就有空間有大小,當某些內容在盒子中容不下時,就會超出盒子,此時就可以使用overflow(CSS2.1)屬性來指定如何顯示盒中容納不下的內容。在CSS3中增加了overflow-x和overflow-y屬性
語法及參數:
overflow-x:visible | hidden | scroll | auto | no-display | no-content
overflow-y:visible | hidden | scroll | auto | no-display | no-content
和overflow屬性參數一樣,overflow-x和overflow-y屬性值去不同的值所起的作用不一樣
visible:預設值,表示不剪切容器中的任何內容、不添加滾動條,元素將被剪切為包含對象的視窗大小,而且是clip屬性設置將失效
hidden:內容溢出容器時,所有內容都將隱藏,而且不顯示滾動條
scroll:不管內容有沒有溢出容器,overflow-x都會顯示橫向的滾動條,而overflow-y會顯示縱向的滾動條
auto:在需要時剪切內容並添加滾動條。也就是說當內容超過容器的寬度或者高度時,溢出的內容將會隱藏在容器中,並且會添加滾動條,用戶可以拖動滾動條查看隱藏在容器中的內容
no-display:當內容溢出容器時不顯示元素,此時類似於元素添加了display:none聲明一樣
no-content:當內容溢出容器時不顯示內容,此時類似於添加了visibility:hidden聲明一樣

瀏覽器相容性

3.CSS3自由縮放屬性
為了增強用戶體驗,CSS3增加了很多新的屬性,其中resize就是一個重要的屬性,也是一個非常實用的屬性,它允許用戶通過拖動的方式來修改元素的尺寸來改變元素的大小。
語法及參數:
resize:none | both | horizontal | vertical | inherit
屬性值說明:
none:用戶不能拖動元素修改尺寸大小
both:用戶可以拖動元素,同時修改元素的寬度和高度
horizontal:用戶可以拖動元素,僅可以修改元素的寬度,但不能修改元素的高度
vertical:用戶可以拖動元素,僅可以修改元素的高度,但不能修改元素的寬度
inherit:繼承父元素的resize屬性值

瀏覽器相容性

4.CSS3外輪廓屬性
外輪廓outline在頁面中呈現的效果和邊框border呈現的效果極其相似,但和元素邊框border完全不同,外輪廓線不占用網頁佈局空間,不一定是矩形,外輪廓是屬於一種動態樣式,只有元素獲取到焦點或者被激活時呈現
語法及參數:
outline:[outline-color] | [outline-style] | [outline-width] | [outline-offset] | inherit
屬性值說明:
outline-color:定義了輪廓線的顏色,預設為黑色
outline-style:定義了輪廓線的樣式,預設為none
outline-width:定義輪廓線的寬度,屬性值可以為一個寬度值,預設值為medium,表示繪製中等寬度的輪廓線
outline-offset:定義輪廓邊框的便宜位置的數值,此值可以是負值。為正值時,表示輪廓邊框向外偏移多少個像素;當為負值是,表示輪廓邊框向內偏移多少個像素
inherit:元素繼承父元素的outline效果

瀏覽器相容性

outline和border的對比
1)border是盒模型的一部分直接影響其大小,outline不影響文檔流,也不破壞網頁佈局
2)border可以單邊設置,outline始終閉合;沒有outline-top或outline-left之類
3)outline創建的外輪廓線可能是非矩形的,我的理解是當元素在文檔邊上的時候,輪廓被隱藏了;而border不會被隱藏掉
4)border只能向外擴展;而outline內外都可以

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 偶爾調試代碼的時候會出現這種事情,之前並沒有特別註意,今天稍微搜集一下相關資料: 1.跳轉到的代碼的確沒有源碼,下載源碼後選擇源碼位置後便會正常顯示源碼. 2.源碼和class文件不一致.即便勾選了auto build選項,eclipse依然存在class沒有實時編譯的情況,致使我們當前的代碼和編譯 ...
  • SpringBoot啟動過程: 1、構建SpringApplication對象 2、執行run() 一、構建SpringApplication對象 說明: 實例化該類的時候會載入bean到applicationContext中去 這裡的入參是MySpringApplication.class這樣一個 ...
  • 本文結合實例詳述了策略模式的實現方式,並介紹瞭如何結合簡單工廠模式及Annotation優化策略模式。最後分析了策略模式的優缺點及已(未)遵循的OOP原則 ...
  • 在一個招聘網站中,通過限制用戶選擇職位標簽個數,可以精確定位用戶的職位。例如,以覆選框的形式為用戶提供一下備選職位標簽,限制用戶最多選擇3個,當超過三個時禁止用戶繼續選擇。 覆選框在問卷調查,招聘網站用的很廣,今天來介紹一下限制覆選框最多選擇幾項的方法: 思路: 監聽覆選框的onclick事件 監聽 ...
  • 一.簡介 Processing.js作者是John Resig,這是繼Jquery之後,他的第二個力作。 Processing.js提供了教學可視化的編程語言及運行環境。通過編寫processing程式,教師可以將複雜的物理、化學、數學原理形象的展示給學生。比如繪製各種曲線圖,波線,粒子,繪製分子結 ...
  • Div層拖動效果圖: 實現: CSS: View Code <style> div { position:relative; } </style> JS: View Code <script type="text/javascript"> var mouseover=true var xcoor; ...
  • 在JavaScript 中,this的指向是動態變化的,很可能在寫程式的過程中,無意中破壞掉this的指向,所以我們需要一種可以把this的含義固定的技術,於是就有了call,apply 和bind這三個方法,來改變函數體內部 this 的指向,因為函數存在「定義時上下文」和「運行時上下文」以及「上 ...
  • <!doctype html><html><head><meta charset="utf-8"><title>CSS壓縮混淆 / 格式化 / 美化工具</title><style type="text/csss">@charset "utf-8";/* CSS Document */ *{marg ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...