日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks

發(fā)布時(shí)間:2025/3/21 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

大概五月份的時(shí)候,我下定決心寫(xiě)自己的博客系統(tǒng),于是斷斷續(xù)續(xù)花了近一個(gè)月的時(shí)間琢磨Nestjs,寫(xiě)完了接口部分。六月份因?yàn)楣ぷ鞯脑蚓蛿R置了,說(shuō)來(lái)也慚愧,直到九月中旬,才將它拾起。半個(gè)月后,后臺(tái)部分基本功能完成,開(kāi)始著手寫(xiě)網(wǎng)站。

一股腦兒又寫(xiě)了半個(gè)月,基礎(chǔ)功能,自動(dòng)化部署都順利完成,自我感覺(jué)很棒。然而,當(dāng)我使用手機(jī)瀏覽網(wǎng)站時(shí),總是出現(xiàn)一些不該出現(xiàn)的布局問(wèn)題。于是我寫(xiě)了一堆媒體查詢代碼,想要快速解決這個(gè)bug,卻陷入了無(wú)盡的調(diào)試環(huán)節(jié),這讓我感到無(wú)比煩躁。這時(shí)我才意識(shí)到,要想同時(shí)兼容pc端和mobile端,遠(yuǎn)比我想象的要難。

我嘗試著從網(wǎng)上尋求解決方案,經(jīng)過(guò)一通搜索,查證,實(shí)踐,并沒(méi)有找到自己特別鐘意的方案。在這中間,有一篇文章里寫(xiě)道:“兼容pc端和mobile端只有兩種辦法,一是寫(xiě)兩套CSS,二是拆成兩個(gè)項(xiàng)目獨(dú)立維護(hù)”。分為兩個(gè)獨(dú)立項(xiàng)目在前期推進(jìn)是比較緩慢,但是對(duì)后續(xù)維護(hù)比較友好,對(duì)此我深信不疑,深思熟慮之后,我決定采用第二種辦法。

工作之余又寫(xiě)了幾天,越發(fā)覺(jué)得哪不對(duì)勁,仿佛做了無(wú)用功。因?yàn)檫@個(gè)博客系統(tǒng)本身相對(duì)單一,功能并不多,如果要分為兩個(gè)子項(xiàng)目,將會(huì)產(chǎn)生許多冗余代碼,于是我索性關(guān)掉vs-code,重新整理思緒。功夫不負(fù)有心人,經(jīng)過(guò)漫長(zhǎng)地挖掘,總算是找到了較為理想的解決方案。

工欲善其事必先利其器。

基本原理

首先有三個(gè)概念必須掌握。

vw:視口單位,通常來(lái)說(shuō),100vw等于瀏覽器可見(jiàn)寬度。

rem:CSS布局單位,1rem等于html標(biāo)簽的font-size屬性值大小。

CSS locks:利用CSScalc函數(shù),給定使用該函數(shù)的屬性最小值和最大值,動(dòng)態(tài)計(jì)算出該屬性在規(guī)定的屏幕最小尺寸和最大尺寸區(qū)間內(nèi),適應(yīng)當(dāng)前屏幕大小的屬性值。在Flexible typography with CSS locks一文中,作者詳細(xì)闡述了CSS locks的由來(lái),推薦查閱。

先看案例:

p {

font-size: 16px; /* 最小字體 */

}

@media screen and (min-width: 400px) {

/* 屏幕寬度大于400px,大于640px時(shí),采用CSS locks */

p {

font-size: calc(16px + (20 - 16) * ((100vw - 400px) / (640 - 400)));

}

}

@media screen and (min-width: 640px) {

/* 屏幕寬度大于640px */

p {

font-size: 20px; /* 最大字體 */

}

}

復(fù)制代碼

利用以上CSS代碼,我們就可以做出類似效果:

從圖中可以發(fā)現(xiàn),文章段落的font-size屬性值隨著屏幕大小改變而發(fā)生有規(guī)律的變化,這種變化使得在不同尺寸的設(shè)備上,也不會(huì)減小文章的可讀性。而事實(shí)上,CSS locks 令人驚嘆的地方也不止于此,我們完全可以將它發(fā)揮在其他數(shù)值型CSS屬性(這里指類似font-size等屬性)上。

我們知道,rem單位與html標(biāo)簽的字體大小緊密相關(guān),如果我們使用CSS locks根據(jù)當(dāng)前屏幕寬度(也就是100vw)動(dòng)態(tài)計(jì)算出html標(biāo)簽的font-size屬性值,然后使用媒體查詢限制最大和最小值,這樣,在其他數(shù)值型CSS屬性中我們就直接使用rem單位。如此一來(lái),只需要少量的媒體查詢代碼,不同屏幕尺寸適配問(wèn)題就會(huì)迎刃而解。

在CSS中,其實(shí)出現(xiàn)過(guò)類似CSS locks功能的函數(shù),如clamp(),min(),max()三個(gè)函數(shù),它們的功能更加強(qiáng)大,寫(xiě)起來(lái)也更加簡(jiǎn)單優(yōu)雅,但由于目前的兼容性較差,所以不建議在實(shí)際項(xiàng)目中使用。如想深入了解,推薦張?chǎng)涡翊罄械奈恼隆私釩SS min()/max()/clamp()數(shù)學(xué)函數(shù)。這里就不再贅述了。

公式與實(shí)踐

從上文中可得出vw+rem+CSS locks方案公式如下:

CSS

[minimum size]:最小字體大小。

[maximum size]:最大字體大小。

[minimum viewport width]:最小屏幕寬度。

[maximum viewport width]:最大屏幕寬度。

html {

font-size: [minimum size];

}

@media screen and (min-width: [minimum viewport width]) {

html {

font-size: calc([minimum size] + ([maximum size] - [minimum size]) * ((100vw - [minimum viewport width]) / ([maximum viewport width] - [minimum viewport width])));

}

}

@media screen and (min-width: [maximum viewport width]) {

html {

font-size: [maximum size];

}

}

復(fù)制代碼

SCSS

利用SCSS中的Mixin指令和函數(shù)指令,增加了公式的復(fù)用性,也讓我們的代碼更加優(yōu)雅。

$properties:屬性名。

$min-screen:最小屏幕寬度。

$max-screen:最大屏幕寬度。

$min-value:屬性最小值。

$max-value:屬性最大值。

@mixin interpolate($properties, $min-screen, $max-screen, $min-value, $max-value) {

& {

@each $property in $properties {

#{$property}: $min-value;

}

@media screen and (min-width: $min-screen) {

@each $property in $properties {

#{$property}: css-locks($min-screen, $min-value, $max-screen, $max-value);

}

}

@media screen and (min-width: $max-screen) {

@each $property in $properties {

#{$property}: $max-value;

}

}

}

}

@function strip-unit($value) {

@return $value / ($value * 0 + 1);

}

@function css-locks($min-screen, $min-value, $max-screen, $max-value) {

@return calc(#{$min-value} + #{strip-unit($max-value - $min-value)} * ((100vw - #{$min-screen}) / #{strip-unit($max-screen - $min-screen)}));

}

復(fù)制代碼

針對(duì)某一個(gè)屬性我們就可以這樣寫(xiě):

p {

@include interpolate(font-size, 400px, 640px, 16px, 20px);

}

復(fù)制代碼

如果不需要限制極值,也可以單獨(dú)使用css-locks函數(shù):

html {

font-size: css-locks($min-screen, $min-value, $max-screen, $max-value)

}

復(fù)制代碼

結(jié)語(yǔ)

隨著CSS技術(shù)領(lǐng)域更新迭代,除了少數(shù)古老的瀏覽器,視口單位已經(jīng)基本兼容市面上的瀏覽器設(shè)備。顯然,采用vw+rem+CSS locks方案解決pc端和mobile端適配問(wèn)題會(huì)是目前較為理想的方案,特別是對(duì)于頁(yè)面結(jié)構(gòu)相對(duì)簡(jiǎn)單的博客系統(tǒng)來(lái)說(shuō)更是堪稱完美。具體案例可以查看我的博客小站—Freesims。

以上就是本文的全部?jī)?nèi)容,如有不正確的地方,請(qǐng)指出。

感謝閱讀,歡迎分享!

總結(jié)

以上是生活随笔為你收集整理的css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。