postcss-pxtorem實現頁面自適應的原理

  1. 先聲明一點這玩意本身不能實現哈,他只是一個工具,更是一個postcss的插件 幫助我們從px轉化成為rem
  2. 比如我們的代碼
div {height: 100px;width: 100px;
}

經過這個插件轉化之后變成
假設變成下面這樣哈

div {height: 1rem;width: 1rem;
}

其他沒啥子太大作用

下面請允許我跑題講講其他的知識
比如 750的設計稿上 有寬度 375px寬度的元素 那么它就會占用設備寬度的一半
如果這個設計到了 375px的設備上 我們再設置 375px的話 那就會占滿整個設備了。

那么問題來了 有沒有什么單位 可以讓我在這兩上面實現同樣的效果呢
當然有了。我們直接設置 百分之50不就行了嘛

聰明的boy,但是今天不說這個百分比寬度 也不說那個視口寬度單位
今天講rem這個單位
rem 是 CSS 中的一個長度單位,全稱是 “root em”。它是相對于根元素(即HTML元素)的字體大小來計算的。例如,如果 HTML 元素的字體大小是 16px,那么 1rem 就等于 16px。如果 HTML 元素的字體大小改變,那么使用 rem 作為單位的元素的大小也會相應地改變。

看了上面介紹 我在想 我們可不可以這樣做
在750px設計稿上 設置一個 1rem寬度的元素。跑到375px上面也是1rem但是他倆的展示效果是一樣的

舉個例子哈 750上面 假設 1rem = 100px
那么要想實現同樣的效果那么 我們在 375設備上 就需要 1rem = 50px

這個怎么做到呢 我們就通過調整 根元素的字體大小來來實現

在750設備上

htmlDom.style.fontSize = 100 + 'px'

在 375設備上

htmlDom.style.fontSize = 50 + 'px'

有童鞋會有疑問 那么我其他的設備 怎么辦 總不能一個設備寫一個這個吧
嘿嘿 這樣就需要引入一個 比例了 我們固定好一個比例 根據我們設計稿的寬度尺寸
比如是 750的 那么scale比例就是

假設 100px = 1rem 那么 750px 就是 7.5rem了

 const scale = 750 / 100console.log(scale) // 輸出 7.5

這樣話 在375的設備上就是

// 輸出 50px

htmlDom.style.fontSize = 375 / 7.5 + 'px' 

如果設備寬度是 420,那么

htmlDom.style.fontSize = 420 / 7.5 + 'px' = '56px'

上面其實我們可以提取出來一個專門處理的函數

// 按照設計稿 375px計算  1rem 16px 那么 如果設備是750px的話 那么 1rem就是 32pxfunction setRem(designWidth = 750) {const scale = designWidth / 100const htmlDom = document.querySelector('html')const htmlWidth = document.documentElement.clientWidth || document.body.clientWidthhtmlDom.style.fontSize = htmlWidth / scale + 'px'}window.onload = function() {setRem()}window.onresize = function() {setRem()}

重新回到我們的postcss-pxtorem哈 我們在設計的時候總不能自己一直在哪里算吧 如果,比如 設計稿寬度 20px 我們還需要自己去手寫或者計算多少rem 多費時間啊
那么有沒有一個插件 我們可以自己手寫px它自動根據我們設置的給轉化成rem這樣多爽
那么它來了
怎么用呢。和webpack一樣需要我們安裝一些東西哈
首先在我們的html文件目錄下 (我這個可不是基于webpack哈)

npm init -y
npm i postcss postcss-cli -D
npm i postcss-pxtorem -S

然后在package.json同級別目錄下創建一個 postcss.config.js

module.exports = {plugins: [require('postcss-pxtorem')({rootValue: 100,propList: ['*'],minPixelValue: 2 // 設置最小的轉換數值,如果為1的話,只有2px以上的值才會被轉換}),// 其他插件...],};

在package.json文件配置下

"scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "postcss src/style.css -o dist/style.css"},

運行 npm run build
在src/style.css

div {height: 200px;width: 200px;background-color: #f00;
}
div p {height: 1px;width:  1px;
}

看下效果哈
在這里插入圖片描述
是不是轉化成功了 嘿嘿
關注我 持續更新 前端知識

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207722.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

P1046 [NOIP2005 普及組] 陶陶摘蘋果題解

題目 陶陶家的院子里有一棵蘋果樹,每到秋天樹上就會結出 1010 個蘋果。蘋果成熟的時候,陶陶就會跑去摘蘋果。陶陶有個 3030 厘米高的板凳,當她不能直接用手摘到蘋果的時候,就會踩到板凳上再試試。 現在已知 1010 個蘋果到地面的…

Spring全面詳解

目錄 1. Spring 概述 1.1 Spring是什么 1.2 Spring的作用 1.3 Spring IoC是什么 2. Spring 快速入門 3. Spring Bean 3.1 的實例化方式 空參構造器 3.2 的屬性注入 全參構造器注入 setter方法注入 策略模式 3.3 注解管理 3.4 注解方式的屬性注入 1. Spring 概述 …

奕碳科技亮相COP28:展現中國智慧,引領全球碳減排新篇章

11月30日,聯合國氣候變化框架公約第28次締約方大會 (COP28) 在阿聯酋迪拜開幕。COP28是全球氣候治理的重要盛會,匯聚了世界各國領導人、企業界和科學界代表,共同探討和制定應對全球氣候變化的策略與行動計劃。在這樣的背景下,企業群體的積極參…

跨境電商系統搭建 無貨源系統對接API 反向代購系統

跨境電商系統是為國外的客戶代購中國商品的系統,系統實現與國內電商API對接,客戶可直接在系統中搜索國內電商平臺的商品。查看演示網站 一級功能二級功能 標準版 高級版 企業版 企業旗艦版 大客戶尊享版 標準版高級版企業版企業旗艦版大客戶尊享版 前臺主…

shell常用組合命令整理

shell常用組合命令整理 rm -f 是一個用于在Unix/Linux系統中刪除文件的命令。這個命令具有以下特點: -f 選項表示“強制”(force),即強制刪除文件而不提示用戶確認。使用 -f 選項時,rm 命令不會詢問用戶是否確定刪除&…

2023.12.7 關于 MySQL 事務詳解

目錄 事務的四大特性 原子性 一致性 持久性 隔離性 事務并發執行 臟讀 不可重復讀 幻讀 四個隔離級別 read uncommitted read committed repeatable read serializable 事務的四大特性 原子性 一個事務中的所有操作,要么全部完成,要么全部…

Java數據結構之《鏈式二叉樹的創建及遍歷》(難度系數100)

一、前言: 這是懷化學院的:Java數據結構中的一道難度偏難(偏難理解)的一道編程題(此方法為博主自己研究,問題基本解決,若有bug歡迎下方評論提出意見,我會第一時間改進代碼,謝謝!) 后面其他編程題…

視頻剪輯:視頻轉碼實用技巧,批量將MP4轉為MP3音頻

隨著數字媒體設備的普及,視頻和音頻文件已成為日常生活中的重要組成部分。有時,可能要將MP4視頻文件轉換為MP3音頻文件,以提取其中的音頻內容或者進行其他處理。這是耗費時間的任務,那要如何操作呢?本文詳解云炫AI智剪…

TypeScript中泛型對象、泛型類

一. 概覽 本文詳細介紹泛型中泛型對象和泛型類的使用,結合實際應用場景,加深對泛型的理解、使用。 二. 泛型對象 舉個例子 const test {a: 1,b: 1 }一個類型有沒有一種可能讓我么在定義的時候傳入一個類似于變量的形參,在使用的時候傳入…

Jtti:香港云服務器如何實現遠程連接?

云服務器具有靈活擴展、高可用性、易于管理和數據安全等優點,因此被廣泛應用于各種業務場景。然而,對于初次使用云服務器的用戶來說,如何實現遠程連接可能是一個難題。本文將詳細介紹云服務器實現遠程連接的步驟和注意事項,幫助用…

教你pycharm運行Django第一個項目

文章目錄 前言搭建Django:1.新建Django項目:2.為Django項目指定遠程中創建的虛擬環境下的python解釋器:3.配置ubuntu的端口轉發(添加端口號為1234的端口):關于Python技術儲備一、Python所有方向的學習路線二、Python基…

循環單向鏈表與約瑟夫問題

循環鏈表介紹 先不急著看約瑟夫問題是什么,先了解循環鏈表的結構,那什么是循環鏈表? 循環,顧名思義,從鏈表中第一個節點出發,還會遇到第一個節點,形成循環的一環。也就是說鏈表中最后一個節點…

python 使用 watchdog 實現類似 Linux 中 tail -f 的功能

一、代碼實現 import logging import os import threading import timefrom watchdog.events import FileSystemEventHandler from watchdog.observers import Observerlogger logging.getLogger(__name__)class LogWatcher(FileSystemEventHandler):def __init__(self, log_…

《opencv實用探索·十五》inRange二值化圖像

opencv接口如下: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);函數實現二值化功能,主要是將在兩個閾值內的像素值設置為白色(255),而不在閾值區間內的像素值設置為黑色&am…

一篇文章帶你快速入門 Nuxt.js 服務端渲染

1. Nuxt.js 概述 1.1 我們一起做過的SPA SPA(single page web application)單頁 Web 應用,Web 不再是一張張頁面,而是一個整體的應用,一個由路由系統、數據系統、頁面(組件)系統等等&#xff0…

什么是HTTPS加密協議?HTTPS安全傳輸原理,SSL和TLS介紹,NGINX如何配置SSL證書

HTTPS介紹 HTTPS是超文本傳輸協議(HTTP)的安全版本。它使用SSL(安全套接層)或TLS(傳輸層安全)加密協議來保護數據傳輸的安全性和機密性,以防止未經授權的訪問和竊聽。HTTPS協議通常用于處理敏感…

HbuilderX使用Uniapp+Vue3安裝uview-plus

如果你是vue2版本想使用uniapp去配置uviewui庫可以參考之前的文章 小程序的第三方ui庫推薦較多的還是uview的,看起來比較美觀,功能也比較完善,下面將提一下Vue3安裝uview-plus庫的教程 創建項目 安裝 首先進入官網 uView-Plus 直接下載并導…

預訓練--微調

預訓練–微調 一個很簡單的道理,如果我們的模型是再ImageNet下訓練的,那么這個模型一定是會比較復雜的,意思就是這個模型可以識別到很多種類別的即泛化能力很強,但是如果要它精確的識別是否某種類別,它的表現可能就不…

07-2 Python模塊和命名空間

1. 模塊 概念:其實就是一個Python文件,正常文件有的變量,函數,類,模塊都有 功能:模塊可以被其它程序引入,以使用該模塊中的函數等功能。 示例:test-module.py調用mymodule.py模塊中的now_time…

充電樁IC

充電樁IC 電子元器件百科 文章目錄 充電樁IC前言一、充電樁IC是什么二、充電樁IC的類別三、充電樁IC的應用實例四、充電樁IC的工作原理總結前言 充電樁IC的設計和功能會根據不同的充電協議和市場需求進行調整和定制。目前市場上有許多不同型號和廠家的充電樁IC可供選擇,以滿足…