成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

網頁設計布局之垂直網格設計

2024-03-27    分類: 網站建設

網頁設計布局中一直比較流行網格對齊,但只是針對水平的對齊,很少或者沒有涉及垂直對齊,這篇文章很詳細的講解了垂直網格,乃至基線對其的相關,而css3中的多列布局的也使其顯得更為重要,因此還是很有必要去了解學習,至少也是一種思路。

這或許是因為缺少基線網格的理解和欣賞,更或者是因為基線網格是出了名的難以實現, 迄今為止還沒有人拿著藍圖讓它成功實現。 有些人甚至認為基線在網絡上是多余的,基線作為一種排版術語和網絡上的行為,在網絡上遵循的規(guī)則有別于用于印刷的,line-height和真正的行距之 間令人沮喪的差異就是最明顯的例子。 目前,無論怎樣,讓我們先假設基線至少在某種程度上對于來說網頁設計師是一種有用的工具。但是它到底是什么樣的一種工具,在我們手上有什么可以自由使用的 工具來實現它,并且最重要的是,這到底值不值得。

垂直網格和模式識別在數學計算和為實現基線對齊而進行將在的輕移之前,不妨來了解其根本的本質:垂直網格。在了 解為什么的同時,也就有了很好的準備和更大的動力來著手解決怎樣去實現基線對齊,這個有時讓人沉悶而又著迷的問題。 垂直網格,可以簡單的理解為涉及到結構高度和垂直排列元素之間的間距,或許更為普遍點來說是內邊距(padding),外邊距(margin)和行高 (line-height)。正如水平網格通過一個預設的單元尺寸約束布局而達到整齊和諧的效果一樣,垂直網格也在用戶下滾的時候通過一致的,可預測的措 施提供固定結構的內容。

網格不僅在水平方向有用,在垂直方向同樣有用

為什么垂直網格重要?是因為垂直網格與我們大腦如何工作相關,也與我們如何通過模式識別來解析周圍世界相關。即 使不再深入這個話題(其他比我聰明的人更適合這個任務),也可以說模式識別容許人類大腦在模式庫中儲存相似或者相同的印象(譬如基本的形狀和顏色),并在 遇到新的刺激的情況下通過模式庫檢索來快速分析。這也是為什么我們的閱讀的時候不去注意當個獨立的字母,反而在一瞬間即可認出整個單詞(從我們大腦記憶當 中拿出以前相同模式的實例),這同樣也是為什么我們能夠很快認出當個的字母(”A” ”B” “C” …),即使字體、尺寸和顏色發(fā)生變化——其基本的形狀已經存儲在我們大腦的模式庫。

一旦任何類型的刺激都不能匹配到你之前存儲的模式,這就會促使大腦在新的記憶中存入新的模式,這反過來需要更多的腦力消耗——而這就是結構和網格 (無論是水平還是垂直)設計的重要之處,接下來,想象一個有一致段落間距為X的簡單布局。在第一處分析過之后,作為同樣的模式,你的大腦會立即認出其他所 有的相同段落。但如果相反,同樣的布局中元素之間有著不同的間距,讀者的大腦要分析所有獨立的元素才能理解他們的意思。用另一句話來說:大腦需要分析的形 狀越多,它所需時間便越長。

不規(guī)則的左邊比右邊需要更多的腦力消耗

任何不規(guī)則的形狀都會打斷先流水般涌出的模式識別(因此會浪費一部分本應該用于欣賞優(yōu)秀內容的腦力活動),而一種規(guī)則的,一致的并且可以預期的結構將會使你的設計更易讀也能理解認知你的設計。建立一種固定的基線網格便是實現它的一種很好的方法。

此外,通過基本一個每個垂直(和水平)間距都一致,每一個元素有著預設單元尺寸的系統不僅消除了上述隨意的不統一性,也使得設計師的工作更加容易, 設計師只需在總框架總決定基本的結構。建立一個標準,比如,頭部下面總有兩個基線的白色間距,每個盒子都有三個基線空間的內邊距,在我們的布局中增加邏 輯,這不僅易于設計,易于實現,更重要的是易于理解。

現在,如果垂直網格還像一個抽象概念,基線的另一個優(yōu)點——多列水平對齊——就顯得更容易理解。這在印刷設計中 更加常見,特別是雜志和報紙,經常使用多列布局,相鄰段落(或者頭部)若基線對齊的很好會令閱讀沉浸而歡快,一旦對齊的不好或者根本沒有對齊閱讀便被煩人 的打斷。這種來源于基線對齊的安靜的排版展現了一種視覺自信,一個看不見支架支撐著頁內所有的元素,讓讀者潛意識的安心下來。一本左手頁每一行都對齊相對 右手頁的書讓人很容易感覺到信任,而相反若是根本對齊的書籍,這種信任則相對少的多。

多列水平對齊

line-height的問題

傳統意義上,基線是指大部分字母所“坐落”其上的一條看不見的線,每條基線之間形成基本的基線網格,正如之前所討論的,基線不但形成垂直網格,而且 會使相鄰列之間水平對齊。一旦定義好了基線網格,接下來要做的便是強制所有的元素對齊,以此來使得成行的文本,邊框,圖片或者盒子元素總是匹配對齊到相同 的垂直結構。

問題是,像在InDesign中能夠讓你點擊按鈕(準確的開啟和關閉網格)便能輕松調整形狀來對齊網格的工具,對應到css中只能通過控制調整行高 (line-height),內邊距(padding),外邊距(margin),大?。╯ize)——其中任何的變動都可能會引起元素總高度的變化。

傳統的基線是大部分字母所“坐落”其上線,并且基線之間的高度便是元素的總高度。

更糟糕的是,css中的line-height屬性并沒有嚴格意義上基線的概念,并且每個成行的文本都大致處于元素總高度的中間。這就意味著基于不同樣式和字體的文本精確對齊(基線對齊)需要進一步手動,費時的調整和像素級的輕移。

因此,我們如何著手開始實施css的基線?因為缺少原生的基線語法,快速到位或者瀏覽器功能性的強迫垂直對齊,我們留給以后的實驗。我們先開始最基本的css方法。

好的方法:基本的css基線

迄今為止,尚無形成統一的正確的方法來實現css基線,有的人只要使行高和間距遵循一套規(guī)范便已滿足,其他人則更為制作和細致——無論怎樣——只有 每個成行的文本都漂亮的“坐落”在基線上,圖片,邊框,盒子和其他元素都完美的對齊相同的網格才能滿足。對所有人來說的好消息是:基本的css基線真的一 點都不難。通過一些預先的設計決策(和堅持),它們只需要一點點的基礎數學。

定義你的基線,最好是從你所使用的最小文本開始,大多數是你的body文本,基于此再往上計算。在我下面的例子中,我使用14px的font- size配以22px的line-height,也就是22px是我的基線之間的高度。這樣定義的結果是所有的line-height和所有元素的總高 (包括邊框、內邊距和外邊距)必須是22px的倍數,如下:

h1 {

font-size: 40px;

line-height: 44px;

margin-bottom: 22px;

}

p {

font-size: 14px;

line-height: 22px;

margin-bottom: 22px;

}

現在定義的line-height和font-size并不是最優(yōu)的,因此為了可伸縮性,將其轉換為em。如此一來,會使得代碼有點難以閱讀,但是所用的數學相當的簡單——只需要記住在更改font-size的使用重新計算line-height。

h1 {

font-size: 2.5em; /* = 40px/16px */ line-height: 1.1em; /* = 44px/40px */ margin-bottom: 22px;

}

p {

font-size: 0.875em; /* 16px is the default em size */ line-height: 1.5714285714285714em; /* = 22px/14px */ margin-bottom: 22px;

}

注意,在通篇我都會以px為單位提及font-size和line-height,這樣能更加清楚的表明其“物理”大小和所給例子中的比例。然而,所有的代碼,我們都會轉換成em。

利用可見的網格(很多人使用png或者gif的背景圖,其他人使用諸如Baseliner的工具),我們可以檢測所有樣式的對齊。在此我們發(fā)現成行 的文本并沒有“坐落”在基線上,相反漂浮在基線之間。在此階段這并沒什么要當心的——我們可以簡單的便宜我們的背景圖片,或者在body上放增加內邊距 (padding)來修復。

一個可視的網格將對設計過程很有幫助

到目前為止一切順利,但我們的代碼仍然相當的基礎。但我們包含更多的屬性——比如上邊框——給所有的元素,將會發(fā)生什么?自然地,屬性值需要調整,使之合并邊框高度之后的總高度仍然是基線之間高度的倍數。

h1 {

border-top: 3px;

padding-top: 22px;

margin-bottom: 19px; /* 22px-3px */}

注意,怎樣使得3px的border-top和19px的margin-bottom之和等于基線之間高度22px

使用SASS或者REM

盡管這的確不是什么高科技,但在復雜的網站中,特別是使用相對單位的時候上述的數字相加將會是個不小的挑戰(zhàn)。如果你愿意犧牲em的可伸縮性,堅持使 用px為單位,像SASS之類的預編譯語言可以解決一部分麻煩。使用SASS我們可以將基線之間高度定義為一個變量(在我的事例中 為$baseline),并使用一次方程去定義它的倍數。以此來使得整個過程變得非常簡單,也使得css更容易閱讀。在一般的過程中若你想重新 dinginess你的基線之間高度,你只需改動一個地方。盡管下面我的示例中使用Sass,當使用rems也是一樣的道理——只在一處定義你的基線間高 度,然后再整個代碼中生效。

$baseline: 22px;

.box {

padding-top: 3px;

height: $baseline*15;

}

h1 {

font-size: 40px;

line-height: $baseline*2;

margin-bottom: $baseline;

}

p {

font-size: 16px;

line-height: $baseline;

margin-bottom: $baseline;

}

在圖片和復雜的布局上使用JavaScript

在簡單的文字排版布局上使用基線網格要相對簡單點,但我們必須保證其他的元素相圖片也要對齊網格。對于容器,按鈕,和網頁分界線來說,通過css讓 任何的單元都是基線間高度的倍數,這是一個很重要的約定。但從另一個方面來說,圖片很少遵守這一約定,其一般為一系列任意的高度,因此在這樣的例子中,少 量的JavaScript便可以幫我們的大忙。我不會在此深究,但是jQuery的插件Baseline.js和Matthew Wilcox關于垂直網格的文章倒是值得一看。如果你正在進行一個復雜的布局,無妨看看FtColumnflow——一段“修復css多列布局缺陷”的代 碼,它廣泛使用在音樂《金融時報》的web app上,并且如果你想找一個更為健壯的方案,它或許更加合適。

上述基礎的方案。通過保證我們的行高,內邊距,外邊距,高度——任何的屬性——相加和總是等于基線間高度的倍數,就可以保證我們整個垂直網格不受影響,這很簡單,對吧?

當然,如果接下來不繼續(xù)深入,你也不會看這篇文章了。

很爛的方案:任意可變式

壞消息是,大多數的設計師在受限的條件下工作,有時一個22px的基線間的高度對他們來說更像是一個令人煩惱的阻礙,而不是有用的約束。例如,遵循 黃分割的規(guī)則,一個16px的段落主體部分可以推導出26px的段頭(盡管下部段落主題可能適用高于20px的任何值,這取決于字體)。保持我們的基線間 高度為22px,你或許會發(fā)現一個簡單的22px的基線間高度的行距太窄了以至于不能舒適的閱讀,然而一個雙倍的基線間高度又顯得太寬了,只有在h2呈兩 行顯示的情況下才會有這樣的爭論,當然理論上可以假設列的寬度足夠的長,這樣折行就永遠都不會發(fā)生,嗯哼,這只是理論上。

h2要么小的尷尬要么行高太大

如果在此有一種快速到位的方法,就不會發(fā)生上述的問題,就像我們可以簡單的將h2不應用基線網格,看看緊隨它的短多是不會魔術般的落到正確的位置。遺憾的,并不存在這樣可行的魔法,我們只能實事求是的去思考找出一種解決方案。

在文章的開始我曾推薦從你有著最小文本的line-height開始定義你的基線間的高度,就像body的文本。正如我們所看到的,一個固定 的,22px(或者你body line-height的任意值)的最小單元會使得固定字體的line-height值變得很不合適。但如果讓我們的原始的基線間高度減半會怎樣?技術上 來講我們的body的文本就會有兩個基線間高度的line-height,但這只是紙上談兵。在大多數的示例中,這樣帶來的可變性和排版自由的結果是值得 的,我們使用黃金分割的比例來快速的定義一些h元素的大?。ㄋ纳嵛迦?,保持em值整潔),我們可以很容易的看到每次值得增加都會有一個合適的line- height值,例如:16px/22px ,28px/33px,40px/44px等。

h1 {

font-size: 2.5em;

line-height: 1.1em;

margin-bottom: 22px;

}

h2 {

font-size: 1.625em; /* 26px/16px */ line-height: 1.2692307692307692em; /* 33px/26px */ margin-bottom: 11px;

}

h1, h2, 和 p都對齊了基線網格

丑陋的方案:偏移的方式

在我繼續(xù)之前,我必須承認的是,下述的內容完全是實驗性的甚至你們其中一部分人甚至會認為它實踐起來也很糟糕。但如果你準備繼續(xù)遷就我,即使它變得丑陋也繼續(xù)閱讀。好吧,我說的丑陋是源于“代碼整潔”的觀點?;蛟S從設計的角度來說,它可能確實很漂亮。

基于上述的基本的方案和帶一點實用性(可選)的隨意可變得方案,現在我們有知識和工具去改善大多數布局的基線網格,但是對于真正基線卻沒有實現。正 如前面所提到的,css中l(wèi)ine-height計算的方式意味著字符大約處于行距的垂直中點,而不是字符的下邊緊挨著基線(先InDesign和 Quark)。許多人理所應當的認為這就這是應該的。這就是css中iine-height工作的方式,我們沒法改變。沒錯,但是我們的眼睛并不知道 css的概念。我們的眼睛并不習慣去按照x軸中心去掃描成行的文字——它們習慣于跟隨字符的地步,基線來閱讀,并且當相鄰行錯位的時候可讀性就會變差。

來看一下下面的額例子:

h1 {

font-size: 2.5em;

line-height: 1.1em;

margin-bottom: 22px;

}

h2 {

font-size: 1.625em; /* 26px/16px */ line-height: 1.2692307692307692em; /* 33px/26px */ margin-bottom: 11px;

}

p {

font-size: 0.875em;

line-height: 1.5714285714285714em;

margin-bottom: 11px;

}

p.intro {

font-size: 1.125em; /* 18px/16px */ line-height: 1.22222222em; /* 22px/16px */ margin-bottom: 22px;

}

在相鄰兩列的情況且,盡管基線已經正確的貫穿介紹段落,但介紹段落的字母的底部(下圖紅線)并沒有對齊和主段落對其,這正是因為字體計算之后的line-height所導致。

css中l(wèi)ine-height倒是夸列并沒有對其

現在到了它變丑陋的地方。為了能夠在所有列中的成行文本都對齊(當然是最重要的一點是從基線網格開始),我們必須手動偏移樣式。一個簡單的方法是增加padding-top的值直到字符緊挨到基線,并且相應調整margin-bottom來彌補增加的值。

h1 {

font-size: 2.5em;

line-height: 1.1em;

padding-top: Xpx; /* This requires trial and error, as X depends on your font and line-height */ margin-bottom: 22px-Xpx;

}

h2 {

font-size: 1.625em; /* 26px/16px */ line-height: 1.2692307692307692em; /* 33px/26px */ padding-top: Xpx;

margin-bottom: 11px-Xpx;

}

p {

font-size: 0.875em;

line-height: 1.5714285714285714em;

padding-top: Xpx;

margin-bottom: 11px-Xpx;

}

p.intro {

font-size: 1.125em; /* 18px */ line-height: 1.22222222em; /* 22px */ padding-top: Xpx;

margin-bottom: 11px-Xpx;

}

混亂?也許是的。確實乏味。但同時也沒有什么能像施了魔法般的讓基線完美的對齊復雜布局一樣令人欣喜而愉悅了。

所有的元素多列對齊。

噓。如果你仍然還在閱讀,或許你要么是受虐狂,要么是對細節(jié)有著病態(tài)的迷戀,而對于后者,恭喜你,毫無疑問你的基線就像外墻的磚一樣牢固。

這值得嗎?

下面是我們所有的。基礎css的基線,相當的簡單,只需要不多的數學和組織即可改進你的布局。而在天平的另一端,我們可以手動的調整padding 和margin值來模擬像打印設計中精確的基線,這種概念無疑會讓純css主義者面帶愁容。更實在的問題當然是,手動的偏移樣式對視覺效果帶來好處是否值 得。在某種情況下,比如設計驅動的項目和微型站點中,這確實值得。

其他情況,大部分的情況是,對于更為復雜的站點(你的項目經理會絞盡腦汁想知道你為什么需要花那么長的時間來構建初始模版)或者由數個開發(fā)者維持同樣的代碼的協作性項目,這樣確實不值得。我們需要面對的是——我們所談論的在某些極端的例子中不僅會增加體力勞動,而且會讓代碼變得更為負責和難以維護。在一個足夠的大的項目中甚至會影響你站點的加載時間。

但是想想看,僅僅是幾年前,從行業(yè)領袖到黑客很少有人提倡并不討巧的“sliding doors”技術,但現在css3已經讓它變得司空見慣。使用兩個div而不是一個來實現圓角這是否值得?很顯然,對一些人來說是值得的——但其他人認為 就是浪費時間,導致了實施的困難和語義上有缺陷的代碼。但是關鍵的一點是:如果沒有人嘗試如此勞力和代碼密集的技術,我們可能不會有成熟語法的技術時代 了。

實驗性的,糟糕的體驗,hacks,丑陋的代碼——無論我們怎樣稱呼它——它已經推出了,并且將會繼續(xù)推出,我們的語法會改善,我們將使用新的工具來創(chuàng)建和發(fā)布下一代的在線內容。為了回應Mark Boulton的“若css能夠無痛的創(chuàng)建基線網格這將會有多酷”無論你的執(zhí)念有多強——無論你的字符是緊挨著基線或者懸浮在基線之間——垂直網格都會是一個重要的思路,使用任意本文所列的方法都會給你一個滿意的基線網格。

當然,會有一些例子比較難以實施網格的約束,像一些元素如,題注,導航或者列表項目好像不能正確的對齊到預先定義的結構中。在這些例子中,需要注意 的是一些妥協并不是世界末日。一些設計時,像杰出的設計時Khoi Vinh,認為基線在你內容主體的上下文才最為重要,一些次要的元素可以在不破壞布局的情況下不遵守基線對齊。

希望能夠理解的是在此并沒有正確或者錯誤的實現基線的方法,這也會激勵你在將來能夠后在你的項目中嘗試,在此我也鼓勵任何一個喜歡排版的人貢獻這個正在進行的項目,能在未來的的網頁設計中讓垂直網格和水平網格同等重要。

本文來源于成都網站建設公司與成都網站設計制作公司-創(chuàng)新互聯成都公司!

文章名稱:網頁設計布局之垂直網格設計
分享路徑:http://jinyejixie.com/news14/322114.html

成都網站建設公司_創(chuàng)新互聯,為您提供網頁設計公司網站策劃、軟件開發(fā)、手機網站建設、網站排名企業(yè)網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都app開發(fā)公司
柳河县| 云霄县| 商南县| 石楼县| 陆川县| 榕江县| 红安县| 霍州市| 湄潭县| 乌兰浩特市| 普兰县| 浦江县| 息烽县| 津南区| 九龙坡区| 建瓯市| 犍为县| 深州市| 临湘市| 淳化县| 喀喇沁旗| 南丹县| 靖边县| 明星| 琼海市| 大渡口区| 香港| 连州市| 慈利县| 吉水县| 德化县| 克什克腾旗| 长岛县| 安达市| 环江| 鄂温| 鄂尔多斯市| 新晃| 马关县| 大田县| 阿瓦提县|