rem布局

rem單位

  • rem(root em)相對(duì)單位桂躏,類似于em膘融,em是父元素字體大小
 .box {
            width: 200px;
            height: 200px;
            background-color: pink;
            font-size: 20px;
        }
        .box p {
            width: 5em;
            height: 4em;
            background-color: skyblue;
        }
 <div class="box">
        <p></p>
    </div>

可以得到以下的結(jié)果:

  • 不同的是rem的基準(zhǔn)是相對(duì)于<html>元素的字體大小
  html {
            font-size: 30px;
        }
  • rem的優(yōu)勢(shì)就在于父元素文字大小可能不一致孽锥,整個(gè)頁(yè)面只有一個(gè)<html>,可以很好的控制整個(gè)頁(yè)面的元素大小比例

媒體查詢

  • 媒體查詢(Media Query)是CSS3新語(yǔ)法
  • 使用@media查詢租幕,可以針對(duì)不同的媒體類型定義不同的樣式
  • @media可以針對(duì)不同的屏幕尺寸設(shè)置不同的樣式
  • 當(dāng)你重置瀏覽器大小的過(guò)程中,頁(yè)面也會(huì)根據(jù)瀏覽器的寬度和高度重新渲染頁(yè)面
  • 目前針對(duì)很多蘋(píng)果手機(jī)轰枝,Android手機(jī),平臺(tái)等設(shè)備都可以用到媒體查詢

語(yǔ)法規(guī)范

  • 用@media開(kāi)頭
  • mediatype媒體類型
  • 關(guān)鍵字and not only
  • media feature媒體特性组去,必須有小括號(hào)包含
@media mediatype and|not|only (media feature) {
  CSS-Code;
}

mdiatype媒體類型

  • 不同的終端設(shè)備劃分為不同的類型鞍陨,成為媒體類型
    解釋說(shuō)明
    all 用于所有的設(shè)備
    print 用于打印機(jī)和打印閱覽
    screen 用于電腦屏幕,平板電腦从隆,智能手機(jī)等

關(guān)鍵字

關(guān)鍵字是將媒體類型或者多個(gè)媒體特性連接到一起作為媒體查詢的條件

  • and:可以將多個(gè)媒體特性鏈接到一起诚撵,相當(dāng)于“且”
  • not:排除某個(gè)媒體類型,相當(dāng)于“非”键闺,可以省略
  • or:可以測(cè)試多個(gè)媒體查詢的條件寿烟,只要有一個(gè)條件成立就執(zhí)行,相當(dāng)于“或”
  • only:指定某個(gè)特定的媒體類型辛燥,可以省略

媒體特性

每種媒體類型都具有不同的特性筛武,根據(jù)不同媒體類型的媒體特性設(shè)置不同的展示風(fēng)格
暫時(shí)了解三個(gè)

解釋說(shuō)明
width 定義輸出設(shè)備中頁(yè)面可見(jiàn)區(qū)域的寬度
min-width 定義輸出設(shè)備中頁(yè)面最小可見(jiàn)區(qū)域的寬度
max-width 定義輸出設(shè)備中頁(yè)面最大可見(jiàn)區(qū)域?qū)挾?/td>
    /* 媒體查詢:@media媒體類型 關(guān)鍵字 媒體特性 */
        /* 在屏幕設(shè)備中,判斷屏幕尺寸大小等于800px挎塌,最小寬度是800px */
        @media screen and (min-width: 800px) {
        /* 背景顏色為pink */
            body {
                background-color: pink;
            }
        }

最小寬度是800px徘六,再小就沒(méi)有了pink的背景色

媒體查詢可以書(shū)寫(xiě)多個(gè),比如在寬度為600以內(nèi)是綠色榴都,601-799是默認(rèn)白色待锈,800及以上是粉色

     /* 媒體查詢:@media媒體類型 關(guān)鍵字 媒體特性 */
        /* 在屏幕設(shè)備中,判斷屏幕尺寸大小等于800px嘴高,最小寬度是800px */
        @media screen and (min-width: 800px) {
        /* 背景顏色為pink */
            body {
                background-color: pink;
            }
        }
        /* 媒體查詢可以書(shū)寫(xiě)多個(gè) */
        /* 最大寬度為600px的時(shí)候竿音,背景顏色為綠色 */
        @media screen and (max-width:600px) {
            body {
                background-color: green;
            }
        }

案例:頁(yè)面寬度改變背景顏色

  • 按照從大到小或者從小到大的思路
  • max-width和min-width都包含了等于
  • 當(dāng)屏幕小于540,背景顏色變成藍(lán)色(<=539)
  • 當(dāng)屏幕大于等于540拴驮,并且小于等于969像素的時(shí)候?yàn)榫G色(540=<x<=969)
  • 當(dāng)屏幕大于等于970像素的時(shí)候春瞬,背景顏色紅色(x>=970)
  • 為了防止混亂,按照從小到大的順序來(lái)寫(xiě)莹汤,代碼也更簡(jiǎn)潔一點(diǎn)
<style>
       /* 1.屏幕小于等于539px快鱼,背景是藍(lán)色 */
       /* 2.屏幕大于等于540像素,并且小于等于969px,背景顏色是綠色 */
       /* 3.屏幕大于等于970像素抹竹,背景是紅色 */
       @media screen and (max-width: 539px) {
           body {
               background-color: blue;
           }
       }
       @media screen and (min-width: 540px) and (max-width: 969px) {
           body {
               background-color: green;
           }
       }
       @media screen and (min-width: 970px) {
           body {
               background-color: red;
           }
       }
    </style>

原理:

媒體查詢+rem實(shí)現(xiàn)元素動(dòng)態(tài)大小變化

  • rem單位是跟著<html>來(lái)走的线罕,有了rem頁(yè)面元素可以設(shè)置不同大小尺寸
  • 媒體查詢可以根據(jù)不同設(shè)備寬度修改樣式
  • 媒體查詢+rem就可以實(shí)現(xiàn)不同設(shè)備寬度,實(shí)現(xiàn)頁(yè)面元素大小的動(dòng)態(tài)變化
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        html {
            font-size: 20px;
        }
        /* 屏幕小于640px窃判,字號(hào)為20px */
        /* 屏幕大于等于640像素钞楼,字號(hào)為30px */
        /* @media screen  and (max-width: 639px) {
            html {
                font-size: 20px;
            }
        } */
        @media screen and (min-width: 640px) {
             html {
                 font-size: 30px;
             }
        }
        .box {
            width: 100%;
            height: 3rem;
            font-size: 1.5rem;
            line-height: 3rem;
            background-color: green;
            color: white;
            text-align: center;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="box">購(gòu)物車(chē)</div>
</body>
</html>

引入資源

Less基礎(chǔ)

CSS弊端

  • css是一門(mén)非程序式語(yǔ)言,沒(méi)有變量袄琳,函數(shù)询件,SCOP(作用域)等概念
  • 需要大量書(shū)寫(xiě)看似沒(méi)有邏輯的代碼,冗余度比較高
  • 不方便維護(hù)和擴(kuò)展唆樊,不利于復(fù)用
  • CSS沒(méi)有很好的計(jì)算能力

Less簡(jiǎn)介與安裝

  • CSS擴(kuò)展語(yǔ)言宛琅,CSS預(yù)處理器
  • 為CSS加入程序式語(yǔ)言的特性。且沒(méi)有減少CSS功能
  • 引入了變量逗旁,Minxin(混入)嘿辟,運(yùn)算和函數(shù)等功能,簡(jiǎn)化了CSS編寫(xiě)片效,降低了維護(hù)成本红伦,用更少的CSS代碼做更多的事情

less中文網(wǎng)站:

http://lesscss.cn/

常見(jiàn)的CSS預(yù)處理器有:Sass,Less淀衣,stylus
Less是一門(mén)CSS預(yù)處理語(yǔ)言昙读,擴(kuò)展了CSS的動(dòng)態(tài)特性
檢查nodejs版本號(hào)

node -v

在線安裝Less

npn install -g less

檢查less是否安裝成功

lessc -v

Less使用

創(chuàng)建一個(gè)后綴名為.less的文件

Less變量

  • 指的沒(méi)有固定的值,可以動(dòng)態(tài)改變的膨桥,因?yàn)镃SS中的一些顏色和數(shù)值等經(jīng)常使用
  • @變量名:值;
    變量命名規(guī)范
    1.必須要用@作為前綴
    2.不能包含特殊字符
    3.不能以數(shù)字開(kāi)頭
    4.大小寫(xiě)敏感
    @color:pink;
    .變量使用規(guī)范
//直接使用
body {
    color:@color;
}
a:hover {
    color:@color;
}

Less編譯

  • 本質(zhì)上蛮浑,less包含一套自定義的語(yǔ)法以及一個(gè)解析器,用戶根據(jù)這些語(yǔ)法定義自己的樣式規(guī)則国撵,這些規(guī)則最終會(huì)通過(guò)解析器陵吸,形成.css文件
  • 所以:我們需要把我們的.less文件編譯生成為.css文件,才能供html頁(yè)面使用
  • 編譯方法:文件當(dāng)前文件夾下使用cmd命令:

lessc style.less > style.css

Vscode插件:Easy LESS

  • Easy LESS用來(lái)把less文件編譯成css文件
  • 安裝完畢后重啟vscode
  • 保存一下LESS文件就會(huì)自動(dòng)生成css文件

less嵌套



轉(zhuǎn)換后

如果遇到(交集|偽類|偽元素選擇器)

  • 內(nèi)層選擇器的前面沒(méi)有&符號(hào)介牙,那么他被解析為父選擇器的后代
  • 有&符號(hào)壮虫,他就被解析為父元素自身或者父元素的偽類




    轉(zhuǎn)換后

Less運(yùn)算

  • 任何數(shù)字,顏色环础,變量都可以參加運(yùn)算囚似,less提供了加減乘除算術(shù)運(yùn)算
// 運(yùn)算
html {
    font-size: 50px;
}
div {
    width: (2rem + 2px) * 2;
    height: 100px * 3;
    background-color: #999;
}
// 1.兩個(gè)參與運(yùn)算的數(shù)字,一個(gè)可以有單位线得,一個(gè)沒(méi)單位饶唤,最終的單位就是那個(gè)唯一的單位
// 參與運(yùn)算的兩個(gè)數(shù)字,兩個(gè)都有單位贯钩,最終單位取第一個(gè)數(shù)字的單位


也可以進(jìn)行聲明變量牽一發(fā)而動(dòng)全身

@fontBase:50px;
html {
    font-size: @fontBase;
}
div {
    width: (2rem + 2px) * 2;
    height: 100px * 3;
    background-color: #999;
}

less運(yùn)算符左右務(wù)必要加空格

rem適配方案

  • 讓一些不能等比自適應(yīng)的元素募狂,達(dá)到當(dāng)設(shè)備尺寸發(fā)生改變的時(shí)候办素,等比例適配當(dāng)前設(shè)備
  • 使用媒體查詢根據(jù)不同設(shè)備按比例設(shè)置html的字體大小,然后頁(yè)面元素使用rem做尺寸單位祸穷,當(dāng)html字體大小變化元素尺寸

rem實(shí)際開(kāi)發(fā)適配方案

rem適配方案技術(shù)使用(市場(chǎng)主流)

方案一:

  • less
  • 媒體查詢
  • rem
    方案二:
  • flexible.js
  • rem
    總結(jié):
    1.兩種方案現(xiàn)在都存在
    2.方案2更簡(jiǎn)單性穿,現(xiàn)階段無(wú)需了解里面的JS代碼

rem實(shí)際開(kāi)發(fā)適配方案1

rem+媒體查詢+less技術(shù)
1.設(shè)計(jì)稿常見(jiàn)尺寸寬度

設(shè)備 常見(jiàn)寬度
iPhone4.5 640px
iPhone678 750px
Android 常見(jiàn)320px,480px雷滚,540px需曾,600px,720px祈远,768px呆万,800px,1080p

一般情況下车份,以一套或者兩套效果圖適應(yīng)大部分的屏幕谋减,放棄極端屏或者對(duì)他進(jìn)行優(yōu)雅降級(jí),犧牲一些效果躬充,現(xiàn)在基本以750px為準(zhǔn)

動(dòng)態(tài)設(shè)置html標(biāo)簽font-size大小
①.假設(shè)設(shè)計(jì)稿是750px
②.假設(shè)把整個(gè)屏幕分為15份(劃分標(biāo)準(zhǔn)不一樣也可以是20份或者10等份)
③.每一份作為html字體大小逃顶,這里就是50px
④.那么在320px設(shè)備的時(shí)候,字體為320/15,21.33px
⑤.用頁(yè)面元素的大小充甚,除以不同的html字體大小會(huì)發(fā)現(xiàn)他們比例還是相同的,比如750px為標(biāo)準(zhǔn)設(shè)計(jì)稿
比如用750為標(biāo)準(zhǔn)設(shè)計(jì)稿:
①.一個(gè)100*100像素的頁(yè)面元素在750屏幕下霸褒,就是100/50轉(zhuǎn)為rem也就是2rem * 2rem伴找。比例為1:1
②.320屏幕下,html字體大小為21.33也就是2rem=42.66px废菱,此時(shí)寬和高都是42.66但是寬和高的比例還都是1:1,
③.但是已經(jīng)能實(shí)現(xiàn)不同屏幕下技矮,頁(yè)面元素盒子等比例縮放的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 媒體查詢?cè)O(shè)置不同屏幕下的html的字號(hào) */
        /* 設(shè)計(jì)圖參考750px */
        /* 將屏幕寬度劃分為15份 */
        /* 字號(hào) = 屏幕寬度/15 */
        @media screen and (min-width: 320px) {
            html {
                font-size: 21.33px;
            }
        }
        @media screen and (min-width: 750px) {
            html {
                font-size: 50px;
            }
        }
        /* 頁(yè)面中元素大小時(shí),有一個(gè)參考殊轴,參考我們的750px屏幕的字號(hào) */
        /* 寬高為100*100px的盒子 */
        .box {
            width: 2rem;
            height: 2rem;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

元素大小取值方法:
①.最后的公式:頁(yè)面元素的rem值=頁(yè)面元素值(px)/(屏幕寬度/劃分的份數(shù))
比如:
頁(yè)面寬度為750px衰倦,分為15份,一份50px旁理,一個(gè)盒子的寬高都是100樊零,那么rem值=100/50=2rem
②.屏幕寬度/劃分的份數(shù) 就是html font-size的大小
③.或者:頁(yè)面元素的rem值=頁(yè)面元素值(px)/html font-size字體大小

flexible.js

手機(jī)淘寶團(tuán)隊(duì)推出的簡(jiǎn)潔高效,移動(dòng)端適配庫(kù)
在js里面進(jìn)行了處理孽文,不需要再寫(xiě)不同屏幕的媒體查詢
原理:把當(dāng)前設(shè)備劃分為10等份驻襟,不同設(shè)備下,比例還是一致的
我們只需要完成當(dāng)前設(shè)備的html字號(hào)就行了
比如:
當(dāng)前設(shè)計(jì)稿是750px芋哭。那么我們只需要把html字號(hào)設(shè)置為75px(750 / 10)就行
里面的rem值:頁(yè)面元素的px值 / 75
剩余的沉衣,讓flexible.js進(jìn)行計(jì)算

github地址:

https://github.com/amfe/lib-flexible

不需要再手動(dòng)書(shū)寫(xiě)媒體查詢語(yǔ)句

更改flexible.js默認(rèn)字號(hào)

在引入的CSS文件內(nèi),使用自己寫(xiě)的媒體查詢進(jìn)行聲明:

@media screen and (min-width:750px) {
  html {
      font-size:75px !important;
    }
}

進(jìn)行!important權(quán)重提高是因?yàn)閔tml字號(hào)是行內(nèi)樣式减牺,權(quán)重很高豌习。

VScode插件:cssrem

改更默認(rèn)字號(hào)

簡(jiǎn)化計(jì)算工作


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末存谎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子肥隆,更是在濱河造成了極大的恐慌愕贡,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷屿,死亡現(xiàn)場(chǎng)離奇詭異固以,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嘱巾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)憨琳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人旬昭,你說(shuō)我怎么就攤上這事篙螟。” “怎么了问拘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵遍略,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我骤坐,道長(zhǎng)绪杏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任纽绍,我火速辦了婚禮蕾久,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拌夏。我一直安慰自己僧著,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布障簿。 她就那樣靜靜地躺著盹愚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪站故。 梳的紋絲不亂的頭發(fā)上皆怕,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音世蔗,去河邊找鬼端逼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛污淋,可吹牛的內(nèi)容都是我干的顶滩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼寸爆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼礁鲁!你這毒婦竟也來(lái)了盐欺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仅醇,失蹤者是張志新(化名)和其女友劉穎冗美,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體析二,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粉洼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叶摄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片属韧。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛤吓,靈堂內(nèi)的尸體忽然破棺而出宵喂,到底是詐尸還是另有隱情,我是刑警寧澤会傲,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布锅棕,位于F島的核電站,受9級(jí)特大地震影響淌山,放射性物質(zhì)發(fā)生泄漏裸燎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一艾岂、第九天 我趴在偏房一處隱蔽的房頂上張望顺少。 院中可真熱鬧,春花似錦王浴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至袱蚓,卻和暖如春钞啸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喇潘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工体斩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颖低。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓絮吵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親忱屑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹬敲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容