亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

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

guqiu / 984人閱讀

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

上一節(jié)介紹了樣式的五種來(lái)源,咱們?cè)偻ㄟ^(guò)一張圖回顧一下。

對(duì)于上面的三層,咱們大概都比較熟悉了。下面的兩層中,用戶(hù)自定義樣式一般也就是改一改字號(hào)大小和字體樣式,也沒(méi)甚好說(shuō)的。而最有的說(shuō)的就是瀏覽器的默認(rèn)樣式。

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

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顯示,沒(méi)有規(guī)定的則按照默認(rèn)的inline顯示 */

li { display: list-item} 
/* 程序猿常用的display值是:inline/block/inline-block,很少用到 list-item
list-item到底是什么樣的顯示效果,可以通過(guò)例子驗(yàn)證。。。。
第一,你可以不用ul-li,而用其他標(biāo)簽實(shí)現(xiàn)list-item的效果
第二,要意識(shí)到,瀏覽器對(duì)待html只是把它當(dāng)作一個(gè)dom樹(shù),至于顯示成什么效果,是通過(guò)瀏覽器默認(rèn)的css實(shí)現(xiàn)的,即樣式全部通過(guò)css設(shè)計(jì),和html無(wú)關(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值得一說(shuō)。
table-cell是多列布局的最新解決方案,比使用float更加有效(不兼容IE6、7)
實(shí)際上table-cell是要依賴(lài)其他table相關(guān)的display,但是瀏覽器會(huì)為我們做這些工作,不必手動(dòng)填寫(xiě) */

caption{ display: table-caption} 
th { font-weight: bolder; text-align: center} 
/* 標(biāo)題默認(rèn)設(shè)置了粗體和文字居中 */

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

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

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

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} 
/* 這里可以看到哪些標(biāo)簽文字是加粗的 */

blockquote { margin-left: 40px; margin-right: 40px} 
i, cite, em, 
var, address { font-style: italic} 
/* 這里可以看到哪些標(biāo)簽是斜體 */

pre, tt, code, 
kbd, samp { font-family: monospace} 
pre{ white-space: pre} 
button, textarea, 
input, object, 
select { display:inline-block; } 
/* 不知道inline-block是什么樣子的?或者不知道inline-block有什么特性?
在這里看看哪些標(biāo)簽是inline-block,就知道inline-block的用處了
具體inline-block的用途,我們會(huì)在后面詳細(xì)介紹,此處只是點(diǎn)出來(lái) */

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} 
/* 為什么
默認(rèn)是那么個(gè)難看的樣子,特別是IE下,這就是罪魁禍?zhǔn)?*/ ol, ul, dir, menu, dd { margin-left: 40px} ol {list-style-type: decimal} /* ul 和 ol 在默認(rèn)情況下都會(huì)有一篇左邊的間距,在這里可以看到為何會(huì)有間距,以及間距的具體大小是多少。 */ 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 } /*
為何能實(shí)現(xiàn)換行?瀏覽器得到html的br標(biāo)簽,只會(huì)解析成一個(gè)dom節(jié)點(diǎn)而已, 而“換行”這一功能是通過(guò)這里實(shí)現(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} /* 這些標(biāo)簽或?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} /* 對(duì)于打印頁(yè)面時(shí)的設(shè)置,不常用 */ /* 以下都是按照標(biāo)簽選擇器來(lái)的,標(biāo)簽選擇器比類(lèi)、id選擇器的權(quán)重都低。 所以,用戶(hù)自定義的樣式,無(wú)論是用標(biāo)簽、類(lèi)還是id,都能覆蓋默認(rèn)的標(biāo)簽選擇器 */ 瀏覽器默認(rèn)樣式
1.理念上的轉(zhuǎn)變

在解讀代碼之前,我先把我看瀏覽器默認(rèn)樣式最大的體會(huì)給大家說(shuō)一下,這個(gè)是非常重要的。就是要先從理念上重新認(rèn)識(shí)html和css。

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

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

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

一句話(huà),瀏覽器將載入的html變?yōu)閐om樹(shù),但是此時(shí)沒(méi)有任何顯示樣式。所以顯示的樣式,都是css定義的,瀏覽器只會(huì)通過(guò)css來(lái)渲染視圖樣式。

2.block元素

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

沒(méi)有設(shè)置block的元素,默認(rèn)為inline顯示。

3.display:list-item

我們?cè)谑褂胐isplay時(shí),常用的值一般是:inline/block/inline-block,用不到list-item。那這里的list-item到底有什么作用?我們不妨親自試一試:

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

所以,ul-li為什么會(huì)默認(rèn)顯示成那種樣子?——list-item才是“罪魁禍?zhǔn)住薄?/p> 4.display:table

先給出一個(gè)快速思考題:

在容器尺寸上最大區(qū)別是什么(只是容器尺寸,不考慮內(nèi)容區(qū)別)?請(qǐng)?jiān)趦擅腌妰?nèi)說(shuō)出答案。

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

舉個(gè)例子:

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

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

5.display:table-cell

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

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

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

簡(jiǎn)單舉個(gè)例子:

記得我剛學(xué)html時(shí)候,不會(huì)用div + css做多列布局,我就用table做多列布局。而今,你可以用table-cell,像用table一樣做多列布局,做出來(lái)的效果和table做出來(lái)的效果是一模一樣的。

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

在body中,定義了兩個(gè)樣式,如上圖。

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

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

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

另外注意,這里的line-height: 1.12是一個(gè)相對(duì)值,即是文字高度的1.12倍??吹竭@里,我們?cè)趯?xiě)line-height的時(shí)候,也一定要注意使用相對(duì)值,不要使用絕對(duì)值。如下:

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

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

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

7.em和px

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

因此,我們推薦大家用em。而且瀏覽器的默認(rèn)樣式也建議我們這樣書(shū)寫(xiě):

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

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

當(dāng)然,我們可以通過(guò)css修改1em的值。

由于font-size和margin都是通過(guò)em來(lái)定義的,當(dāng)em被修改時(shí),只要字體大小修改,margin值也會(huì)跟著修改。這就是em好用之處,也是彈性設(shè)計(jì)的體現(xiàn)!

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

8.粗體和斜體

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

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

9.inline-block

我相信最初學(xué)習(xí)使用inline-block的朋友都有一個(gè)困惑:inline-block到底是個(gè)啥?這時(shí)候如果你非常勤奮好學(xué)的話(huà),你就去網(wǎng)上查資料,然后做各種實(shí)驗(yàn)?!窨杉?,行為不可取。

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/112116.html

相關(guān)文章

  • 重拾css(1)——寫(xiě)在前邊的話(huà)

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

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

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

    gityuan 評(píng)論0 收藏0
  • 重拾css(3)——學(xué)習(xí)css的思路

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

    Kaede 評(píng)論0 收藏0
  • 重拾css(2)——帶著問(wèn)題出發(fā)

    摘要:來(lái)不及解釋?zhuān)焐宪?chē)有些瀏覽器不完全支持,現(xiàn)在可以用哪個(gè)工具去檢測(cè)瀏覽器是否支持,以及支持哪些項(xiàng)常用的標(biāo)簽,它們的屬性一般默認(rèn)為和。的設(shè)計(jì)初衷是什么具有包裹性例如和兩者的寬度是不一樣的,不信可以為加上背景色試試。 來(lái)不及解釋?zhuān)焐宪?chē)... ... 有些瀏覽器不完全支持css3,現(xiàn)在可以用哪個(gè)工具去檢測(cè)瀏覽器是否支持,以及支持哪些項(xiàng)? 常用的html標(biāo)簽,它們的display屬性一般默認(rèn)...

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

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

    dendoink 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

guqiu

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看

        <