摘要:而內聯元素會并排顯示,寬度緊隨內容變化而變化。但元素又按照內聯元素顯示,不會另起一行。這種情況下,只能指定非內聯元素的屬性值。如下是為非內聯元素設置寬度的例子高度元素的默認高度取決于它的內容。
現在我們已經熟悉了HTML和CSS。了解了它的基礎。現在我們來更深入的了解元素在頁面中的呈現和大小。
在這節課中,我們將會討論什么是盒子模型,它的工作模式是怎樣的。我們也會在課程中學習一些新的CSS屬性,并且將介紹三種長度單位。
元素是如何顯示的在了解盒子模型之前,我們先來了解一下元素是如何顯示的。在第二節課中,我們學習了塊狀元素和內聯元素的差異。快速回顧一下,塊狀元素會另起一行,并占據所有可用的寬度,不管內容有沒有。而內聯元素會并排顯示,寬度緊隨內容變化而變化。塊狀元素通常用在大塊的內容上,例如標題,結構元素。內聯元素用在小塊的內容上,比如將幾句話加粗或斜體顯示。
display屬性元素如何顯示——例如塊狀元素,內聯元素和其他元素——都由顯示屬性display決定。每個元素都有一個默認的display屬性值。和其他屬性值一樣,這個屬性值是可以被覆蓋的。display值有很多,其中最常用的是block,inline,line-block和none。
我們可以通過CSS選中元素并改變和重新聲明元素的display屬性值。 若值為block可以使元素成為塊狀元素顯示。
p { display: block; }
將值設置為inline,可以將元素轉化為內聯元素。
p { display: inline; }
inline-block比較有意思,它可以使元素的所有塊狀元素的屬性生效。但元素又按照內聯元素顯示,不會另起一行。
p { display: inline-block; }
兩個內嵌塊元素間的空隙
inline-block內嵌塊元素有個重要的點,就是它們并非是首尾相接的。兩個內嵌塊元素之間存在小空隙。這個空隙雖然很惱人,但這是正常現象。我們會討論為什么這個空隙存在,以及怎么消除。
最后是none屬性值,會完全隱藏元素,頁面渲染的時候會當它不存在。任何被包裹在這個屬性值元素內的元素都會被隱藏。
div { display: none; }
了解元素如何顯示,以及怎么修改display屬性非常重要,因為它會影響盒子模型的呈現效果。討論盒子模型的時候,我們會知道他們之間的差別,意義和影響。
什么是盒子模型?根據盒子模型的概念,每個在頁面上的元素都是一個擁有寬,高,內邊距,邊框和外邊距的長方形盒子。
頁面上每個元素都符合盒子模型的定義,所以它非常重要。我們使用一些新的CSS屬性來來熟悉它。
使用盒子模型每個元素都是一個長方形盒子,有幾個屬性能確定這個盒子的大小。盒子的核心屬性是元素的寬高,這兩個值可能是由元素的display屬性、元素的內容或具體的width,height屬性值生成的。內邊距padding和邊框border拓展了元素的高寬。最后是我們定義的在邊框外的外邊距margin。
盒子模型對應的CSS屬性為:width,height,padding,border,margin。
我們來看例子:
div { border: 6px solid #949599; height: 100px; margin: 20px; padding: 20px; width: 400px; }
根據盒子模型,元素的總寬度計算如下:
margin-right + border-right + padding-right + width + padding-left + border-left + margin-left
使用上述公式,就能算出示例中的高寬值
Width:492px = 20px + 6px + 20px + 400px + 20px + 6px + 20px
Height:192px = 20px + 6px + 20px + 100px + 20px + 6px + 20px
毫無疑問盒子模型是HTML和CSS很容易混淆的部分之一。
我們將width的值設置為400像素,但元素的實際寬度為492像素。默認情況下,盒子模型是加法。因此想要確定盒子的實際大小,我們需要考慮將四面的內邊距,邊框,外邊距都考慮進去。寬度不僅僅是width屬性的值,也要加上左右兩側的內邊距,邊框和外邊距。
到目前為止,上述屬性看著沒什么實際意義。因為這只是為了澄清所有形成盒子模型的屬性:width,height,padding,border和 margin。
寬度和高度每個元素都有默認的高度和寬度。雖然寬度和高度都有可能是0像素,但默認情況下,瀏覽器會渲染每個元素的大小。元素的默認寬度和高度依賴于元素是怎么顯示的。如果元素是頁面布局的關鍵元素。那么它就需要設置具體的width和height屬性值。這種情況下,只能指定非內聯元素的屬性值。
寬度
元素的默認寬度依賴于它display屬性的值。塊狀元素的默認寬度為100%,占據整行空間。內聯元素和內嵌塊元素的寬度都隨著元素的內容變化而變化。內聯元素不具備固定的大小,所以width和height屬性只有在非內聯元素上才能生效。如下是為非內聯元素設置寬度的例子:
div { width: 400px; }
高度
元素的默認高度取決于它的內容。元素根據內容需要進行垂直擴展或收縮。我們可以使用height屬性為非內聯元素設置高度:
div { height: 100px; }
調整內聯元素
請記住內聯元素不支持width和height屬性和與其相關的值。塊狀元素和內嵌塊元素支持width和height屬性和與其對應的值。
瀏覽器會根據元素設置其默認的外邊距和內邊距,使其更清晰易讀。我們使用基于文本的元素來看一下這個現象。不同瀏覽器和不同元素之間的默認外邊距和內邊距可能存在差異。我們在第一課中有討論過CSS重置,將這些差別調低,或使其為零。這樣我們就可以從頭開始定義我們需要的樣式。
外邊距
margin屬性設置一個元素的周圍空間大小。外邊距在元素邊框外并且是完全透明的。外邊距可以幫助我們將元素定位在頁面的特定位置,并且可以與其他元素保持距離。 示例如下:
div { margin: 20px; }
margin有一個特殊的現象,就是在內聯元素中垂直外邊距margin-top和margin-bottom不生效,在塊狀元素和內嵌塊元素中有效。
內邊距
padding屬性和margin屬性相似,只不過它在邊框內部,padding是為元素提供內部空間。示例如下:
div { padding: 20px; }
padding屬性和margin屬性不一致的地方是垂直內邊距在內聯元素中同樣有效;雖然垂直內邊距顯示在元素基準線之上或之下,但是它確實是存在的。
內聯元素的外邊距和內邊距
內聯元素對內邊距和外邊距的實現和塊狀元素與內嵌塊元素不同。外邊距只有橫向margin-left和margin-right有效。內邊距在內聯元素中完全生效,但是垂直內邊距padding-top和padding-bottom在元素基準線上面或下面顯示(譯者注:內聯元素加上垂直內邊距之后,元素內部的內容部分在視覺上沒有產生偏移)。
塊狀元素和內嵌塊元素的外邊距和內邊距的顯示是正常的。
外邊距和內邊距的聲明方式
在CSS中,很多屬性都有多種聲明方法。普通的寫法,就是一個屬性一個值,一個個地列出來。但我們也可以使用簡寫,一個屬性包含多個值。不是所有的屬性都有簡寫,所以我們必須確保寫出的屬性和值的結構是正確的。
margin和padding有普通和簡寫兩種書寫方式。當元素四面設置相同的外邊距時,可以使用margin屬性,并只指定一個值:
div { margin: 20px; }
如果上下外邊距的值一致,左右外邊距的值一致,我們可以輸入兩個值。 設置上下外邊距的值在前面。以下例子將上下外邊距設置為10像素,將左右外邊距設置為20像素:
div { margin: 10px 20px; }
如果四個值都不一致,那么我們按照 上右下左 的順序輸入值。例如,我們為div設置10像素的頂部外邊距,20像素的右側外邊距,0像素的底部外邊距,以及15像素的左側外邊距:
div { margin: 10px 20px 0 15px; }
若我們要設置多個值,優先考慮用margin和padding。但我們也可以用普通寫法,輸入一一對應的屬性和值。每個屬性名(該例子中是外邊距和內邊距)后跟隨一個破折號-以及要設置值的盒子的方向:top,bottom,right和left。
例如,padding-left屬性只接受一個值,設置元素的左側內邊距;margin-top只接受一個值,設置元素的頂部外邊距。
div { margin-top: 10px; padding-left: 6px; }
當我們只想設置單邊的margin和padding值時,這種普通寫法是最好的選擇。保持代碼的精確性可以防止出現混淆。例如,我們是否只想將元素的上右左三側的外邊距設為0,是否只想將底部外邊距設為10像素?
普通寫法輸入屬性和值可以讓目標更明確。當處理三個或以上的值時,縮寫更有幫助。
外邊距和內邊距的顏色
margin和padding屬性是完全透明的,不可以設置顏色。但因為是透明的,所以透出了相關元素的背景色。元素外邊距部分看到的顏色為它父級元素的背景色。元素內邊距部分看到的顏色為該元素的背景色。
邊框在內邊距和外邊距之間,畫出了元素輪廓。border屬性要求三個值:寬度,樣式,顏色。邊框屬性簡寫時值的順序為:寬度,樣式,顏色。普通書寫方式下,邊框的三個屬性名為:border-width,border-style和border-color 。普通書寫方式因為是單個值,更容易修改和復寫。
邊框的寬度和顏色能分別使用第三節課中討論過的長度單位和色值。
邊框有很多不同樣式。最常用的樣式值為solid,dashed,dotted和none,但你可以在列表中看到很多其他的樣式。
以下是邊框設置示例:
div { border: 6px solid #949599; }
單側邊框
和margin,padding屬性一樣,也可以一次只設置元素一個方向的邊框。使用屬性名:border-top, border-right,border-bottom和border-left。它們的屬性值和border的屬性值一樣有三個:寬度,樣式和顏色。如下所示:
div { border-bottom: 6px solid #949599; }
另外,單側邊框的樣式也可以被細分,如下所示:
div { border-bottom-width: 12px; }
這些高度細分的邊框屬性名都由連字符分隔,由border單詞開頭,隨后是邊框的方向:top,right,bottom,left,最后是要設置的樣式:width,style,color。
border-radius
border-radius可以使元素的邊角變圓。
border-radius接受多種長度單位,如百分比,像素,確定元素邊角變圓的半徑。單個值表示四個角的弧度一直,兩個值按分別表示top-left/bottom-right和top-right/bottom-left,輸入四個值按順序分別表示:top-left,top-right,bottom-right和bottom-left。
思考border-radius多個值的順序時(包括margin和padding),記住它們是從左上角開始(margin和padding從上側開始)按順時針方向排序的。
div { border-radius: 5px; }
現在,在盒子模型中有一個附加屬性。如果你設置了元素的width為400像素,并將padding設置為20像素,將border設置為10像素,那么實際的盒子寬度為460像素。記住,盒子的寬度是width,padding和border相加獲得的。 但是在CSS3中,盒子模型有了一個不一樣的計算方式。CSS3推出了box-sizing屬性,完全改變了盒子模型的運作模式和元素大小的計算方式。這個屬性有三個主要值——content-box,padding-box和 border-box——每個值對盒子模型大小的計算稍微有些不一樣。 content-box content-box這個屬性值是默認值。這個默認值和元素不加box-sizing屬性時的效果是一致的。元素從width和height屬性的值開始計算,加上padding,border和margin屬性值獲得盒子的實際尺寸。 特定瀏覽器的屬性和值 上例中box-sizing屬性前的連字符和字母是什么? CSS3的推出后,瀏覽器逐步開始以加前綴的方式支持新屬性和值,包括box-sizing屬性。隨著部分CSS規范被瀏覽器廣泛支持以及瀏覽器版本的更新,前綴的作用也越來越小,隨著時間的發展將不再是一個問題。但在老版本瀏覽器中還是不可或缺的。 屬性名和屬性值都可以添加前綴。例如,上例中的box-sizing屬性名加了前綴。瀏覽器可以選擇什么時候加前綴什么時候不加前綴,因此有些屬性需要帶有某瀏覽器的前綴,有些屬性不需要。 接下來的課程中,若某個屬性或值需要前綴,只會在介紹那個屬性時添加使用(這有利于保持代碼的簡潔)。不過你們在實際寫代碼的時候不要忘記添加前綴。 最常見的幾個瀏覽器前綴概括如下: Mozilla的火狐瀏覽器: -moz-
微軟的IE瀏覽器:-ms-
Webkit(谷歌的Chrome瀏覽器和蘋果的Safari瀏覽器):-webkit-
padding-box 屬性值padding-box時,元素將padding屬性值計算入width和height屬性值內,改變了盒子模型計算模式。例如,元素的width設置為400像素,padding值設為20像素,最終元素實際的寬度還是400像素。隨著內邊距的擴大,元素的內容區域會隨著縮小,但是盒子實際大小并未發生改變。 如果我們增加border或margin,那么盒子的大小就是這些屬性值加上width和height的值。例如,我們將元素的的width設置為400像素,每個方向的border都設置為10像素,padding設置為20像素,那么元素的實際寬度就為420像素。 值 padding-box 已被棄用 隨著CSS規范的更新,box-sizing的值padding-box已被棄用,我們不應再使用它。 Border Box 最后一個屬性值是border-box,它將border和padding都算在元素的width和height屬性值內。例如,一個元素的width為400像素,每邊的padding為20像素,border為10像素,最終元素的實際寬度仍然為400像素。 使用box-sizing屬性 通常來說,box-sizing最佳屬性值為border-box,這個屬性值更易計算。如果我們將一個元素的width為400像素,那么不管你增加了邊框還是內邊距,它的大小都還是400像素。 另外,我們也可以輕松的相對值。如果我們設置一個元素的寬度為40%,元素每邊的padding值為20像素,border值為10像素。那么盡管有地方設置了像素值,元素盒子的實際大小仍然為40%。 唯一遺憾的是box-sizing是CSS3的屬性,并不是所有瀏覽器都支持,尤其是老版本瀏覽器。所幸隨著瀏覽器版本更新,影響會越來越小。我們使用box-sizing的時候,需要留意哪些瀏覽器會出現兼容問題。 大多數瀏覽器都有開發者工具。我們可以使用這些工具查看頁面上的元素、這些元素的HTML結構 在Chrome瀏覽器中打開菜單欄,找到“更多工具”選項中的“開發者工具”選項并點擊它,瀏覽器窗口的底部會顯示出一個視窗,其中提供了一些代碼檢查工具。 懸停或點擊視窗中的元素節點,可以查看這個元素的信息。 選中一個元素后,在視窗右側選中“Computed”選項,我們就可以看到我們選中的元素的盒子模型。 Chrome, Firefox,Safari以及其他瀏覽器中都有開發者工具。查看源代碼可以學到很多東西。我在編寫HTML和CSS的時候通常都會打開開發者工具,也常常用它查看分析其他網站的源代碼。 現在我們回到之前做的“樣式討論會”網站,并未它添加更多的內容。 首先,在main.css文件中添加一個box-sizing屬性,值設置為border-box,這樣可以使我們的元素更容易控制。在文件的頁面重置樣式下,添加一條注釋,有助于網站布局。把它放在樣式重置代碼之下,是使其放在正確的層疊關系上。 接下來我們要創建一個可以作為我們元素容器的class屬性。用它在不同的元素上設置共同的width,padding屬性,并將元素居中。 在我們通配符選擇器下,創建一個新的class選擇器名為container。在選擇器中將width設置為960像素,padding-left和padding-right設置為30像素,上下外邊距設置為0,左右外邊距設為auto。 現在container已經可以使用,我們把它添加到所有頁面的 接下來,我們將container添加到介紹會議的 另外,也將container添加到其他頁面中包含有元素的元素上。 稍后我們還會再回來調整這些元素和class屬性。現在我們先做另一件事。 現在我們的內容已經居中顯示,接下來為元素創建縱向的間隔。我們先把標題和段落的底部外邊距設置為22像素。我們將這個排版樣式以及它的注釋放在之前的容器樣式之下。 我們在此跳過了和元素,因為設計中不需要外邊距,這次我們不會用到。 現在我們在頁面第一個的底部放置一個按鈕,并為其設置邊框和圓角。 接下來我們在排版樣式之下為這兩個屬性值添加樣式。 首先創建一個能被所有按鈕共享的樣式的class選擇器btn。我們希望所有的按鈕的border-radius為5像素,display為inline-block,并移除所有外邊距。 我們使用btn-alt為當前按鈕設置特殊的樣式。我們增加1像素的灰色邊框,并且設置上下內邊距為10像素,左右內邊距為30像素 我們在同一元素中使用了btn和btn-alt,那么相應的樣式都會渲染上去。 在主頁上,我們為包含上述元素的元素設置padding樣式。我們通過在其上添加一個class屬性值hero來實現。 最后,我們在CSS文件分隔出一塊專門設置主頁的樣式,然后hero添加padding屬性。 現在我們的網站更加完整了,尤其是主頁。 通配符選擇器 在此練習的第一步,我們提到了通配符選擇器*,它會選中所有的元素。相比于一一列出所有能想到的單個元素,不如使用它來選中所有的元素。 我們也在第一步中提到了偽元素:before和:before,它們可以在CSS中動態生成元素。我們不會當前項目中使用它。不過在通配符選擇器中使用偽元素是很常用的做法。 這是練習的源代碼。點擊下載 休息一下我們再繼續。 將盒子模型所有內容學完并不容易。這些概念雖然只是簡單介紹,卻花了很多時間來掌握它。 這節課所學內容概括如下: 元素是如何顯示的 什么是盒子模型,它為什么很重要 怎么修改元素的大小,包括寬度和高度 怎么添加元素的外邊距,內邊距和邊框 怎么修改元素box-sizing及其對盒子模型的影響 現在我們對如何顯示元素和設置尺寸有了更好的了解,接下來我們深入了解一下元素的定位。 http://learn.shayhowe.com/htm... 文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。 轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/51114.html
border-radius屬性也允許我們使用普通方法書寫單個屬性值。這些普通的屬性以border單詞開通,跟著是邊角的垂直位置(top或bottom),再是邊角的橫向位置(left或right),最后是半徑radius。例如,要設置div {
border-top-right-radius: 5px;
}
box-sizing
div {
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
div {
box-sizing: padding-box;
}
若我們還增加了margin屬性,在獲取盒子總大小時它的值需要做加法計算。不管box-sizing的屬性值是什么, 計算盒子總大小時任何margin的值都需要做加法計入。div {
box-sizing: border-box;
}
和CSS屬性及它們值。它們大部分都有盒子模型圖解。
在這里,我們可以使用通配符選擇器*,后面跟隨帶偽元素的選擇器*:before和*:after,這樣就可以選中頁面中所有的元素,將其box-sizing值設置為border-box。請記住,box-sizing是有前綴的,因為它是一個較新的屬性。/*
========================================
Grid
========================================
*/
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
container告訴瀏覽器所有使用了這選擇器的元素的寬度。左右外邊距值設為auto,再加之設好的寬度值,可以讓瀏覽器自動計算出左右相等的外邊距,元素就相對于頁面居中了。最后設置左右內邊距,使內容不緊貼元于素的邊緣,為內容提供一點喘息的空間。.container {
margin: 0 auto;
padding-left: 30px;
padding-right: 30px;
width: 960px;
}
...
/*
========================================
Typography
========================================
*/
h1, h3, h4, h5, p {
margin-bottom: 22px;
}
我們先添加一個元素,并將其的class屬性值設為btn和btn-alt....
/*
========================================
Buttons
========================================
*/
.btn {
border-radius: 5px;
display: inline-block;
margin: 0;
}
.btn-alt {
border: 1px solid #dfe2e5;
padding: 10px 30px;
}
/*
========================================
Home
========================================
*/
.hero {
padding: 22px 80px 66px 80px;
}
演示源代碼
摘要:而內聯元素會并排顯示,寬度緊隨內容變化而變化。但元素又按照內聯元素顯示,不會另起一行。這種情況下,只能指定非內聯元素的屬性值。如下是為非內聯元素設置寬度的例子高度元素的默認高度取決于它的內容。 現在我們已經熟悉了HTML和CSS。了解了它的基礎。現在我們來更深入的了解元素在頁面中的呈現和大小。 在這節課中,我們將會討論什么是盒子模型,它的工作模式是怎樣的。我們也會在課程中學習一些新的C...
摘要:前端日報精選專題之通用遍歷方法的實現深入了解的子組件上最流行的項目再聊移動端頁面的適配譯盒子模型實踐教程中文全棧第天數據驅動龍云全棧譯年開發趨勢瘋狂的技術宅在翻譯譯閉包并不神秘前端心得拼多多前端筆試個人文章容器技術方 2017-08-03 前端日報 精選 JavaScript專題之jQuery通用遍歷方法each的實現深入了解React的子組件GitHub上最流行的Top 10 Jav...
摘要:浮動定位的其中一種方法就是使用屬性。例如,是一個內聯元素,它默認的值為和值是不生效的。然而,如果我們將這個內聯元素設置為浮動,那么它的默認值會變成這時候和值就生效了。包裹元素就是將浮動元素置于父元素中,父元素作為容器會置于正常的文件流中。 CSS最大的用處之一就是可以將內容和元素定位到任何我們想要的位置,使我們的設計具有結構,使內容更加易懂。 CSS有好幾種不同的定位屬性,每種都有自己...
摘要:浮動定位的其中一種方法就是使用屬性。例如,是一個內聯元素,它默認的值為和值是不生效的。然而,如果我們將這個內聯元素設置為浮動,那么它的默認值會變成這時候和值就生效了。包裹元素就是將浮動元素置于父元素中,父元素作為容器會置于正常的文件流中。 CSS最大的用處之一就是可以將內容和元素定位到任何我們想要的位置,使我們的設計具有結構,使內容更加易懂。 CSS有好幾種不同的定位屬性,每種都有自己...
摘要:標準文檔流的常見現象空白折疊現象。浮動浮動的特點脫離標準文檔流,元素一旦脫離標準文檔流脫標,后面的元素會占據浮動元素原本的位置,而且元素就不再遵守文檔流中塊級元素和行內元素的特性。元素浮動會脫離文檔流但是不會脫離文本流,所以會產生字圍效果。 CSS 盒子模型 (點擊查看官方解釋) 實際上網頁中的每一個標簽都可以看成一個盒子模型,而這個盒子模型從內到外有以下這幾個元素組成 conten...
閱讀 1344·2023-04-26 00:35
閱讀 2714·2023-04-25 18:32
閱讀 3344·2021-11-24 11:14
閱讀 770·2021-11-22 15:24
閱讀 1417·2021-11-18 10:07
閱讀 6466·2021-09-22 10:57
閱讀 2773·2021-09-07 09:58
閱讀 3565·2019-08-30 15:54