后端碼農談前端(CSS篇)第二課:CSS的5個來源


clipboard

0、瀏覽器默認樣式

當你不為html元素設置任何樣式時,顯示在瀏覽器上的(比如:<b>元素會顯示粗體、<p>元素有縱向margin、<h1>元素字號比<p>元素大一倍……)這是為什么呢?

因為瀏覽器自帶一個默認的樣式,在html元素未被設置樣式時,瀏覽器會按照自己默認的樣式來顯示。但是瀏覽器默認樣式的級別是最低的,一旦有其他地方設置了樣式,瀏覽器默認樣式就會被覆蓋掉。

注意,不同瀏覽器的默認樣式有些地方是不一樣的。例如,我們在寫css時,都會首先設置 * {margin:0; padding:0;},這是為何?就是因為有瀏覽器兼容性問題。干脆,全部弄成0,這樣各個瀏覽器就都統一了。

下面,我們貼出默認樣式的代碼:

html, address,blockquote,body, dd, div,dl, dt, fieldset, form,frame, frameset,h1, h2, h3, h4,h5, h6, noframes,ol, p, ul, center,dir, hr, menu, pre { display: block }/*以上列表元素默認狀態下一塊狀顯示,未顯示的將以內聯元素顯示,該列表針對HTML4版本,部分元素在XHTML1中將廢棄*/
li { display: list-item }/*默認以列表顯示*/
head { display: none }/*默認不顯示*/
table { display: table }/*默認為表格顯示*/
tr { display: table-row }/*默認為表格行顯示*/
thead { display: table-header-group }/*默認為表格頭部分組顯示*/
tbody { display: table-row-group }/*默認為表格行分組顯示*/
tfoot { display: table-footer-group }/*默認為表格底部分組顯示*/
col { display: table-column }/*默認為表格列顯示*/
colgroup { display: table-column-group }/*默認為表格列分組顯示*/
td, th { display: table-cell; }/*默認為單元格顯示*/
caption { display: table-caption }/*默認為表格標題顯示*/
th { font-weight: bolder; text-align: center }/*默認為表格標題顯示,呈現加粗居中狀態*/
caption { text-align: center }/*默認為表格標題顯示,呈現居中狀態*/
body { margin: 8px; line-height: 1.12 }
h1 { font-size: 2em; margin: .67em 0 }
h2 { font-size: 1.5em; margin: .75em 0 }
h3 { font-size: 1.17em; margin: .83em 0 }
h4, p, blockquote, ul, fieldset, form, ol, dl, dir, menu { margin: 1.12em 0 }
h5 { font-size: .83em; margin: 1.5em 0 }
h6 { font-size: .75em; margin: 1.67em 0 }
h1, h2, h3, h4, h5, h6, b,strong { font-weight: bolder }
blockquote { margin-left: 40px; margin-right: 40px }
i, cite, em,var, address { font-style: italic }
pre, tt, code, kbd, samp { font-family: monospace }
pre { white-space: pre }
button, textarea, input, object, select { display:inline-block; }
big { font-size: 1.17em }
small, sub, sup { font-size: .83em }
sub { vertical-align: sub }/*定義sub元素默認為下標顯示*/
sup { vertical-align: super }/*定義sub元素默認為上標顯示*/
table { border-spacing: 2px; }
thead, tbody, tfoot { vertical-align: middle }/*定義表頭、主體表、表腳元素默認為垂直對齊*/
td, th { vertical-align: inherit }/*定義單元格、列標題默認為垂直對齊默認為繼承*/
s, strike, del { text-decoration: line-through }/*定義這些元素默認為刪除線顯示*/
hr { border: 1px inset }/*定義分割線默認為1px寬的3D凹邊效果*/
ol, ul, dir, menu, dd { margin-left: 40px }
ol { list-style-type: decimal }
ol ul, ul ol, ul ul, ol ol { margin-top: 0; margin-bottom: 0 }
u, ins { text-decoration: underline }
br:before { content: "A" }/*定義換行元素的偽對象內容樣式*/
:before, :after { white-space: pre-line }/*定義偽對象空格字符的默認樣式*/
center { text-align: center }
abbr, acronym { font-variant: small-caps; letter-spacing: 0.1em }
:link, :visited { text-decoration: underline }
:focus { outline: thin dotted invert }
 /* Begin bidirectionality settings (do not change) */
BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override }/*定義BDO元素當其屬性為DIR="ltr"時的默認文本讀寫顯示順序*/
BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override }/*定義BDO元素當其屬性為DIR="rtl"時的默認文本讀寫顯示順序*/
*[DIR="ltr"] { direction: ltr; unicode-bidi: embed }/*定義任何元素當其屬性為DIR="ltr"時的默認文本讀寫顯示順序*/
*[DIR="rtl"] { direction: rtl; unicode-bidi: embed }/*定義任何元素當其屬性為DIR="rtl"時的默認文本讀寫顯示順序*/
@media print { /*定義標題和列表默認的打印樣式*/
    h1 { page-break-before: always }
    h1, h2, h3, h4, h5, h6 { page-break-after: avoid }
    ul, ol, dl { page-break-before: avoid }
}

(1)、display: block

html, address,blockquote,body, dd, div,dl, dt, fieldset, form,frame, frameset,h1, h2, h3, h4,h5, h6, noframes,ol, p, ul, center,dir, hr, menu, pre { display: block }/*以上列表元素默認狀態下一塊狀顯示,未顯示的將以內聯元素顯示,該列表針對HTML4版本,部分元素在XHTML1中將廢棄*/ 

為何默認情況下p、h1、ul、div都是block顯示,就是這里定義的。所以,不要再說div天生就是block——這句話應該換成:瀏覽器默認樣式規定了div是block!是塊元素還是內聯元素是由默認樣式規定的,不是瀏覽器的內核規定的。

沒有設置block的元素,默認為inline元素。

(2)、display: list-item

li { display: list-item }/*默認以列表顯示*/

我們在使用display時,常用的值一般是:inline/block/inline-block,用不到list-item。那這里的list-item到底有什么作用?我們不妨親自試一試:

clipboard[6]

看到沒有,出現了ul-li中的效果了吧,如果再加一個margin-left是不是就跟ul-li一樣了?

所以,ul-li為什么會默認顯示成那種樣子?——list-item才是“罪魁禍首”。

(3)、diplay:table

table { display: table }/*默認為表格顯示*/

舉一個例子:

clipboard[8]

上圖中,第一個div默認是block,寬度撐滿整個頁面。第二個div設置了display:table,寬度根據內容而定。這就是“包裹性”。

(4)、display: table-cell

td, th { display: table-cell; }/*默認為單元格顯示*/
舉個例子:

clipboard[10]

記得剛學html時候,不會用div + css做多列布局,我就用table做多列布局。而今,你可以用table-cell,像用table一樣做多列布局,做出來的效果和table做出來的效果是一模一樣的。

(5)、display:inline-block

button, textarea, input, object, select { display:inline-block; } 

能被父容器居中、能設置高度寬度和margin、不會像table或div那樣占一正行……——這就是inline-block。(具體可看看設置了該樣式元素的表現。)

1、內聯樣式

<a style=’ ’>中編寫的樣式代碼。

2、內部樣式

<style>中編寫的樣式代碼。

3、引用樣式

<link>引用的css文件。

4、瀏覽器用戶自定義樣式

在一些新聞網站中,經常看到可以設置字體大小的快捷菜單,例如下圖就是搜狐新聞中的設置。

clipboard[12]

這些是給一些有視覺障礙的人看的,反正我是沒用過,我也有視覺障礙,不過我是通過近視鏡來解決的。

其實瀏覽器也有這樣的設置,例如chrome瀏覽器中,我們就可以設置字號和字體。

012337344102

用戶在這里設置了字體和字號之后,它們會覆蓋掉瀏覽器默認的樣式。


本篇內容節選自《CSS知多少


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM