久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用開(kāi)源軟件設(shè)計(jì),、開(kāi)發(fā)和部署協(xié)作型 Web 站點(diǎn),,第 8 部分: 使用 CSS 對(duì)主題化內(nèi)...

 昵稱(chēng)67743 2008-06-20
 

文檔選項(xiàng)
將此頁(yè)作為電子郵件發(fā)送

將此頁(yè)作為電子郵件發(fā)送

討論


級(jí)別: 中級(jí)

Alister Lewis-Bowen ([email protected]), 高級(jí)軟件工程師, IBM
Stephen Evanchik ([email protected]), 軟件工程師, IBM
Louis Weitzman ([email protected]), 高級(jí)軟件工程師, IBM

2007 年 5 月 24 日

在這個(gè) 系列 中,在 IBM? Internet Technology Group 團(tuán)隊(duì)的帶領(lǐng)下使用一套可免費(fèi)獲得的軟件為虛構(gòu)的 International Business Council 公司設(shè)計(jì),、開(kāi)發(fā)和部署一個(gè)外部網(wǎng) Web 站點(diǎn),。在 第 7 部分 中,,學(xué)習(xí)了為這個(gè)新 Web 站點(diǎn)的內(nèi)容建立結(jié)構(gòu)的方法。本文繼續(xù)進(jìn)行主題化,,關(guān)注的重點(diǎn)從結(jié)構(gòu)轉(zhuǎn)移到使用層疊樣式表(CSS)對(duì) XHTML 應(yīng)用樣式,。

簡(jiǎn)介

在這個(gè) 文章系列 中,Internet Technology Group 團(tuán)隊(duì)描述了如何為虛構(gòu)的 International Business Council(IBC)公司創(chuàng)建一個(gè)定制的 Web 站點(diǎn),。這個(gè)站點(diǎn)需要文檔存儲(chǔ),、討論組,、專(zhuān)門(mén)的工作組,、研討會(huì)日程安排、日程議題描述等功能,。

第 7 部分 中,,學(xué)習(xí)了如何創(chuàng)建新的主題,,以及在主題中為 Web 站點(diǎn)構(gòu)造結(jié)構(gòu)化 XHTML。本文繼續(xù)進(jìn)行主題化,,關(guān)注的重點(diǎn)從結(jié)構(gòu)轉(zhuǎn)移到使用層疊樣式表(CSS)對(duì) XHTML 應(yīng)用樣式。

Drupal 允許主題設(shè)計(jì)人員使用 CSS 修改 XHTML 內(nèi)容的表示方式,。CSS 中的樣式適用于所有 Web 站點(diǎn),而不是專(zhuān)門(mén)用于 Drupal 的,,但它是創(chuàng)建有用且符合期望的 Web 站點(diǎn)所需要的。因此,,本文主要關(guān)注在進(jìn)行 CSS 樣式化時(shí)的常用實(shí)踐,。我們將總結(jié)對(duì) IBC Web 站點(diǎn)進(jìn)行樣式化所用的一些技術(shù)。您將學(xué)習(xí)以下方法:

  • 設(shè)計(jì)可維護(hù)的 CSS 結(jié)構(gòu),。
  • 提供成比例的頁(yè)面布局,。
  • 標(biāo)識(shí) Web 站點(diǎn)部分并提供視覺(jué)標(biāo)志,。
  • 創(chuàng)建 CSS 驅(qū)動(dòng)的下拉菜單。
  • 啟用用戶可切換的布局,。
  • 提供打印樣式,。

正如前面文章所解釋的,,Drupal 主題系統(tǒng)使我們能夠?qū)⒔Y(jié)構(gòu)和表示方式與程序邏輯分隔開(kāi)。我們還盡可能將 Web 內(nèi)容的表示與內(nèi)容結(jié)構(gòu)分隔開(kāi),。我們已經(jīng)建立了良好的模板,,它們使用 XHTML 為內(nèi)容建立結(jié)構(gòu),所以現(xiàn)在可以使用 CSS 對(duì)內(nèi)容應(yīng)用樣式,。

本系列中的信息不應(yīng)該解釋為嚴(yán)格的開(kāi)發(fā)規(guī)則,,而是應(yīng)該作為對(duì) Web 站點(diǎn)應(yīng)用樣式時(shí)的起點(diǎn)。

兼容性

對(duì) Web 站點(diǎn)應(yīng)用樣式是一項(xiàng)需要耐心和果斷的工作,。如果 XHTML 結(jié)構(gòu)是良好的,,您的工作就會(huì)輕松得多。但是,,主題設(shè)計(jì)人員深知嘗試使 CSS 跨不同瀏覽器,、瀏覽器版本和平臺(tái)工作時(shí)可能會(huì)遇到的挫折。

盡管越來(lái)越容易了,,但是向后兼容性仍然依賴于客戶的期望和用戶的需要,。一定要了解這些需求并明確地定義它們。對(duì)于 IBC 站點(diǎn),,我們面對(duì)的用戶具有比較高的技術(shù)水平,,他們中的大多數(shù)人使用最新的瀏覽器。通過(guò)對(duì)內(nèi)容結(jié)構(gòu)使用語(yǔ)義標(biāo)記,,我們生成的 Web 頁(yè)面在老式瀏覽器上具有合理的布局,,甚至在樣式不可用時(shí)也是合理的。圖 1 對(duì)比了在有樣式和無(wú)樣式的情況下 IBC 主頁(yè)的顯示,。


圖 1. 有樣式和無(wú)樣式的主頁(yè)
有樣式和無(wú)樣式的主頁(yè)

在沒(méi)有樣式時(shí),,元素的顯示方式是上下依次排列的,這使它占據(jù)更多的垂直空間,。但是,,語(yǔ)義結(jié)構(gòu)仍然是完整的。另外,,原本隱藏的一些內(nèi)容顯示了出來(lái),,這幫助訪問(wèn)者識(shí)別內(nèi)容的某些部分,,其中包括一個(gè)直接跳到頁(yè)面中主內(nèi)容開(kāi)頭的鏈接,。這是為提供可訪問(wèn)性所使用的典型結(jié)構(gòu)化技術(shù)(參見(jiàn) 第 7 部分)。

對(duì)于在不同的環(huán)境中實(shí)現(xiàn)相似的表示方式,,有許多解決方案,,或者說(shuō) hack。我們不打算使用這些方法,。相反,,我們?cè)敢饨邮軆?nèi)容在不同瀏覽器或平臺(tái)上顯示方式略有不同的情況,。只要內(nèi)容仍然是可讀的、能夠發(fā)揮功能而且在布局中具有語(yǔ)義上的正確性,,我們就接受這些差異,。





回頁(yè)首


CSS 文件的組織

第 7 部分 中,我們通過(guò)復(fù)制 Drupal 發(fā)布版附帶的 Bluemarine 主題,,在 themes 目錄下面創(chuàng)建了一個(gè)新的主題目錄,。為了組織這個(gè)目錄,我們決定在這個(gè)主題目錄下創(chuàng)建一個(gè) c 目錄,,用來(lái)包含我們的所有樣式,。還創(chuàng)建了 i 和 j 目錄,分別包含這個(gè)主題專(zhuān)用的圖像和 JavaScript 文件,。

還可以在模塊的 hook_init 函數(shù)或主題的 templates.php 中使用 theme_add_styles 函數(shù),,告訴 Drupal 您希望將哪個(gè)樣式表添加到主題中??梢允褂眠@個(gè)函數(shù)添加樣式表的路徑以及相關(guān)聯(lián)的媒體類(lèi)型,。它在模板中作為 phptemplate 引擎?zhèn)鬟f的 $styles 變量中的一組 LINK 元素出現(xiàn)。我們不采用這種方法,,而是將自己的 LINK 元素硬編碼在 page.tpl.php 文件中,。這種方法可能更適合您的主題設(shè)計(jì)人員,因?yàn)樗麄兛梢詮捻?yè)面模板文件直接控制對(duì)樣式表的使用,。

在默認(rèn)情況下,,Drupal 會(huì)通過(guò) misc 目錄中的 styles.css 文件應(yīng)用樣式。但是,,我們不希望將所有樣式都放在一個(gè)大樣式表中,,而是要定義多個(gè)樣式表并將它們與特定的樣式化任務(wù)關(guān)聯(lián)起來(lái)。我們并不在 page.tpl.php 模板的 HEAD 部分中為每個(gè)樣式表建立一個(gè) LINK 元素,,而是創(chuàng)建一個(gè)包含它們的樣式表,,在其中可以包含所有與任務(wù)相關(guān)的樣式表文件。清單 1 顯示 screen.css 文件的內(nèi)容,,我們使用這個(gè)文件定義主屏幕媒體相關(guān)樣式,。


清單 1. screen.css 文件中包含的樣式表
                                    @import url("base.css");
                                    @import url("form.css");
                                    @import url("layout.css");
                                    @import url("banner.css");
                                    @import url("nav_bar.css");
                                    @import url("side_bar.css");
                                    @import url("login.css");
                                    @import url("home.css");
                                    @import url("workgroups.css");
                                    @import url("conferences.css");
                                    @import url("members.css");
                                    @import url("announcements.css");
                                    @import url("action_items.css");
                                    @import url("agenda_items.css");
                                    @import url("search.css");
                                    @import url("discussions.css");
                                    @import url("comments.css");
                                    @import url("filegallery.css");
                                    @import url("companies.css");
                                    

這個(gè)文件中包含幾個(gè)樣式表,其中包括 XHTML 元素選擇器的基本樣式集,、表單樣式,、頁(yè)面布局、布局的主要區(qū)域(廣告條,、導(dǎo)航,、邊欄)和 Web 站點(diǎn)的主要部分。

對(duì)于一個(gè)請(qǐng)求只傳輸一個(gè)大樣式表文件的速度比較快,,而使用一套樣式表的可維護(hù)性比較好,,而且尋找特定樣式也比較容易,,需要在這兩種方式之間進(jìn)行折中。因?yàn)槲覀兊臉邮奖砗苄?,下載速度很快,,而一旦完成緩存,使用起來(lái)也會(huì)很快,。根據(jù)您需要?jiǎng)?chuàng)建的樣式數(shù)量以及主題設(shè)計(jì)人員的工作習(xí)慣,,使用更少但更大的樣式表文件可能更合適。

這種組織方法有一個(gè)問(wèn)題:如果用戶將 Web 頁(yè)面保存到自己的計(jì)算機(jī)上,,然后在斷開(kāi)網(wǎng)絡(luò)連接的情況下查看頁(yè)面,。screen.css 文件中包含的樣式表不會(huì)被保存,所以當(dāng)用戶離線查看頁(yè)面時(shí),,內(nèi)容上不會(huì)應(yīng)用樣式,。解決這個(gè)問(wèn)題的一種方法是建立一個(gè)后期處理腳本,它解析 screen.css 文件并將所有引用的樣式表包含進(jìn) screen.css,。

改進(jìn)樣式表的可搜索性的另一種方法是使用標(biāo)志 來(lái)幫助我們搜索文件中的注釋,。清單 2 給出一個(gè)在部分的注釋中使用等號(hào)的示例。這種方法是 Doug Bowman 提出的(參見(jiàn) 參考資料),。因?yàn)?CSS 語(yǔ)法中不使用等號(hào),,所以通過(guò)搜索等號(hào),可以快速地找到樣式部分的開(kāi)頭,。

另一個(gè)有用的方法是按照字母表次序排列所有樣式,。這種技術(shù)在搜索樣式時(shí)提供了一定程度的一致性。


清單 2. CSS 文件中的可搜索注釋
                                    /* -----------------------------------------------------------------
                                    *	=announcement_summary
                                    * -----------------------------------------------------------------
                                    */
                                    .announcement_summary {
                                    margin: 0 0 .8em 0;
                                    }
                                    .announcement_summary h3 a {
                                    font-size: 90%;
                                    }
                                    

瀏覽器會(huì)對(duì) XHTML 應(yīng)用默認(rèn)樣式,,這可能會(huì)給主題設(shè)計(jì)人員造成混亂,。對(duì)于我們要使用的所有 XHTML 元素選擇器,將空白邊和補(bǔ)白設(shè)置為零,,從而防止瀏覽器應(yīng)用默認(rèn)樣式,,見(jiàn) 清單 3。現(xiàn)在,,這些元素的樣式的可預(yù)測(cè)性就加強(qiáng)了,。另一種對(duì)所有元素應(yīng)用零空白邊和補(bǔ)白的方法是使用 * 選擇器。但是,,我們希望能夠控制影響哪些元素,。

Eric Mayer 的 Web 站點(diǎn)詳細(xì)介紹了瀏覽器默認(rèn)樣式的效果(參見(jiàn) 參考資料。)


清單 3. 為要使用的選擇器設(shè)置空白邊和補(bǔ)白樣式
                                    p, ul, li, ol, dl, dt, dd, h1, h2, h3, h4,
                                    form, fieldset, blockquote, table, th, tr, td {
                                    margin: 0;
                                    padding: 0;
                                    }
                                    





回頁(yè)首


用于提高可訪問(wèn)性的樣式

第 7 部分 描述了我們?cè)趦?nèi)容結(jié)構(gòu)中使用的一些可訪問(wèn)性技術(shù),。在本節(jié)中,,您將看到我們?nèi)绾问褂?CSS 提高可訪問(wèn)性。當(dāng)然,,可訪問(wèn)性設(shè)計(jì)涉及許多方面的問(wèn)題,。一些是標(biāo)準(zhǔn)設(shè)計(jì)問(wèn)題,比如顏色要形成足夠的對(duì)比度,、在版面中提供足夠的指引信息以及在內(nèi)容的邏輯區(qū)域周?chē)才抛銐虻目瞻?。這些設(shè)計(jì)實(shí)踐超出了本文的范圍。我們關(guān)注主要區(qū)域的樣式化,,以便滿足 IBC Web 站點(diǎn)的可訪問(wèn)性需求,。

成比例的大小改變

成比例的大小改變(proportional sizing) 指的是,對(duì)于容器大小,、文本域的長(zhǎng)度,、字體大小等,盡可能使用百分?jǐn)?shù)和 em 單位,。這種方法可以創(chuàng)建出流式布局,,在這種布局中字體會(huì)隨著布局成比例地改變大小。另一個(gè)要考慮的問(wèn)題是,,需要以某種方式對(duì)圖像應(yīng)用樣式,,讓它們能夠在流式布局中有效地工作。

靈活的字體
現(xiàn)代的瀏覽器能夠改變 Web 頁(yè)面的默認(rèn)字體大小,。這非常有用,,用戶可以減小字體大小以便在瀏覽器窗口中看到更多的內(nèi)容,或者增加字體大小以使 Web 頁(yè)面更容易辨認(rèn),。圖 2圖 3 顯示了 IBC 站點(diǎn)在使用小號(hào)字體和大號(hào)字體時(shí)的布局變化,。


圖 2. 減小字體大小后的布局
減小字體大小后的布局

圖 3. 增加字體大小后的布局
增加字體大小后的布局

效果并不完美,但是在字體大小顯著改變時(shí)顯示效果還算不錯(cuò),。一種常用的實(shí)現(xiàn)技術(shù)是,,設(shè)置一個(gè)初始字體大小,然后在樣式表中對(duì)任何其他字體大小使用百分?jǐn)?shù),。

清單 4 所示,,我們?cè)诨緲邮奖恚╞ase.css)的頂部定義了樣式,包括字體大小,。


清單 4. 為 body 選擇器設(shè)置初始字體樣式
                                    body {
                                    background: #fff;
                                    color: #333;
                                    font-family: Verdana, sans-serif;
                                    font-size: small;
                                    line-height: 1.5em;
                                    margin: 0;
                                    padding: 0;
                                    }
                                    

對(duì)于以后對(duì)字體大小的任何修改,,我們都使用百分?jǐn)?shù)。因此,,如果用戶改變了瀏覽器的默認(rèn)字體大小,,所有文字都會(huì)保持比例。例如,,清單 5 顯示我們?nèi)绾卧O(shè)置邊欄容器的字體大小,。


清單 5. layout.css 中邊欄容器的樣式
                                    #sidebar {
                                    background: transparent url(/themes/ibc/i/bg_sidebar_right.gif) no-repeat top right;
                                    float: right;
                                    font-size: 80%;
                                    line-height: 1.4em;
                                    width: 30%;
                                    }
                                    

所以,邊欄中的字體大小現(xiàn)在是初始大小 small 的 80%。但是,,在將百分?jǐn)?shù)應(yīng)用于子選擇器的樣式時(shí),,要記住單位是累積的。例如,,如果將這個(gè)邊欄中一個(gè)內(nèi)容區(qū)域的字體大小設(shè)置為 90%,,那么字體大小會(huì)是初始設(shè)置的大小的 80% 的 90%。在 Document Object Model(DOM)中使用嵌套更深的此類(lèi)百分?jǐn)?shù),,效果會(huì)更差,。

流式布局
IBC Web 站點(diǎn)上的某些內(nèi)容可能相當(dāng)寬,所以我們希望盡可能利用瀏覽器窗口的寬度,。我們決定采用流式布局而不是固定寬度的布局,。圖 4圖 5 顯示了布局如何隨著瀏覽器窗口的大小而變化。


圖 4. 窄瀏覽器窗口中的布局
窄瀏覽器窗口中的布局

圖 5. 寬瀏覽器窗口中的布局
寬瀏覽器窗口中的布局

這意味著,,我們要在主要布局容器寬度上使用百分?jǐn)?shù),,比如主內(nèi)容區(qū)域和邊欄。在 清單 5 中的邊欄樣式中,,寬度設(shè)置為 30%,。在 清單 6 中,主內(nèi)容容器使用略小于 70% 的寬度,,這是為了適應(yīng) Microsoft? Internet Explorer 的 盒模型寬度實(shí)現(xiàn),。


清單 6. layout.css 中的主內(nèi)容容器樣式
                                    #content {
                                    clear: both;
                                    float: left;
                                    width: 67%;
                                    }
                                    

有許多種技術(shù)可以創(chuàng)建流式的多欄布局。我們選擇讓兩個(gè)容器分別向左右浮動(dòng),。我們提供適當(dāng)?shù)淖钚挾群妥畲髮挾?,以限制設(shè)計(jì)中使用的圖像的大小。在 清單 7 中可以看到 layout.css 文件中使用的樣式,。樣式所針對(duì)的 wrap 容器見(jiàn)本系列 第 7 部分 中的圖 1,。您應(yīng)該知道,max-widthmin-width 樣式的實(shí)現(xiàn)在瀏覽器之間并不一致,。因?yàn)槲覀冞x擇讓邊欄浮動(dòng),,所以當(dāng)瀏覽器窗口的寬度太窄時(shí),邊欄會(huì)出現(xiàn)在主內(nèi)容區(qū)域下面,。


清單 7. 在 layout.css 中限制寬度
                                    #wrap {
                                    max-width: 1600px;
                                    min-width: 750px;
                                    }
                                    

我們還對(duì)一些元素應(yīng)用成比例大小改變,,比如 BUTTON 或 submit 類(lèi)型的 INPUT 元素。對(duì)于這些元素,,我們?cè)?margin,、paddingwidth 等樣式中使用 em 單位而不是百分?jǐn)?shù)。清單 8 顯示我們?nèi)绾螌?duì) submit 類(lèi)型的 INPUT 元素應(yīng)用樣式,。


清單 8. forms.css 中 submit 類(lèi)型的 INPUT(form-submit)的樣式
                                    input.form-submit {
                                    background: #fff url(/themes/ibc/i/bg_btn.gif) repeat-x bottom left;
                                    border: 1px solid #ccc;
                                    border-bottom-color: #999;
                                    border-right-color: #999;
                                    cursor: pointer;
                                    font-size: 79%;
                                    margin: 1em 0 0 0;
                                    padding: 0.25em;
                                    text-align: center;
                                    width: 6em;
                                    }
                                    

圖 2 顯示一個(gè)改變尺寸的表單元素的示例,。當(dāng)字體大小增加時(shí),,頁(yè)面頂部的搜索表單中使用的文本域會(huì)變寬。

在許多情況下,,需要用 DIVSPAN 容器包圍一個(gè)表單組件,,以便從 CSS 樣式表訪問(wèn)它。Drupal forms API 允許使用 #prefix#suffix 數(shù)組元素在為每個(gè)表單組件生成的 XHTML 之前和之后定義內(nèi)容,。(見(jiàn) 第 6 部分 的清單 11 中的示例,。)

對(duì)流式布局中的圖像應(yīng)用樣式
圖 2,、圖 3,、圖 4圖 5 所示,字體大小和瀏覽器窗口寬度的改變會(huì)對(duì)頁(yè)面上的可視元素產(chǎn)生顯著影響,。在容器的背景中使用單色(比如導(dǎo)航條中的黑色背景)可以在某種程度上緩解這個(gè)問(wèn)題,。當(dāng)字體大小增加時(shí),導(dǎo)航條的高度會(huì)隨著增加,。在這個(gè)容器上應(yīng)用黑色背景就意味著我們不必?fù)?dān)心了,。同樣,我們對(duì)邊框的尺寸使用百分?jǐn)?shù)或 em 單位,。

另一種常用技術(shù)是沿水平或垂直方向在元素的背景中重復(fù)顯示圖像,。這樣的話,如果圖像的邊緣與定義的背景顏色融為一體,,那么就能夠適應(yīng)任何大小變化,。圖 6 顯示圖像如何在 BUTTON 或 submit 類(lèi)型的 INPUT 元素中創(chuàng)建漸變效果,從而適應(yīng)增加字體大小所產(chǎn)生的空間,。


圖 6. 背景樣式效果保持一致
背景樣式效果保持一致

圖 7 顯示 清單 8 中的樣式如何在按鈕中創(chuàng)建這種靈活的背景圖像,。


圖 7. 圖 6 中按鈕的構(gòu)造過(guò)程
圖 6 中按鈕的構(gòu)造過(guò)程

submit 類(lèi)型的 INPUT 元素的背景顏色設(shè)置為白色。在背景中使用一個(gè)圖像提供到白色的逐變,。這個(gè)圖像寬 1 像素,,并定位在容器的左下角。通過(guò)使用 repeat-x 屬性,,這個(gè)圖像水平重復(fù)顯示,,填滿容器。如果容器的大小改變了,,背景圖像會(huì)適應(yīng)這種情況,,從而創(chuàng)建我們需要的效果。

對(duì)于需要沿水平或垂直方向擴(kuò)展或收縮的簡(jiǎn)單漸變,,這種技術(shù)是有效的,。但是對(duì)于更復(fù)雜的圖像,比如邊欄的背景,,我們有意地使用比默認(rèn)顯示區(qū)域大的圖像并適當(dāng)?shù)剡M(jìn)行定位,。當(dāng)布局?jǐn)U展時(shí),圖像的可視部分將總是可見(jiàn)的。Doug Bowman 的滑動(dòng)門(mén)技術(shù)使這種技術(shù)更加流行,。(參見(jiàn) 參考資料,。)圖 8 顯示邊欄背景的寬度如何隨著瀏覽器窗口由窄變寬。


圖 8. 窄窗口和寬窗口中的邊欄
窄窗口和寬窗口

創(chuàng)建這種效果的方法是將一個(gè)容器放在另一個(gè)容器中,,并給它們分別設(shè)置背景,。一個(gè)背景形成右上角,另一個(gè)形成左上角,。因?yàn)橥膺叺?DIV 元素限制了邊欄的尺寸,,而內(nèi)部的 DIV 會(huì)擴(kuò)展到它的父元素的整個(gè)空間,所以這兩個(gè)圖像會(huì)精確地重疊,。一個(gè)圖像非常寬,,會(huì)被外邊的 DIV 裁剪,如 圖 9 所示,。


圖 9. 創(chuàng)建邊欄背景所用的背景圖像
創(chuàng)建邊欄背景所用的背景圖像

邊欄的結(jié)構(gòu)見(jiàn) 清單 9,。外邊的 DIV 元素的 ID 屬性值為 sidebar,這個(gè)元素包含的內(nèi)部 DIV 具有 class 屬性值 gutter,。在其中顯示 $sidebar_right 區(qū)域變量的內(nèi)容,。


清單 9. page.tpl.php 中的邊欄結(jié)構(gòu)
                                    <div id="sidebar">
                                    <div class="gutter">
                                    <?php print $sidebar_right; ?>
                                    </div>
                                    </div>
                                    

清單 10 顯示如何對(duì)這兩個(gè) DIV 容器應(yīng)用樣式。形成背景右上角的寬圖像定位在 sidebar 容器的右上角,。形成背景左上角的小圖像定位在 gutter 容器的左上角,。如果邊欄的寬度增加了,兩個(gè)背景圖像就會(huì)相互錯(cuò)開(kāi)(因此稱(chēng)為 “滑動(dòng)門(mén)”),,更多地露出下面的圖像,,如 圖 9 所示。這看起來(lái)就像是背景圖像擴(kuò)大到整個(gè)區(qū)域,。這就是許多技術(shù)使用的多層背景圖像的基本概念,。


清單 10. layout.css 中的邊欄背景樣式
                                    #sidebar {
                                    background: transparent url(/themes/ibc/i/bg_sidebar_right.gif) no-repeat top right;
                                    .
                                    .
                                    }
                                    #sidebar .gutter {
                                    background: transparent url(/themes/ibc/i/bg_sidebar_left.gif) no-repeat top left;
                                    padding: 10px 20px 0 20px;
                                    }
                                    

為非傳統(tǒng)瀏覽器提供的額外內(nèi)容
第 7 部分 中討論過(guò)這個(gè)問(wèn)題。但是,,當(dāng)用戶使用傳統(tǒng)瀏覽器查看頁(yè)面時(shí),,我們?nèi)匀恍枰[藏這些額外的內(nèi)容,所以對(duì)這些容器應(yīng)用一個(gè) display: none 樣式,,其 class 值為 access,。





回頁(yè)首


部分的樣式

第 7 部分 中,您看到了我們?nèi)绾胃鶕?jù)要顯示的 Web 站點(diǎn)部分自動(dòng)地設(shè)置 class 值,。這提供了一個(gè)非常有用的標(biāo)志,,我們可以利用 class 屬性根據(jù)部分改變 Web 站點(diǎn)的外觀。

對(duì)于 IBC 站點(diǎn),,我們希望在整個(gè) Web 站點(diǎn)上保持基本布局,,以免 IBC 的受眾感到迷惑并保持視覺(jué)上的一致性,。但是,通過(guò)使用為品牌設(shè)計(jì)的主面板,,我們可以修改某些可視元素的顏色,,從而標(biāo)識(shí)出主要部分。這些元素的一部分包含在 Web 站點(diǎn)的廣告條中,,如 圖 10 所示,。為了實(shí)現(xiàn)這種效果,我們使用 CSS 改變廣告條的背景圖像,、選擇的菜單條目旁邊的圖標(biāo)以及底邊框的顏色,。


圖 10. 每個(gè)主要 Web 站點(diǎn)部分的廣告條
每個(gè)主要 Web 站點(diǎn)部分的廣告條

首先,我們使用一種常用技術(shù)隱藏 H1 元素,,也就是隱藏了廣告條中的 Web 站點(diǎn)標(biāo)題,。(見(jiàn) 第 7 部分 中的清單 1,。)這樣就可以使用背景圖像,,而在不應(yīng)用樣式時(shí)仍然顯示文本標(biāo)題。這對(duì)于后面討論的打印樣式很有幫助,。清單 11 顯示我們隱藏 H1 文本的方法,。


清單 11. 在 header.css 中為站點(diǎn)標(biāo)題提供圖像
                                    #banner {
                                    background: #ddd url(/themes/ibc/i/bg_header_home.gif) no-repeat top left;
                                    height: 100%;
                                    overflow: hidden;
                                    height: 61px;
                                    }
                                    #banner h1 {
                                    display: none;
                                    }
                                    

一個(gè)默認(rèn)的背景圖像應(yīng)用于廣告條。廣告條的尺寸是固定,,但是如果搜索表單中的文本大小增加了,,高度就會(huì)變化,背景圖像也會(huì)變大以提供另一個(gè)滑動(dòng)門(mén)效果,。然后將 H1 元素從文檔流中完全排除出去,,從而隱藏它。隱藏 H1 元素的另一種方法是,,使用樣式 text-indent: --999em 將它移動(dòng)到瀏覽器窗口之外,,這樣的話文本仍然留在文檔流中,但是用戶看不見(jiàn)它,。

我們以 Workgroups 部分為例,。因?yàn)槲覀冎?BODY 元素的 class 屬性值會(huì)設(shè)置為 workgroup,所以可以相應(yīng)地對(duì)廣告條元素應(yīng)用樣式,。清單 12 顯示了如何改變樣式來(lái)修改這個(gè)部分的外觀,。


清單 12. workgroups.css 中 Workgroup 部分的樣式
                                    .workgroups #banner {
                                    background: #ddd url(/themes/ibc/i/bg_header_workgroups.gif)
                                    no-repeat top left;
                                    }
                                    .workgroups #nav_bar #pri_nav li#t_workgroups a {
                                    background: transparent url(/themes/ibc/i/icon_nav_workgroups.gif)
                                    no-repeat center left;
                                    color: #fff;
                                    font-weight: bold;
                                    }
                                    .workgroups #nav_bar #pri_nav li#t_workgroups ul li a {
                                    background: transparent url(/themes/ibc/i/icon_nav_bullet_workgroups.gif)
                                    no-repeat top left;
                                    color: #d1d1d1;
                                    }
                                    .workgroups #nav_bar #pri_nav li#t_workgroups ul li a:hover {
                                    color: #fff;
                                    }
                                    .workgroups #nav_bar, .workgroups #nav_bar #pri_nav li ul {
                                    border-bottom: 6px solid #d50304;
                                    }
                                    .workgroups #footer {
                                    border-top: 3px solid #d50304;
                                    }
                                    

在這段 CSS 中可以看到,大多數(shù)樣式出現(xiàn)在主導(dǎo)航 UL 元素中,,見(jiàn) 第 7 部分 中的清單 7,。這些樣式修改 nav-bar.css 文件中的默認(rèn)樣式。在上面的 清單 12 中,,將廣告條的背景改為使用與部分相關(guān)的圖像,。然后,,修改工作組列表項(xiàng)錨元素的背景,使效果看上去像是菜單條目前面的符號(hào)改變了顏色,。為了增強(qiáng)效果,,我們修改了這個(gè)列表項(xiàng)和其中任何子列表項(xiàng)的顏色和字體粗細(xì)。還改變了子列表項(xiàng)的樣式,,讓用來(lái)創(chuàng)建符號(hào)的背景圖像顯示為對(duì)應(yīng)的顏色,。這是一種相當(dāng)簡(jiǎn)單的部分樣式。還可以使用 CSS 更充分地修改頁(yè)面的布局,。





回頁(yè)首


導(dǎo)航

IBC 的主導(dǎo)航是動(dòng)態(tài)的,。導(dǎo)航的結(jié)構(gòu)使用錨元素的無(wú)序列表。為了實(shí)現(xiàn)子菜單,,我們嵌入另一級(jí) UL 元素,。第 7 部分 中的清單 7 顯示了 XHTML。按照這種方法,,在不應(yīng)用樣式時(shí),,仍然可以保持導(dǎo)航的語(yǔ)義,如 圖 11 所示,。它還使我們能夠使用 CSS 在錨元素的背景中重復(fù)顯示圖像,。因此可以輕松地添加新的菜單條目并減少下載時(shí)間。


圖 11. 不應(yīng)用樣式時(shí)的 Web 站點(diǎn)導(dǎo)航
不應(yīng)用樣式時(shí)的 Web 站點(diǎn)導(dǎo)航

通過(guò) CSS 使用嵌入的 UL 元素創(chuàng)建下拉菜單效果,。網(wǎng)上和出版的許多參考資料解釋了如何使用 CSS 實(shí)現(xiàn)下拉菜單,。我們選用基于 Suckerfish Dropdowns 的技術(shù)。清單 13 顯示應(yīng)用于第一級(jí) UL 元素的樣式,。


清單 13. nav-bar.css 中站點(diǎn)導(dǎo)航的第一級(jí)無(wú)序列表項(xiàng)的樣式
                                    #pri_nav {
                                    float: left;
                                    display: block;
                                    list-style: none;
                                    margin: 0;
                                    padding: 0 1em .5em 1em;
                                    }
                                    #pri_nav li {
                                    float: left;
                                    }
                                    #pri_nav li#t_home {
                                    width: 5.1em;
                                    }
                                    #pri_nav li#t_workgroups, #pri_nav li#t_workgroups ul li {
                                    width: 10em;
                                    }
                                    #pri_nav li#t_conferences, #pri_nav li#t_conferences ul li {
                                    width: 10em;
                                    }
                                    #pri_nav li#t_members, #pri_nav li#t_members ul li {
                                    width: 8em;
                                    }
                                    #pri_nav li a {
                                    background: transparent url(/themes/ibc/i/icon_nav.gif)
                                    no-repeat center left;
                                    border: 0;
                                    color: #d1d1d1;
                                    color: #e0e0e0;
                                    display: block;
                                    float: left;
                                    font-family: Arial, Helvetica, sans-serif;
                                    margin: 0;
                                    padding: 0;
                                    text-decoration: none;
                                    text-indent: 16px;
                                    text-transform: uppercase;
                                    }
                                    #pri_nav li a:hover {
                                    color: #fff;
                                    }
                                    

前兩個(gè)樣式規(guī)則設(shè)置 UL 元素,,使所有 LI 子元素水平顯示,而且前面不顯示符號(hào),。后四個(gè)樣式規(guī)則設(shè)置每個(gè)代表站點(diǎn)主要部分的 LI 元素的寬度,。它們也確保任何嵌入的下拉列表的寬度相同。圖 12 顯示以上 CSS 應(yīng)用于第一級(jí) UL 元素所產(chǎn)生的菜單效果,。


圖 12. 只對(duì)第一級(jí) UL 元素應(yīng)用樣式的導(dǎo)航
只對(duì)第一級(jí) UL 元素應(yīng)用樣式的導(dǎo)航

第一級(jí)列表項(xiàng)目的顯示是合適的,。但是,嵌入的 UL 元素需要正確地調(diào)整,,要顯示更好的符號(hào)圖像,,而且只當(dāng)鼠標(biāo)停留在包含它們的 LI 時(shí)出現(xiàn)。清單 14 顯示了應(yīng)用于這些嵌入的 UL 元素的 CSS,。


清單 14. nav-bar.css 中站點(diǎn)導(dǎo)航的嵌入無(wú)序列表元素的樣式
                                    #pri_nav li {
                                    position: relative;
                                    }
                                    #pri_nav li ul {
                                    background: #000;
                                    border-bottom: 6px solid #666;
                                    left: -999em;
                                    margin: 0;
                                    padding: .7em .1em 0 .5em;
                                    position: absolute;
                                    top: 1.3em;
                                    width: 10em;
                                    }
                                    #pri_nav li:hover ul, #pri_nav li.over ul {
                                    left: 0;
                                    }
                                    #pri_nav li ul li {
                                    float: left;
                                    list-style: none;
                                    width: 10em;
                                    }
                                    #pri_nav li ul li a {
                                    background: transparent url(/themes/ibc/i/icon_nav_bullet.gif)
                                    no-repeat top left;
                                    border-top: 1px solid #333;
                                    display: block;
                                    font-size: 95%;
                                    padding-left: 12px;
                                    text-indent: 0;
                                    text-transform: capitalize;
                                    width: 9em;
                                    }
                                    #pri_nav li ul li a:hover {
                                    color: #fff;
                                    }
                                    

這段 CSS 中比較有意思的部分包含在前三個(gè)樣式規(guī)則中,。第一個(gè)規(guī)則確保可以相對(duì)于包含它們的 LI 元素對(duì)嵌入的 UL 元素進(jìn)行定位,。第二個(gè)樣式規(guī)則使用 left: -999em; 樣式將嵌入的 UL 元素定位到瀏覽器窗口的外邊,,使用戶看不到它們,。我們?cè)谶@里使用絕對(duì)定位,使這些 UL 元素脫離頁(yè)面流,,這樣它們的高度就不會(huì)添加到包含它們的元素的高度中,。如果在這里使用相對(duì)定位,就會(huì)出現(xiàn) 圖 13 所示的情況,。這里的最后三個(gè)樣式規(guī)則對(duì)齊文本并應(yīng)用樣式,,還為代表下拉列表的嵌入元素提供新的背景圖像。


圖 13. 在 nav-bar.css 中對(duì) #pri_nav li ul 選擇器使用相對(duì)定位的效果
對(duì) #pri_nav li ul 選擇器使用相對(duì)定位的效果

清單 14 中的第三個(gè)樣式規(guī)則使下拉菜單出現(xiàn),,它將嵌入的 UL 元素從瀏覽器窗口外邊移動(dòng)回包含它的 LI 元素下面并對(duì)齊,。

現(xiàn)在,下拉菜單的樣式完整了,。圖 14 顯示當(dāng)鼠標(biāo)停留在 MEMBERS 鏈接上時(shí)的效果,。


圖 14. 在完成的下拉菜單上,鼠標(biāo)停留在鏈接上的效果
在完成的下拉菜單上,,鼠標(biāo)停留在鏈接上的效果

到編寫(xiě)本文時(shí)為止,,Internet Explorer(IE)在 LI 元素上還不支持 hover 偽類(lèi)。在 清單 14 中,,可以看到選擇器 #pri_nav li.over ul,。IE 使用 over 類(lèi)來(lái)找到嵌入的 UL 元素。這些類(lèi)可以以手工方式放進(jìn)導(dǎo)航 XHTML 中,。或者,,按照 Suckerfish Dropdown 技術(shù),,用 onload 事件觸發(fā)一小段 JavaScript,這段代碼解析 DOM 并在包含的 LI 元素中插入 over 類(lèi),。





回頁(yè)首


切換布局

在參與 IBC 的用戶之間的通信和協(xié)作很重要,,而且這個(gè) Web 站點(diǎn)的需求之一是提供查看成員配置文件的不同方式。我們利用選項(xiàng)卡,,根據(jù) IBC 成員所屬的公司或在 Web 站點(diǎn)上的角色進(jìn)行查看,。我們的用戶測(cè)試表明,提供每個(gè)成員的照片是一項(xiàng)有價(jià)值的特性,,如 圖 15 所示,。


圖 15. Web 站點(diǎn)成員的照片布局
Web 站點(diǎn)成員的照片布局

但是,IBC 站點(diǎn)管理員認(rèn)為查看更傳統(tǒng)的列表視圖(如 圖 16 所示)更合適,,這樣可以更快地看到更多的用戶信息,。


圖 16. Web 站點(diǎn)成員的緊湊布局
Web 站點(diǎn)成員的緊湊布局

內(nèi)容基本上是相同的,但是成員數(shù)據(jù)的布局很不一樣,。因?yàn)榭梢允褂?CSS 控制這兩種布局,,所以我們選用一種簡(jiǎn)單的樣式切換技術(shù),。

我們已經(jīng)有了一個(gè)樣式表 members.css,它處理照片布局的樣式,。為了創(chuàng)建緊湊布局的樣式表,,我們?cè)谕荒夸浿袕?fù)制這個(gè)文件,并將它重命名為 members_alt.css,。

因?yàn)檫@組替代的成員樣式可以與常規(guī)樣式表組合在一起,,我們?cè)谕荒夸浿袕?fù)制 screen.css,并將它重命名為 screen_alt_members.css,。在這個(gè)文件中,,將 members.css 的包含語(yǔ)句(見(jiàn) 清單 1)替換為 members_alt.css。

為了完成這個(gè)過(guò)程并向?yàn)g覽器提供替代樣式,,我們?cè)?page.tpl.php 中的頁(yè)面頭部分中添加一個(gè)新的 LINK 元素,。清單 15 顯示這個(gè) LINK 元素以及在這兩者之間 title 屬性的差異。


清單 15. 在 page.tpl.php 中定義替代樣式
                                    <link rel="stylesheet"
                                    type="text/css"
                                    media="screen"
                                    href="themes/ibc/c/screen.css"
                                    title="Default layout"/>
                                    <link rel="alternate stylesheet"
                                    type="text/css"
                                    media="screen"
                                    href="themes/ibc/c/screen_alt_member.css"
                                    title="Alternate member layout"/>
                                    

瀏覽器會(huì)發(fā)現(xiàn)存在對(duì)這個(gè) Web 站點(diǎn)應(yīng)用樣式的替代方式,,并允許訪問(wèn)者通過(guò)瀏覽器界面選擇這種新的顯示方式,,如 圖 17 所示。


圖 17. 通過(guò) Firefox 瀏覽器界面切換樣式
通過(guò) Firefox 瀏覽器界面切換樣式

但是,,某些瀏覽器不能識(shí)別替代樣式,;我們?nèi)匀恍枰诔蓡T部分中提供一個(gè)可視線索,表明可以切換樣式并允許用戶激活布局改變,。有多種方法可以滿足這種需求,,但是我們選用的方法基于 Paul Sowden 描述的技術(shù)(參見(jiàn) 參考資料。)

在控制成員節(jié)點(diǎn)列表的布局的模板中,,我們添加了兩個(gè)鏈接,。如 清單 16 所示,這些錨元素包含 onclick 觸發(fā)器,,它們調(diào)用 setActiveStyleSheet JavaScript 函數(shù),。


清單 16. 切換樣式的鏈接
                                    <span class="actions common"><a
                                    href="#" onclick="setActiveStyleSheet('Default layout');return false;"
                                    title="Display the member information using member photographs">Photo layout</a>
                                    </span>
                                    <span class="actions common"><a href="#"
                                    onclick="setActiveStyleSheet('Alternate member layout');return false;"
                                    title="Display the member information using a compact layout">Compact layout</a>
                                    </span>
                                    

這些 JavaScript 代碼解析 DOM 中 media 屬性值為 screenLINK 元素,并在與 setActiveStyleSheet 函數(shù)傳遞的 title 屬性不匹配的 LINK 元素上設(shè)置 disable 屬性,。這一選擇存儲(chǔ)在 cookie 中,,以便保存活動(dòng)樣式表的狀態(tài)。





回頁(yè)首


打印媒體的樣式

IBC 站點(diǎn)上存儲(chǔ)著許多參考資料,。我們最初的用戶測(cè)試表明,,許多 IBC 成員喜歡把資料打印出來(lái)供離線查看,比如研討會(huì)議程和會(huì)議資料,。設(shè)計(jì) Web 內(nèi)容的打印版本的樣式是很重要的,。通過(guò)使用打印媒體專(zhuān)用的樣式,我們能夠在大多數(shù)打印設(shè)備上創(chuàng)建便于閱讀的布局。

下面兩個(gè)圖都是 IBC Web 站點(diǎn)上的研討會(huì)頁(yè)面,,圖 18 是 Web 站點(diǎn)上的樣式,,圖 19 是使用打印媒體專(zhuān)用樣式表的輸出。


圖 18. 包含議程的研討會(huì)頁(yè)面
包含議程的研討會(huì)頁(yè)面

圖 19. 圖 18 中 Web 頁(yè)面的打印形式
圖 18 中 Web 頁(yè)面的打印形式

在為打印媒體設(shè)計(jì)樣式時(shí),,有幾個(gè)問(wèn)題,。

  • 使用實(shí)際打印機(jī)進(jìn)行測(cè)試的成本高而且費(fèi)時(shí)間。

     

  • 通常,,無(wú)法找來(lái)許多種打印設(shè)備進(jìn)行測(cè)試,。

     

  • 需要考慮在單色打印機(jī)上進(jìn)行打印的情況,這種打印機(jī)只使用有限的灰色色譜,。

     

  • 打印機(jī)有時(shí)候無(wú)法打印出很亮的顏色,。高亮顯示的信息就會(huì)丟失。需要?jiǎng)?chuàng)建顯示這些信息的替代方法,。

     

  • 大多數(shù)打印設(shè)備沒(méi)有像 Web 瀏覽器那樣提供改變字體大小或進(jìn)行縮放的方法,。需要使用一種便于大多數(shù)人閱讀的基本字體大小。

     

  • 在 Web 頁(yè)面上有意義的某些信息(比如超鏈接或表單)在打印的頁(yè)面上可能沒(méi)有意義,。

     

  • 因?yàn)槲覀兊?Web 頁(yè)面布局是流式的,,用戶可以改變?yōu)g覽器窗口的大小來(lái)形成更合適的顯示方式。標(biāo)準(zhǔn)的打印頁(yè)面沒(méi)有提供這種靈活性,。

     

  • 標(biāo)準(zhǔn)的打印頁(yè)面在垂直方向上要換頁(yè),。需要決定某些內(nèi)容塊(比如邊欄信息)應(yīng)該如何放置在頁(yè)面上。

     

  • 打印媒體專(zhuān)用的樣式在現(xiàn)代瀏覽器上還沒(méi)有完全實(shí)現(xiàn),。因此,,在進(jìn)行換頁(yè)(使用 page-break-beforepage-break-insidepage-break-after 樣式)等設(shè)置時(shí)要謹(jǐn)慎,。在一種流行的瀏覽器的某一版本中,,使用換頁(yè)會(huì)破壞布局。

 

創(chuàng)建打印媒體樣式表

我們?cè)谄渌麡邮奖硭诘哪夸浿袆?chuàng)建一個(gè)新的樣式表,,print.css。為了將這個(gè)樣式表提供給瀏覽器,,我們?cè)?page.tpl.php 模板文件中 清單 15 所示的元素前面添加了另一個(gè) LINK 元素,。清單 17 顯示這個(gè)元素,它將 media 屬性值設(shè)置為 print,,從而表明這個(gè)樣式表的用途,。


清單 17. 在 page.tpl.php 中包含打印媒體專(zhuān)用樣式
                                    <link rel="stylesheet"
                                    type="text/css"
                                    media="print"
                                    href="themes/ibc/c/print.css" />
                                    

當(dāng)然,如果定義了 media 屬性值為 all 的 screen.css,,并將這個(gè) LINK 放在它后面,,打印樣式就會(huì)繼承所有屏幕樣式。但是,,為了保持更大的控制能力,,我們決定不這么做,。

對(duì)打印機(jī)友好的內(nèi)容

我們以 IBC Announcement 頁(yè)面為例說(shuō)明我們?nèi)绾卧O(shè)計(jì)打印樣式。圖 20 突出顯示了 Web 站點(diǎn)標(biāo)題和公告的實(shí)際內(nèi)容,,因?yàn)樗鼈円呀?jīng)經(jīng)過(guò)轉(zhuǎn)換,,可以適應(yīng)打印媒體。頁(yè)面其余部分顯示的鏈接僅僅是隱藏 Web 站點(diǎn)上的信息,、提供到這些信息的鏈接或觸發(fā)對(duì)這些信息的操作,,而沒(méi)有提供其他功能。


圖 20. 標(biāo)題(A)和內(nèi)容(B)已經(jīng)經(jīng)過(guò)轉(zhuǎn)換,,可以適應(yīng)打印媒體
標(biāo)題和內(nèi)容已經(jīng)經(jīng)過(guò)轉(zhuǎn)換,,可以適應(yīng)打印媒體

語(yǔ)義標(biāo)記的作用

您可以想像到,對(duì)于每種新的媒體類(lèi)型,,都需要對(duì)所有東西重新設(shè)置樣式,。但是,如果使用正確的 XHTML 元素為內(nèi)容提供語(yǔ)義意義,,就會(huì)獲得其他一些好處,。圖 1 顯示了無(wú)樣式的站點(diǎn)的外觀,其中沒(méi)有廣告條,、搜索條,、可訪問(wèn)性信息、導(dǎo)航和邊欄,。這為 Web 站點(diǎn)創(chuàng)建了一個(gè)非常干凈的可打印的布局,。正確地使用標(biāo)記會(huì)使內(nèi)容保持可讀性,而且不需要做很多重新樣式化工作就可以建立合理的打印媒體輸出,,從而在大多數(shù)打印設(shè)備上產(chǎn)生不錯(cuò)的效果,。

基本布局

那么,如何開(kāi)始設(shè)計(jì)打印樣式呢,?首先要定義一個(gè)基本字體系列和字體大小,。盡管可以定義背景顏色、字體顏色和空白邊,,但是我們保持打印設(shè)備的默認(rèn)設(shè)置,。下一項(xiàng)工作是隱藏 Web 頁(yè)面上對(duì)打印媒體沒(méi)有意義的那些區(qū)域。如上面的 圖 20 所示,,我們只使用站點(diǎn)標(biāo)題和頁(yè)面的主要內(nèi)容區(qū)域,。清單 18 顯示最初的基本樣式。


清單 18. print.css 中的基本打印樣式
                                    body {
                                    font: 12pt Georgia, "Times New Roman", Times, serif;
                                    }
                                    #nav_bar, #sidebar, #footer {
                                    display: none;
                                    }
                                    .action, .more, .return_top, .tabs, .index {
                                    display: none;
                                    }
                                    

字體樣式使用 12pt 值,,這是常用的打印媒體字體大小,。我們選用標(biāo)準(zhǔn)的 serif 字體以保持可讀性。第二個(gè)和第三個(gè)樣式規(guī)則隱藏那些在打印文檔中不需要的內(nèi)容部分。

測(cè)試打印樣式

使用可用的打印設(shè)備測(cè)試打印樣式是個(gè)好主意,。但是,,往往要經(jīng)過(guò)很多次迭代才能獲得需要的顯示效果,因此會(huì)在等待打印方面浪費(fèi)很多時(shí)間,,還會(huì)浪費(fèi)紙張,。更好的方法是使用大多數(shù)瀏覽器上都有的打印預(yù)覽選項(xiàng),如 圖 21 所示,。

我們發(fā)現(xiàn)瀏覽器在應(yīng)用打印樣式方面存在一些差異,,但是這些差異比屏幕媒體樣式遇到的差異少得多。Web Developer extension for Firefox 這樣的插件(參見(jiàn) 參考資料)允許使用 XHTML 中定義的不同媒體類(lèi)型來(lái)查看 Web 頁(yè)面,。但是,,我們發(fā)現(xiàn)打印預(yù)覽選項(xiàng)可以更可靠地顯示打印頁(yè)面的外觀。當(dāng)然,,真正的測(cè)試是實(shí)際打印 Web 頁(yè)面,。按照這種方式,可以只在頁(yè)面的打印預(yù)覽效果令人滿意時(shí)進(jìn)行實(shí)際打印,。


圖 21. 公告的打印預(yù)覽
公告的打印預(yù)覽

調(diào)整打印樣式

可以很快地建立合理的 Web 內(nèi)容打印樣式,,但是我們發(fā)現(xiàn)有許多小的調(diào)整可以提高可讀性。例如,,在標(biāo)題上應(yīng)用邊框樣式有助于提高可讀性,。下面列出了對(duì) IBC 站點(diǎn)的打印樣式的幾處修改。

空白
瀏覽器的默認(rèn)打印樣式會(huì)創(chuàng)建可讀性很好的文檔,。但是,,我們發(fā)現(xiàn)元素之間的一些空白邊不理想。例如,,我們?cè)黾恿硕温渲車(chē)目瞻滓蕴岣呖勺x性,。清單 19 顯示應(yīng)用于 P 元素的樣式,這個(gè)樣式會(huì)調(diào)整段落上下的空間,。


清單 19. print.css 中的段落調(diào)整
                                    p {
                                    margin: 0.2em 0;
                                    }
                                    

鏈接
我們提到過(guò),,鏈接在打印媒體上下文中不提供有意義的信息。根據(jù)讀者需求的不同,,這可能是有爭(zhēng)議的,。您可能希望強(qiáng)調(diào)某些鏈接到其他 Web 文檔的單詞或短語(yǔ)。這可能應(yīng)該采用下劃線形式,,因?yàn)榇煮w和斜體文本是常用的打印強(qiáng)調(diào)技術(shù),使用它們可能會(huì)使內(nèi)容的含義產(chǎn)生混淆,。也可以考慮使用顏色,,這在下面討論。另一種技術(shù)是將鏈接的 URL 打印在相關(guān)文本的后面。清單 20 顯示我們?nèi)绾问褂?after 偽元素和 content 樣式顯示鏈接的 URL,。


清單 20. 在鏈接文本后面顯示 URL
                                    a:link:after, a:visited:after {
                                    content: "[link:"attr(href)"]";
                                    font-size: 90%;
                                    }
                                    


圖 22. Web 頁(yè)面上和打印頁(yè)面上的 IBC 鏈接
Web 頁(yè)面上和打印頁(yè)面上的 IBC 鏈接

如果在 XHTML 鏈接中使用相對(duì) URL,,那么打印版本可能會(huì)使讀者覺(jué)得迷惑。與相對(duì) URL forum 相比,,絕對(duì) URL http://:96/forum 在這個(gè)上下文中更合適,。

顏色
我們希望 IBC 內(nèi)容在盡可能多的打印設(shè)備上有良好的打印效果,所以希望控制打印顏色的方式,。例如,,用來(lái)在表格數(shù)據(jù)中標(biāo)識(shí)間隔行或強(qiáng)調(diào)研討會(huì)議程的某些部分的色帶??梢允褂门c屏幕樣式相同的顏色定義,,讓打印設(shè)備以默認(rèn)方式將它們顯示為不同的灰色底紋。但是,,通過(guò)在樣式中定義顏色,,可以定義更好的灰色底紋。

顏色的另一個(gè)用途是顯示某些實(shí)體(比如 IBC 成員)的狀態(tài),。在 Web 站點(diǎn)上,,以一種顏色突出顯示只有操作人員能夠看到的成員。為了在打印頁(yè)面上體現(xiàn)這種效果,,我們使用與 清單 21 相似的技術(shù)添加一些說(shuō)明性文本,,如 圖 23 所示。


清單 21. 顯示不可見(jiàn) IBC 成員的狀態(tài)
                                    .member_summary.hl_red .fn:before {
                                    content: "(Not visible) ";
                                    }
                                    


圖 23. Web 頁(yè)面上和打印頁(yè)面上的不可見(jiàn) IBC 成員
Web 頁(yè)面上和打印頁(yè)面上的不可見(jiàn) IBC 成員

隱藏的和鏈接的信息
使用 CSS 隱藏和顯示內(nèi)容是非常容易的,,因此可以在打印的內(nèi)容中添加在其他頁(yè)面中沒(méi)有的信息,。例如,對(duì)快捷鍵進(jìn)行解釋的可訪問(wèn)性內(nèi)容和研討會(huì)議程頁(yè)面,。

在提供給研討會(huì)頁(yè)面的模板文件的節(jié)點(diǎn)對(duì)象中,,不只包含議程,還有研討會(huì)地點(diǎn)等會(huì)務(wù)信息,。在屏幕樣式表(conference.css)中,,我們隱藏了 DIV 元素中的會(huì)務(wù)信息,但是提供了到包含會(huì)務(wù)信息的另一個(gè)頁(yè)面的鏈接,。在打印樣式表中,,顯示會(huì)務(wù)信息,讓讀者能夠在頁(yè)面上了解到關(guān)于研討會(huì)的更多信息,。但是,,這種做法以不一致的方式顯示信息,可能會(huì)引發(fā)某些有趣的爭(zhēng)議,。

換頁(yè)
某些信息的顯示可能需要在頁(yè)面之間進(jìn)行符合邏輯的分隔,。換頁(yè)樣式(page-break-before,、page-break-insidepage-break-after)提供了在 CSS 中控制分隔方式的辦法。

我們對(duì)每個(gè)包含一天中的議程的表格使用 page-break-before 樣式,。打印效果的可讀性很好,,但不幸的是,在某個(gè)流行的瀏覽器版本上進(jìn)行測(cè)試時(shí),,這會(huì)破壞整個(gè)布局,。我們認(rèn)為這個(gè) bug 現(xiàn)在已經(jīng)修復(fù)了,但是這使我們意識(shí)到某些打印樣式特性在瀏覽器中還沒(méi)有完全實(shí)現(xiàn),。





回頁(yè)首


預(yù)期和測(cè)試

向包含動(dòng)態(tài)內(nèi)容的 Web 站點(diǎn)應(yīng)用樣式不是一件輕松的工作,。包含靜態(tài)內(nèi)容的 Web 站點(diǎn)提供了一個(gè)可應(yīng)用 CSS 的非常穩(wěn)定的基礎(chǔ)。這里不會(huì)有導(dǎo)致 XHTML 結(jié)構(gòu)發(fā)生更改(進(jìn)而有可能影響 CSS 效果)的異常內(nèi)容,。例如,,IBC 站點(diǎn)的內(nèi)容編輯可能會(huì)決定將一個(gè)文檔中的某些文本剪切到新公告的某個(gè)字段中。主題設(shè)計(jì)人員無(wú)法預(yù)測(cè)這些被剪切的內(nèi)容是什么,!這種內(nèi)容結(jié)構(gòu)的變化是否會(huì)導(dǎo)致某些 XHTML 標(biāo)記未正常關(guān)閉,??jī)?nèi)容是否會(huì)超過(guò)特定的長(zhǎng)度,使文本顯示未能填充到頁(yè)面的某些元素中,??jī)?nèi)容中是否有在頁(yè)面上無(wú)法正常顯示的特殊字符,?在某種程度上對(duì)內(nèi)容進(jìn)行限制,以及使用最大字段長(zhǎng)度和 tinyMCE 來(lái)控制用戶輸入是有幫助的,。但是,,意外情況還是會(huì)發(fā)生。

隨著在系統(tǒng)中添加更多的角色,,并根據(jù)這些角色修改用戶看到的內(nèi)容,,內(nèi)容結(jié)構(gòu)和顯示方式的不確定性就會(huì)增加。那么,,如何處理這些意外情況呢,?如果主題設(shè)計(jì)人員不可能精確地預(yù)測(cè)內(nèi)容結(jié)構(gòu)的變化,至少應(yīng)嘗試通過(guò)預(yù)期和測(cè)試預(yù)測(cè)出 80% 的情況,。

第 7 部分 中,,我們討論了為內(nèi)容的語(yǔ)義提供邏輯分隔的有效容器。對(duì)于包含靜態(tài)內(nèi)容的站點(diǎn),,只需將 idclass 屬性應(yīng)用于這些容器,,就可以對(duì)它們應(yīng)用樣式。但是,,向內(nèi)容可變的站點(diǎn)應(yīng)用樣式時(shí),,主題設(shè)計(jì)人員常常需要對(duì)模板中的內(nèi)容結(jié)構(gòu)進(jìn)行迭代,添加更多的 idclass 屬性,,或者在外邊加上額外的 DIVSPAN 元素來(lái)控制顯示方式,。通過(guò)預(yù)測(cè)變化的內(nèi)容的效果,,可以降低這些迭代的復(fù)雜程度。Zen Garden 使用的模板就是一個(gè)很好的例子,。(參見(jiàn) 參考資料。)

測(cè)試

為了測(cè)試這些預(yù)期的效果,,我們需要數(shù)據(jù),、用戶及其適用角色。用測(cè)試數(shù)據(jù)填充 Drupal 站點(diǎn)是有幫助的,,但是在開(kāi)發(fā)階段如果能夠使用真實(shí)數(shù)據(jù),,就能更好地表現(xiàn) Web 站點(diǎn)的情況。當(dāng)然,,如果您是在對(duì) Web 站點(diǎn)進(jìn)行重新設(shè)計(jì),,就可能有足夠的真實(shí)數(shù)據(jù),可以從舊站點(diǎn)遷移到 Drupal 數(shù)據(jù)庫(kù)中,。對(duì)于 IBC 站點(diǎn),,在這個(gè)開(kāi)發(fā)階段,我們要求客戶開(kāi)始輸入真實(shí)數(shù)據(jù),。這不但為我們提供了開(kāi)始進(jìn)行主題樣式設(shè)計(jì)所需的數(shù)據(jù),,而且還有以下好處:

  • 訓(xùn)練客戶使用 Drupal 管理界面
  • 對(duì)新模塊進(jìn)行測(cè)試
  • 調(diào)整內(nèi)容的結(jié)構(gòu)化布局
  • 從客戶那里獲得有價(jià)值的反饋
  • 了解客戶的操作方式

 





回頁(yè)首


結(jié)束語(yǔ)

在本文中,您學(xué)習(xí)了如何建立結(jié)構(gòu)符合語(yǔ)義的 Web 站點(diǎn),,以及使用 CSS 實(shí)現(xiàn)所需的屏幕和打印樣式,。還學(xué)習(xí)了這個(gè)團(tuán)隊(duì)如何對(duì)它的樣式表進(jìn)行組織、幾種基于標(biāo)準(zhǔn)的樣式技術(shù)和測(cè)試方法,。

本系列中的下一篇文章描述 Drupal 數(shù)據(jù)庫(kù)抽象層,,以及如何使用 DB2 Express-C 替代 MySQL 或 PostgreSQL。



參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)
  • 使用 IBM 試用軟件 構(gòu)建您的下一個(gè)開(kāi)發(fā)項(xiàng)目,這些軟件可以從 developerWorks 直接下載,。


討論


作者簡(jiǎn)介

Alister's photo

Alister Lewis-Bowen 是 IBM 的 Internet Technology Group 的高級(jí)軟件工程師,。他從 1993 年開(kāi)始作為 IBM 英國(guó)職員從事互聯(lián)網(wǎng)和 Web 技術(shù)方面的工作。Alister 后來(lái)到美國(guó)為 IBM 贊助的體育活動(dòng)的 Web 站點(diǎn)工作,,之后成為 ibm.com 的高級(jí)網(wǎng)管,。他當(dāng)前正在幫助創(chuàng)建語(yǔ)義 Web 原型??梢酝ㄟ^(guò) [email protected] 聯(lián)系 Alister,。


Stephen's photo

Stephen Evanchik 是 IBM 的 Internet Technology Group 的軟件工程師。他是許多開(kāi)放源碼軟件項(xiàng)目的代碼貢獻(xiàn)者,,其中最著名的是 Linux 內(nèi)核中的 IBM TrackPoint 驅(qū)動(dòng)程序,。Stephen 當(dāng)前從事語(yǔ)義 Web 技術(shù)??梢酝ㄟ^(guò) [email protected] 聯(lián)系 Stephen,。


Louie's photo

Louis Weitzman 是 IBM 的 Internet Technology Group 的高級(jí)軟件工程師。他從事設(shè)計(jì)和計(jì)算已經(jīng)有 30 年了,。他曾經(jīng)幫助開(kāi)發(fā) ibm.com 使用的基于 XML 片段的內(nèi)容管理系統(tǒng),,當(dāng)前正在從事將設(shè)計(jì)過(guò)程融入新項(xiàng)目的工作??梢酝ㄟ^(guò) [email protected] 聯(lián)系 Louis,。 



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多