日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于视窗单位的排版

發布時間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于视窗单位的排版 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是視窗單位?

現在CSS中有關于視窗單位的可用種類主要有四種,他們是:

  • vw:視窗寬度的百分比

  • vh:視窗高度的百分比

  • vmin:當前較小的vw和vh

  • vmax:當前較大的vw和vh

在這種情況下,視窗,指的是瀏覽器屏幕。1vw就意味著1%的瀏覽器的寬度。100vw將意味著整個瀏覽器寬度。


視窗單位的好處在于當視窗大小改變時,他們會自動的重新計算其大小。當重新加載頁面,調整頁面大小或改變頁面方向時就會發生此現象。

因為視窗單位可以自動的重新計算,這讓創建一個始終占據四分之一頁面的組件變得十分輕松。

.component { ?width: 50vw;height: 50vh;background: rgba(255, 0, 0, 0.25)}

上面圖像顯示的就是視窗單位的縮影。現在讓我們回歸到這篇文章之中。

使用視窗單位進行排版

這里還有一個為什么要考慮使用視窗單位進行排版的原因 -?根據客戶端的瀏覽器,視窗單位會自動重新計算。這就意味著我們不需要顯式聲明媒體查詢的字體大小。

讓我們用一個例子清楚地說明這一點。

考慮下面的代碼,我在800px處將font-size的大小由16px?更改為?20px。

// Note: CSS are all written in SCSShtml {font-size: 16px; ?@media (min-width: 800px) {font-size: 20px;} }

當你看著這段代碼時,你可以在800px視窗時,立馬告訴font-size將大小由16px更改為20px。這是我們為了良好的視覺效果經常做的事情。

但是,偶爾你也會遇到這種情況,在兩個斷點處你不得不額外增加一個媒體查詢以便在不同的設備上,排版依舊保持良好。

html {font-size: 16px; ?@media (min-width: 600px) {font-size: 18px;} ?@media (min-width: 800px) {font-size: 20px;} }

雖然我們可以指定多個媒體查詢并相應設置多個字體大小,但是這通常矯枉過正,所以我們堅持三到四種尺寸大小。

但是不指定多個媒體查詢或者多個字體大小,你如何在不同情況下擁有相同效果呢?

這時候視窗單位就要發揮它的作用了,在視窗單位中設置font-size屬性,你就可以很容易的獲取一樣的效果。

請考慮下面代碼的結果:

html { font-size: 3vw; }

是不是很神奇?

不過,正如你可以看到的,視窗單位太適應屏幕大小的改變

如果你也將字體大小設置為3vw,在一個屏幕寬度為320px的設備(移動)上,你得到的文本大小將為10px。這時字體過小而不適合閱讀。另一方面,在一個屏幕寬度為1440px的設備(筆記本電腦)上,你得到的字體大小將為43px,這時,字體又太大了。

現在,我們給出了一個有趣的挑戰?- 馴服視窗字體的大小。

值得慶幸的是,這里有一個簡單的方法可以實現。我們可以設置一個最小的字體大小,然后在一個小視窗中通過多次使用calc()屬性縮放字體

就像下面代碼所示:

html { font-size: calc(18px + 0.25vw) }

這是不是看起來很酷?我第一次發現這種方法是在Mike Riethmuller的如何精確的控制響應式排版這篇文章之中。

不幸的是,我同時也意識到這種方法并不適用于所有的瀏覽器。比如,Mac上的Safari(當然Mike說盡管Windows適用)。

修補不足的方法十分簡單。我們在vw上可以結合使用百分比,以便Safari也可以實現字體縮放:

html { font-size: calc(112.5% + 0.5vw) }

Shwweeeeeet!在我們的代碼中是否可以真的一起擺脫em,rem和媒體查詢的使用?關于這一點,我迫不急切的想要知道答案!

我不得不克服的下一個挑戰是嘗試在視窗單位中用其他的排版元素(h1-h6)設置字體大小。

在視窗單位中設置其他的排版元素

我嘗試做的第一件事就是創建一個字體大小為?body?文本大小兩倍的<h1>元素。結果證實并不可以直接這么做:(

我試著將<html>中的font-size大小相乘于2,我發現這比本來的字體大小大了很多:

html { font-size: calc(112.5% + 0.25vw) }h1 { font-size: calc((112.5% + 0.25vw) * 2); }


發生這種情況的原因在于,在計算<h1>時我使用了基于百分比的font-size。當我繼承<html>中的font-size重新計算<h1>中的font-size時就會變得十分有效。

這時,如果我們添加一些數字就會變得容易想象一些。

比方說你現在的視窗大小為800px。默認的font-size大小為16px。

  • 在<html>中112.5%計算出的font-size大小為18px(112.5/100 * 16px)

  • 0.25vw計算出的值相等于2px(800px * 0.25 ÷ 100)

  • <html>中計算的font-size大小為20px?(18px + 2px)

到目前為止HTML計算是不是很好?太棒了!

我們將采用同樣的方式來解決<h1>的計算。這一次要特別注意112.5%的計算。

  • <h1>中112.5%計算出來相當于22.5px的font-size大小(112.5/100 * 20px)

  • 0.25vw相當于2px(800px * 0.25 ÷ 100)

  • <h1>的font-size大小為49px((22.5px + 2px) * 2)

不幸的是,我們要尋找的正確的<h1>大小為body的font-size大小的兩倍或者說是40px。他們是不同的 :(

這里有兩種方式可以解決這個問題,因為我們知道錯誤的引起是由于<h1>繼承了<html>的font-size大小

第一種解決的方法是在<h1>中將112.5%設置為100%:

h1 { font-size: calc((100% + 0.25vw) * 2) }

第二種方法就是確保在元素之間不繼承字體的大小。

h1 { font-size: calc((100% + 0.25vw) * 2) }p { font-size: calc((100% + 0.25vw)) }

這兩種解決方式都看起來十分變態。因此我不斷尋找更好的解決方法。

最終最好的方式就是恢復使用?rem?和?em。為什么要放棄發現的新單位呢?

html { font-size: calc(112.5% + 0.25vw) }h1 { font-size: 2em; }


既然我們談到了字體縮放問題,你可能會產生另外一個問題:"使用視窗單位時,垂直規律和模塊化會變得怎么樣呢?"

好,讓我們下面來談談他們。

視窗單位與垂直規律和模塊化

這是比較容易回答的。

你有沒有注意到視窗單位僅僅適用于設置<html>元素?其余一切還是使用rem和em來設置。

這意味著你仍然可以以同樣的方式使用em和rem單位去創建垂直規律和模塊化,就像我之前在我所知道的響應式排版一文中所說的。

什么都沒有改變!:)

Oh。在我們結束這篇文章之前還有一件事。

還有一個更大的我不得不克服的問題。就是我之前曾經提出的一個疑問:"在視窗大小為800px的情況下你如何計算vw使排版的單位大小為20px?"

這是一個很長的問題,化簡為一個單詞就是精度。換句話說,我怎樣才可以更精確的使用我想要的字體大小呢?

精度

其實,Mike已經幫我解決了這個問題。現在我只需要解釋一下這個公式的工作原理。

讓我們說說你想要的結果...

  • 當視窗大小為600px時,font-size大小為18px

  • 當視窗大小為1000px時,font-size大小為22px

首先,我們不得不將font-size(18px)轉化為百分比。第一部分的計算是這樣子的:calc(18/16 * 100%)(或者簡單的calc(112.5%))

接下來計算vw的數量。這部分的計算略微有點麻煩。

你可以通過考慮font-size(22-18)的差值來計算vw的值,除以視窗的寬度(1000-600),之后乘以100vw - smaller-viewport-width?(100vw - 600px)。

組合在一起就是:

html { ?font-size: calc(112.5% + 4 * (100vw - 600px) / 400) }

剛開始的時候這可能有點復雜,但是一旦你知道其中的組成,你就可以簡化為Sass中的mixin。

Indrek Paas已經將上面公式轉化為一個簡單的Sass mixin。這里我很開心可以使用百分比而不是像素。

超級精度

這里,你如何實現在不同的斷點,獲取你想要的視窗單位,從而實現不同的縮放比率。

這里有一個解決方案;

html {font-size: 100%;// Scales by 1px for every 100px from 600px to 1000px ?@media (min-width: 600px) {font-size: calc(112.5% + 4 * (100vw - 600px) / 400)}// Scales by 0.5px for every 100px from 1000px to 2000px ?@media (min-width: 1000px) {font-size: calc(137.5% + 5 * (100vw - 1000px) / 1000)} }

嘿,但是在現實中你不可能使用不同的比率進行縮放!這就意味著你會使用下面這個更加可為的方法:

html {font-size: 100%; ?// Scales by 1px for every 100px from 600px onwards@media (min-width: 600px) {font-size: calc(112.5% + 4 * (100vw - 600px) / 400)} ?// Sets font-size to 22px after a viewport of 1000px@media (min-width: 1000px) {font-size: calc(137.5%)} } 本文根據 @Zell 的《 Viewport Unit Based Typography 》所譯,整個譯文帶有我們自己的理解與思想,如果譯得不好或有不對之處還請同行朋友指點。如需轉載此譯文,需注明英文出處: http://zellwk.com/blog/viewport-based-typography/

總結

以上是生活随笔為你收集整理的基于视窗单位的排版的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。