国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

重拾css(5)——瀏覽器默認樣式

guqiu / 910人閱讀

摘要:而依然有效的原因是瀏覽器默認樣式的優(yōu)先級低于外聯(lián)內(nèi)部樣式。例如第二,瀏覽器默認樣式還為設置了,這個值是對英文比較友好,中文狀態(tài)下就顯得有點擁擠。

上一節(jié)介紹了樣式的五種來源,咱們再通過一張圖回顧一下。

對于上面的三層,咱們大概都比較熟悉了。下面的兩層中,用戶自定義樣式一般也就是改一改字號大小和字體樣式,也沒甚好說的。而最有的說的就是瀏覽器的默認樣式。

不同瀏覽器的默認樣式多少有些區(qū)別,特別是老版本的瀏覽器之間,現(xiàn)在高級瀏覽器越來越向統(tǒng)一的標準靠攏,對前端程序猿來說是一件好事情。雖然有些許差異,但是絕大部分還是相同的,我先把代碼粘貼出來 ,具體的解讀咱們慢慢道來(只說重點,比較容易的或者不常用的就不說了)。

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} 
/* 以上按照block顯示,沒有規(guī)定的則按照默認的inline顯示 */

li { display: list-item} 
/* 程序猿常用的display值是:inline/block/inline-block,很少用到 list-item
list-item到底是什么樣的顯示效果,可以通過例子驗證。。。。
第一,你可以不用ul-li,而用其他標簽實現(xiàn)list-item的效果
第二,要意識到,瀏覽器對待html只是把它當作一個dom樹,至于顯示成什么效果,是通過瀏覽器默認的css實現(xiàn)的,即樣式全部通過css設計,和html無關(guān) */

head { display: none} 
table { display: table } 
/* display:table 和 block 最大的區(qū)別在于:包裹性。 提到包裹性,就不得不提一下float和absolute*/

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; } 
/* 與table相關(guān)的其他display值,研究的意義不大,但是table-cell值得一說。
table-cell是多列布局的最新解決方案,比使用float更加有效(不兼容IE6、7)
實際上table-cell是要依賴其他table相關(guān)的display,但是瀏覽器會為我們做這些工作,不必手動填寫 */

caption{ display: table-caption} 
th { font-weight: bolder; text-align: center} 
/* 標題默認設置了粗體和文字居中 */

caption{ text-align: center} 
body { margin: 8px; line-height: 1.12} 
/* 不同瀏覽器的margin不一樣,所以要設置【 *{margin:0} 】 
line-height:1.12 針對英文沒問題,但是中文看起來很別扭
另外,1.12是一個相對值(即1.12em),與文字有關(guān)的距離設置最好用相對值*/

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} 
/* em是相對單位,1em就是一單位,瀏覽器默認的一單位是16px,
可以通過 body{font-size:20px} 來修改一單位的值
p的字體大小是1em,h1是2em,h2是1.5em,等等
另外,與文字相關(guān)的距離值,最好用相對單位,例如 line-height:1.4; margin:.5em等等,這樣做的好處就是當自定義了1em的絕對px時,line-height也會跟著變 */

/* 注意,如果我們自己寫css【 * {margin:0} 】,可以把p、h1、h2等標簽的margin覆蓋掉
我們都知道,*選擇器的權(quán)重是最低的,但是它卻能覆蓋掉標簽選擇器,說明瀏覽器已經(jīng)在這里面做了手腳
瀏覽器沒有讓默認樣式和用戶自定義樣式“公平競爭”,而是優(yōu)先用戶自定義樣式 */

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; } 
/* 不知道inline-block是什么樣子的?或者不知道inline-block有什么特性?
在這里看看哪些標簽是inline-block,就知道inline-block的用處了
具體inline-block的用途,我們會在后面詳細介紹,此處只是點出來 */

big { font-size: 1.17em} 
small, sub, sup { font-size: .83em} 
sub{ vertical-align:sub} 
sup { vertical-align: super} 
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} 
/* 為什么
默認是那么個難看的樣子,特別是IE下,這就是罪魁禍首 */ ol, ul, dir, menu, dd { margin-left: 40px} ol {list-style-type: decimal} /* ul 和 ol 在默認情況下都會有一篇左邊的間距,在這里可以看到為何會有間距,以及間距的具體大小是多少。 */ 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 } /*
為何能實現(xiàn)換行?瀏覽器得到html的br標簽,只會解析成一個dom節(jié)點而已, 而“換行”這一功能是通過這里實現(xiàn)的????? */ center{text-align: center} abbr, acronym { font-variant: small-caps; letter-spacing: 0.1em} :link, :visited { text-decoration: underline} :focus {outline: thindottedinvert} /* Begin bidirectionality settings (do not change) */ BDO[DIR="ltr"] { direction: ltr; unicode-bidi: bidi-override} BDO[DIR="rtl"] { direction: rtl; unicode-bidi: bidi-override} *[DIR="ltr"] { direction: ltr; unicode-bidi: embed} *[DIR="rtl"] { direction:rtl; unicode-bidi: embed} /* 這些標簽或?qū)傩远疾怀S?*/ @media print{ h1{ page-break-before:always} h1, h2, h3, h4, h5, h6{ page-break-after: avoid} ul, ol, dl { page-break-before: avoid} /* 對于打印頁面時的設置,不常用 */ /* 以下都是按照標簽選擇器來的,標簽選擇器比類、id選擇器的權(quán)重都低。 所以,用戶自定義的樣式,無論是用標簽、類還是id,都能覆蓋默認的標簽選擇器 */ 瀏覽器默認樣式
1.理念上的轉(zhuǎn)變

在解讀代碼之前,我先把我看瀏覽器默認樣式最大的體會給大家說一下,這個是非常重要的。就是要先從理念上重新認識html和css。

以前我都是認為瀏覽器自身本來就認識各種html標簽,并且會根據(jù)規(guī)則設置標簽的樣子,例如p是block顯示,ul有margin-left,h1粗體顯示……以前以為這些標簽默認的顯示方式和css無關(guān),是瀏覽器自己干的,css設置網(wǎng)頁樣式是加載之后又渲染的。

現(xiàn)在知道這種想法是錯誤的。其實瀏覽器加載了html之后只為一件東西——生成dom樹,瀏覽器把html變?yōu)閐om樹結(jié)構(gòu),就完成了對html的結(jié)構(gòu)化。至于后來對視圖的渲染,p是block、br換行,那是整合了css之后的事情。而瀏覽器整合css又是另一個路線,和解析html是分開的。這里的“css”就包含了瀏覽器默認樣式。

可以結(jié)合下圖理解:

一句話,瀏覽器將載入的html變?yōu)閐om樹,但是此時沒有任何顯示樣式。所以顯示的樣式,都是css定義的,瀏覽器只會通過css來渲染視圖樣式。

2.block元素

為何默認情況下p、h1、ul、div都是block顯示,就是這里定義的。所以,不要再說div天生就是block——這句話應該換成:瀏覽器默認樣式天生規(guī)定了div是block——所以才導致了div是block!是默認樣式規(guī)定的,不是瀏覽器的內(nèi)核規(guī)定的。

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

3.display:list-item

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

看到?jīng)]有,出現(xiàn)了ul-li中的效果了吧,如果再加一個margin-left是不是就跟ul-li一樣了?

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

4.display:table

先給出一個快速思考題:

在容器尺寸上最大區(qū)別是什么(只是容器尺寸,不考慮內(nèi)容區(qū)別)?請在兩秒鐘內(nèi)說出答案。

答案是——div寬度和父容器相同,table寬度根據(jù)內(nèi)容而定——即table具有“包裹性

舉個例子:

上圖中,第一個div默認是block,寬度撐滿整個頁面。第二個div設置了display:table,寬度根據(jù)內(nèi)容而定。這就是“包裹性”。而提到“包裹性”,又不得不讓我想到float和absolute。具體怎樣這里無法細說,后面的文章會詳細講到,有興趣的可以先查著。

各位思考一下,你們做的項目中,哪些地方想要這種“包裹性”,而不是寫死寬度或者用js計算寬度?如果想不到,我給大家截個圖提醒一下。如下圖:

5.display:table-cell

上面的截圖中,我們看到了眼花繚亂的好多display,而且都是和table相關(guān)的。從字面意思上我們能看出,這是瀏覽器為了渲染一個完整的表格,而需要的許多顯示方式(PS:看似一個簡單的表格,渲染規(guī)則就這么多,這就提醒我們思考問題的嚴謹性和邏輯性)。

這里的大部分都是我們一直都不會用到的,用不到的了解即可,沒必要深究。但是這個table-cell我們卻能用得到,而且是用它來干一件很重要的事情——多列布局

多列布局在css中有多重要就不用我說了吧,傳統(tǒng)模式下大家都使用float來解決這一問題,但是float寫出來的東西代碼復雜,寬度調(diào)整不靈活,瀏覽器兼容性有問題。所以才有了新方案——table-cell,注意,IE6、7不行!

簡單舉個例子:

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

6.body樣式
body { margin: 8px; line-height: 1.12 }

在body中,定義了兩個樣式,如上圖。

第一,在默認情況下,頁面中的文字不會直接頂?shù)綖g覽器的邊框,這就是因為默認樣式為body設置了margin的緣故。這里需要注意個問題,不同瀏覽器為body設置的margin值可能不一樣,因此大家都知道在css中用 *{margin:0} 來解決這一兼容性問題。

之前已經(jīng)提到過,選擇器的級別要低于body標簽選擇器,因此當二者來源相同(例如,都來自內(nèi)部樣式)時,是不會起作用的,即使它是“后加載”的。而{margin:0}依然有效的原因是瀏覽器默認樣式的優(yōu)先級低于外聯(lián)、內(nèi)部樣式。例如:

第二,瀏覽器默認樣式還為body設置了line-height,line-height這個值1.12是對英文比較友好,中文狀態(tài)下就顯得有點擁擠。Line-height是具有繼承性的,在body中設置了,body下面所有的文字都會繼承生效。

另外注意,這里的line-height: 1.12是一個相對值,即是文字高度的1.12倍。看到這里,我們在寫line-height的時候,也一定要注意使用相對值,不要使用絕對值。如下:

上圖是編寫line-height的三種形式,大家覺得哪種形式最好?區(qū)別是什么?

情況1:永遠按照文字的1.4倍計算,不管文字的高度如何,可適應任何變化;
情況2:永遠按照1.4em計算,隨著em的值改變,不管文字高度如何(此時文字高度可能已經(jīng)通過絕對的px值改變了大小,而不是隨em改變的);
情況3:就是25px,絕對的。

相信看到這里大家會發(fā)現(xiàn),通過一個line-height我們能窺探到的道道有很多。如果大家看懂了這三種情況,從軟件設計和系統(tǒng)擴展的角度說,當然我們都會選擇第一種。

7.em和px

大家在設置文字高度或者與文字有關(guān)的距離,如p的margin、line-height(上文剛講完,不再贅述),會用em還是用px?——反正我之前不熟悉css時候,都是用px。因為px是固定大小,一目了然。——當然,它也不利于擴展。

因此,我們推薦大家用em。而且瀏覽器的默認樣式也建議我們這樣書寫:

如上圖,它設置了h1字體大小2em、縱向margin是0.67em,h2字體大小1.5em、縱向大小0.75em……p的縱向margin是1.12em,字體大小1em(上圖中沒有,但在整個文件中有)

em是什么?——em是一個瀏覽器識別的長度單位,但是它不是絕對的、固定的,而是相對的,相對的計算必然會一個參考物,那么這里相對所指的是相對于父元素的font-size,因此,用em作為長度單位,是實現(xiàn)彈性設計的關(guān)鍵。
大家都知道px是一個絕對的長度單位制,它永遠不會改變。瀏覽器默認情況下令1em === 16px。現(xiàn)在你知道為何p默認是16px了吧。而且你還知道了h1是p高度的兩倍,h2是p高度的1.5倍……(你知道的越來越多了。。。)

當然,我們可以通過css修改1em的值。

由于font-size和margin都是通過em來定義的,當em被修改時,只要字體大小修改,margin值也會跟著修改。這就是em好用之處,也是彈性設計的體現(xiàn)!

從現(xiàn)在開始,與字體大小有關(guān)的css,全部都用em!

8.粗體和斜體

上圖中,標注了在整個html中,哪些元素設置了粗體/斜體。重點還是一個思維轉(zhuǎn)換的問題:h1不是天生的粗體,而是設置了font-weight:bolder的樣式而已……

這里需要提一句題外話:< b >和< strong >有啥區(qū)別?< i >和< em >有啥區(qū)別?
< b >是W3C預設的加粗式樣,如果不想寫font-weight:bold;實現(xiàn)單純的加粗效果,用< b >是個不錯的選擇,但如果想做語義上的強調(diào)< strong >更合適。推薦使用語義化的標簽。

9.inline-block

我相信最初學習使用inline-block的朋友都有一個困惑:inline-block到底是個啥?這時候如果你非常勤奮好學的話,你就去網(wǎng)上查資料,然后做各種實驗。——精神可嘉,行為不可取。

學習還是有捷徑的。看看瀏覽器默認樣式告訴你的捷徑:button、input就是inline-block!這樣以點播你就會一下子明白,最起碼能給你一個很好的形象的概念。看看button和input的表現(xiàn),你就知道inline-block是什么樣子了:

能在父容器里居中、能設置高度寬度和margin、不會像table或div那樣占一整行……——這就是inline-block——記得這是瀏覽器默認樣式告訴你的。

原文地址:http://www.cnblogs.com/wangfu...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/112116.html

相關(guān)文章

  • 重拾css(1)——寫在前邊的話

    摘要:本系列文章重拾主要參考王福朋知多少,結(jié)合自己的理解和學習需要,修改或添加了一些內(nèi)容,難免有失偏頗,僅供自我學習參考之用。 工作中或多或少的寫一些css,但總感覺掌握的不夠扎實,時而需要查閱一下知識點。我想,一方面跟缺少科班出身式的系統(tǒng)學習有關(guān),另一方面也苦于一直未尋覓到一套合我胃口教程。直到我讀到了王福朋css知多少系列文章,使我有了重新系統(tǒng)學習css的想法。 本系列文章(重拾css)...

    li21 評論0 收藏0
  • 重拾css(4)——樣式來源與層疊規(guī)則

    摘要:摘自設計指南樣式來源上文中提到,之所以有層疊的概念,是因為有多個樣式來源。優(yōu)先級相同條件下例如都來自引用樣式,覆蓋的默認規(guī)則是后者覆蓋前者,但是有一個特殊情況,其實優(yōu)先級最高。 這一節(jié)就開始實踐上一節(jié)的思路! 1.層疊的概念 簡言之,層疊就是瀏覽器對多個樣式來源進行疊加,最終確定結(jié)果的過程。舉一個簡單的例子: showImg(https://segmentfault.com/img/b...

    gityuan 評論0 收藏0
  • 重拾css(3)——學習css的思路

    摘要:如果我們以為重點看,從上圖中我們可以總結(jié)出學習的三個突破點。這次我們向瀏覽器這位機器人學習一下,看看它寫出來的能給我們什么幫助。對選擇器來說,有一個很重要的話題級別。布局布局是的重頭戲,每個系統(tǒng)的布局都有其各自的特點。 眾所周知,css的運行環(huán)境是瀏覽器,那么我們有必要先來認識下瀏覽器。 1.瀏覽器是怎樣工作的 有篇文章叫《瀏覽器的工作原理:新式網(wǎng)絡瀏覽器幕后揭秘》,文中言簡意賅的介紹...

    Kaede 評論0 收藏0
  • 重拾css(2)——帶著問題出發(fā)

    摘要:來不及解釋,快上車有些瀏覽器不完全支持,現(xiàn)在可以用哪個工具去檢測瀏覽器是否支持,以及支持哪些項常用的標簽,它們的屬性一般默認為和。的設計初衷是什么具有包裹性例如和兩者的寬度是不一樣的,不信可以為加上背景色試試。 來不及解釋,快上車... ... 有些瀏覽器不完全支持css3,現(xiàn)在可以用哪個工具去檢測瀏覽器是否支持,以及支持哪些項? 常用的html標簽,它們的display屬性一般默認...

    Big_fat_cat 評論0 收藏0
  • 重拾css(10)——display

    摘要:瀏覽器默認樣式中規(guī)定了元素哪些屬于塊剩下的就是流。上圖可知,針對的標簽,你設置寬度和高度是無效的,通過監(jiān)控可以知道,該元素實際的寬度和高度都是,并不是我們設定的值。因此,的特點可以總結(jié)為外部看來是流,但是自身卻是一個塊。 1.引言 html元素,除了塊就是流(即平時常說的塊級元素和行內(nèi)元素),而且流都包含在塊中,例如body就是一個塊,而a就是一個流。瀏覽器默認樣式中規(guī)定了html元素...

    dendoink 評論0 收藏0

發(fā)表評論

0條評論

guqiu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看

<