-
HTML5 CSS3簡要教程| OPEN
Web? 設(shè)計(jì)師可以使用HTML4和CSS2.1完成一些很酷的東西。我們可以在不使用陳舊的基于table布局的基礎(chǔ)上完成文檔邏輯結(jié)構(gòu)并創(chuàng)建內(nèi)容豐富的網(wǎng)站。 我們可以在不使用內(nèi)聯(lián)<font>和<br>標(biāo)簽的基礎(chǔ)上對網(wǎng)站添加漂亮而細(xì)膩的風(fēng)格樣式。事實(shí)上,我們目前的設(shè)計(jì)能力已經(jīng)讓我 們遠(yuǎn)離了那個(gè)可怕的瀏覽器戰(zhàn)爭時(shí)代、專有協(xié)議和那些充滿閃動、滾動和閃爍的丑陋網(wǎng)頁。 雖然我們現(xiàn)在已經(jīng)普遍使用了HTML4和CSS2.1,但是我們還可以做得更好!我們可以重組我們代碼的結(jié)構(gòu)并能讓我們的頁面代碼更富有語義化特性。我們 可以縮減帶給頁面美麗外觀樣式代碼量并讓他們有更高的可擴(kuò)展性。現(xiàn)在,HTML5和CSS3正躍躍欲試的等待大家,下面讓我們來看看他們是否真的能讓我們 的設(shè)計(jì)提升到下一個(gè)高度吧…
-
您還可以參考以下CSS3相關(guān)教程及資源: 《提升你設(shè)計(jì)水平的CSS3新技術(shù)》 《學(xué)無止境的CSS(xHTML+CSS技巧教程資源大全)》
-
《目前最全的瀏覽器/CSS選擇器兼容性總結(jié)》 《你應(yīng)當(dāng)了解的5個(gè)CSS3新技術(shù)》 跟<div>說再見,歡迎語義化標(biāo)簽
曾經(jīng),設(shè)計(jì)師們經(jīng)常會跟頻繁使用基于table的沒有任何語義的布局。不過最終還是要感謝像Jeffrey Zeldman和Eric? Meyer這樣的思想革新者,聰明的設(shè)計(jì)師們慢慢的接受了相對更語義化的<div>布局替代了table布局,并且開始調(diào)用外部樣式表。但不 幸的是,復(fù)雜的網(wǎng)頁設(shè)計(jì)需要大量不同的標(biāo)簽結(jié)構(gòu)代碼,我們把它叫做“<div>-soup” 綜合癥。也許你很熟悉下面的代碼:
-
<divid=”news”>
-
??????? <divclass=”section”>
-
?????????????????? <divclass=”article”>
-
???????????????????????????? <divclass=”header”> <h1>Div Soup Demonstration</h1>
-
???????????????????????????????????????????????????????????????? < p>Posted on July 11th, 2009</p>
-
?????????????????????????????? < /div>
-
?< divclass=”content”>
-
<p>Lorem ipsum text blah blah blah.</p>
-
?< p>Lorem ipsum text blah blah blah.</p>
-
?< p>Lorem ipsum text blah blah blah.</p>
-
< /div>
-
?< divclass=”footer”>
-
<p>Tags: HMTL, code, demo</p>
-
?< /div>
-
?< /div>
-
?< div class=”aside”>
-
<div class=”header”>
-
?<h1>Tangential Information</h1>
-
< /div>
-
< div class=”content”>
-
<p>Lorem ipsum text blah blah blah.</p>
-
?< p>Lorem ipsum text blah blah blah.</p>
-
< p>Lorem ipsum text blah blah blah.</p>
-
?< /div>
-
< divclass=”footer”> <p>Tags: HMTL, code, demo</p> < /div>
-
< /div>
-
?< /div> < /div>
盡管這有些勉強(qiáng),但上面這個(gè)實(shí)例還是可以說明使用HTML4對一個(gè)復(fù)雜的設(shè)計(jì)進(jìn)行代碼化后依然過于臃腫(其實(shí)xHTML1.1也不過如此)。不過值 得激動的是,HTML5解決“<div>-soup”? 綜合癥并帶給我們一套新的結(jié)構(gòu)化元素。這些新的HTML5元素富有更細(xì)致的語義從而代替了那些毫無語義的<div>標(biāo)簽,并同時(shí)為CSS的調(diào) 用提供了”自然”的CSS鉤子。下面是HTML5的解決方案實(shí)例: <section> < section> < article> < header> < h1>Div Soup Demonstration</h1> < p>Posted on July 11th, 2009</p> < /header> < section> < p>Lorem ipsum text blah blah blah.</p> < p>Lorem ipsum text blah blah blah.</p> < p>Lorem ipsum text blah blah blah.</p> < /section> < footer> < p>Tags: HMTL, code, demo</p>
</footer> < /article> < aside> < header> < h1>Tangential Information</h1> < /header> < section> < p>Lorem ipsum text blah blah blah.</p> < p>Lorem ipsum text blah blah blah.</p> < p>Lorem ipsum text blah blah blah.</p> < /section> < footer> < p>Tags: HMTL, code, demo</p> < /footer> < /aside> < /section> < /section>
正如我們所見,HTML5可以讓我們用很多更語義化的結(jié)構(gòu)化代碼標(biāo)簽代替那些大量的無意義的<div>標(biāo)簽。這種語義化的特性不僅提升 了我們網(wǎng)頁的質(zhì)量和語義,并且大量減少了曾經(jīng)代碼中用于CSS必須調(diào)用的class和id屬性。事實(shí)上,CSS3也是可以然通過我們忽略掉所有? class和id的。 跟class屬性說再
正如我們所見,HTML5可以讓我們用很多更語義化的結(jié)構(gòu)化代碼標(biāo)簽代替那些大量的無意義的 標(biāo)簽。這種語義化的特性不僅提升了我們網(wǎng)頁的質(zhì)量和語義,并且大量減少了曾經(jīng)代碼中用于CSS必須調(diào)用的class和id屬性。事實(shí)上,CSS3也是可以然通過我們忽略掉所有 class和id的。 跟class屬性說再 見,歡迎整潔的標(biāo)簽
結(jié)合了富有新的語義化標(biāo)記的HTML5,CSS3為web設(shè)計(jì)師們的網(wǎng)頁提供了神一般的力量。有了HTML5的能量,我們將得到更多的對文檔代碼的控制權(quán),有了CSS3的能量,我們的控制權(quán)將趨于無窮大!
即使沒有那些高級的CSS選擇器,我們?nèi)匀豢梢酝ㄟ^強(qiáng)大的HTML5條調(diào)用不同的容器而不勞駕class和id這類屬性。像以往的DIV布局,我們在css中可能要這樣調(diào)用: 1 2 3 4 5 6 7
div#news {} div.section{} div.article{} div.header {} div.content{} div.footer {} div.aside {}
我們再來看看基于HTML5的實(shí)例: 1 2 3 4 5
section {} article {} header {} footer {} aside {}
這是個(gè)進(jìn)步,但仍有一些問題需要解決。在<div>實(shí)例中,我們需要通過class或id屬性來調(diào)用頁面中的元素。這種邏輯將允許我們 將樣式應(yīng)用到文檔中的任何一個(gè)元素上,無論是整體還是個(gè)體。例如在<div>實(shí)例中,.section 和? .content元素很容易定位。但是在HTML5實(shí)例中,實(shí)際文檔中會有很多個(gè)section元素。其實(shí)我們可以添加一些特定的屬性選擇器來調(diào)用那些不 同的section元素,不過謝天謝地,我沒現(xiàn)在可以用少量的高級CSS選擇器來定位不同的section元素。 不使用class和id定位HTML-5元素
下面讓我們來看看如何在不使用class和id的情況下定位HTML5頁面元素的一個(gè)實(shí)例,我們可以使用三種CSS選擇器來定位和辨別實(shí)例中的元素。如下:
* 后代選擇器:[CSS 2.1]: EF * 兄弟選擇器:[CSS 2.1]: E + F * 子元素選擇器:[CSS 2.1]: E> F
下面讓我們來看看如何不使用class和id而完成對文檔中的那些section元素的定位吧:
定位最外層的<section>元素
考慮到我們的例子并不是一套完整的HTML5代碼,所以我們假定在<body>元素下有個(gè)<nav>元素與<section>元素是兄弟元素。這樣的話,我們就可以向下面代碼那樣定位最外層的<section>了: 1
body nav+section {}
定位下一個(gè)<section>元素 作為最外層<section>元素下的唯一直屬子集元素,這個(gè)<section>元素也許可以這樣定位: 1
section>section {}
定位<article>元素 可以定位<article>元素的方法有很多,不過最簡單的方法當(dāng)然就是后代選擇器了: 1
section section article {}
定位<header>、<section>和<footer>元素 這三個(gè)元素分別在兩個(gè)地方都出現(xiàn)過,一是在<article>元素中出現(xiàn),另一是在<aside>元素中出現(xiàn)。這種差別能讓我們輕松定位每個(gè)元素。 1 2 3
article header {} article section {} article footer {}
或者一起定義: 1 2 3
section section header {} section section section {} section section footer {}
到目前為止,我們已經(jīng)使用CSS2.1選擇器排除掉了所有的class和id。那么我們?yōu)槭裁催€需要使用CSS3呢?我很高興你能這么問… 使用CSS3對HTML5元素進(jìn)行高級定位
雖然我們已經(jīng)使用CSS2.1選擇器排除掉了所有的class和id,顯然還會有很多更復(fù)雜的情況需要CSS3的高級選擇器來解決。讓我們通過完成一下的實(shí)例來了解一下如何在不使用無用的class和id屬性的情況下利用CSS3定位頁面元素。
使用一個(gè)唯一的日志(post)ID定位所有日志
wordpress? 提供給我們一種包含了ID的每篇日志的源代碼輸出。這種信息通常用于導(dǎo)航和/或了解資料的意圖,不過CSS3可以利用這些唯一的ID來定義這些日志的樣 式。當(dāng)然,你還可以像往常那樣為每篇日志添加class=”post”這樣的屬性,但這就與我們練習(xí)的意圖相沖突了(再加上它沒有一點(diǎn)樂趣所在)。使用” 子字符串匹配選擇器”,我們就可以像下面這樣定位所有日志和它們的不同元素了。 1 2 3
article[id*=post-]{} /* 定位所有日志 */ article[id*=post-] header h1 {}/* 定位所有日志中的h1標(biāo)簽 */ article[id*=post-] section p {}/* 定位所有日志中的p標(biāo)簽 */
我沒仍然可以使用同樣的方式定位評論的元素和它們的子元素。 1 2 3
article[id*=comment-]{} /* 定位所有評論 */ article[id*=comment-] header h1 {}/* 定位所有評論中的h1標(biāo) article[id*=comment-] section p {}/* 定位所有評論中的p標(biāo)簽 */
定位一些指定的區(qū)域(section)或文章(article) 有很多博客的日志量和評論量都相當(dāng)大,HTML 5? 會將它們由<section>或<article>元素組成。為了定位哪些指定的<section>? 或<article>元素,我們就要轉(zhuǎn)而使用強(qiáng)大的“:nth-child”選擇器了: 1 2 3 4 5
section:nth-child(1){}/* 選擇第一個(gè) <section> */ article:nth-child(1){}/* 選擇第一個(gè) <article> */
section:nth-child(2){}/* 選擇第二個(gè) <section> */ article:nth-child(2){}/* 選擇第二個(gè) <article> */
同樣,我們可以使用“:nth-last-child”選擇器定位反序的一些元素。 1 2 3 4 5
section:nth-last-child(1){}/* 選擇最后一個(gè) <section> */ article:nth-last-child(1){}/* 選擇最后一個(gè) <article> */
section:nth-last-child(2){}/* 選擇倒數(shù)第二個(gè) <section> */ article:nth-last-child(2){}/* 選擇倒數(shù)第二個(gè) <article> */
使用更多的方式選擇指定元素 另一種選擇HTML5中指定元素(如header、section和footer)的方法就是利用”:only-of-type”選擇器的優(yōu)勢。由于這些 HTML5元素通常會在很多地方出現(xiàn)不止一次,所以當(dāng)我們想定位那種在父元素下僅出現(xiàn)過一次的標(biāo)簽時(shí)這種方法很方便。例如,我們要選擇的是在某元素中有切 僅有的唯一一個(gè)元素,如以下代碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
< section> < section></section> < section> < section>定位這個(gè)section元素</section> < /section> < section> < section>定位這個(gè)section元素</section> < /section> < section> < section>但不定位這個(gè)section元素</section> < section>和這個(gè)section元素</section> < /section> < section></section> < /section>
我們可以僅使用以下一行選擇器: 1
section>section:only-of-type {}
再次嘮叨,你可以固執(zhí)的為每個(gè)元素添加ID屬性,但你會失去代碼的可擴(kuò)展性、維護(hù)性和絕對簡潔的結(jié)構(gòu)與表現(xiàn)相分離。CSS3的確能讓我們可快速更方便的定位幾乎所有沒有ID和class屬性的頁面元素。 大家如果想了解一下現(xiàn)在的CSS3選擇器的瀏覽器支持情況,可以參閱這篇文章(即時(shí)更新): 《目前最全的瀏覽器/CSS選擇器兼容性總結(jié)》 總結(jié)
我相信隨著時(shí)間的推進(jìn)和更多瀏覽器的支持,HTML5和CSS3將越來越受歡迎,它們將為web設(shè)計(jì)師們帶來更無窮的能量,讓我們的web前端更上一個(gè)臺階。