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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

rem布局 html,移动端h5之rem布局/px2rem

發布時間:2025/3/12 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rem布局 html,移动端h5之rem布局/px2rem 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

rem布局之媒體匹配

最早的時候用的rem適配方法,通過手動設置媒體查詢對不同設備進行設置font-size

// 自適應

// ------------------------

html{

font-size: 38px;

}

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

html {

font-size: 42.666px !important;

}

}

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

html {

font-size: 48px !important;

}

}

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

html {

font-size: 50px !important;

}

}

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

html {

font-size: 55.2px !important;

}

}

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

html {

font-size: 64px !important;

}

}

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

html {

font-size: 74.666px !important;

}

}

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

html {

font-size: 85.333px !important;

}

}

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

html {

font-size: 96px !important;

}

}

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

html {

font-size: 100px !important;

}

}

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

html {

font-size: 106.666px !important;

}

}

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

html {

font-size: 128px !important;

}

}

當然這是很古老的方法,可以看出來我們的設計稿是750px的,以750為基準設置font-size為100

我們可以看出這個方法通過人為比例計算,不能做到設備之間很好的覆蓋有很大誤差

rem布局之自動設置fontsize

所有有了下面這個根據屏幕尺寸自動設置font-size的方法,直接貼代碼

(function (doc, win) {

var docEl = doc.documentElement,

resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',

recalc = function () {

var clientWidth = docEl.clientWidth;

if (!clientWidth) return;

if(clientWidth>=640){

docEl.style.fontSize = '100px';

}else{

docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';

}

};

if (!doc.addEventListener) return;

win.addEventListener(resizeEvt, recalc, false);

doc.addEventListener('DOMContentLoaded', recalc, false);

})(document, window);

這段代碼的大意是:

如果頁面的寬度超過了640px,那么頁面中html的font-size恒為100px,否則,頁面中html的font-size的大小為: 100 * (當前頁面寬度 / 640)

但是如果ui出的圖是750px的你也要適當調整一下,為了方便計算也可以調整寬度

我們以設計稿為640px為基準

width:100px;

width:1rem;//轉換計算后為1rem

iphone5-1.png

iphone6-1.png

rem布局之開闊視野

該方案使用相當簡單,把下面這段已壓縮過的 原生JS(僅1kb) 放到 HTML 的 head 標簽中即可(注:不要手動設置viewport,該方案自動幫你設置)

這是阿里團隊的高清方案布局代碼,所謂高清方案就是根據設備屏幕的DPR(設備像素比,又稱DPPX,比如dpr=2時,表示1個CSS像素由2個物理像素點組成)** 動態設置 html 的font-size, 同時根據設備DPR調整頁面的縮放值,進而達到高清效果**

關于像素請進

此方案也是默認 1rem = 100px,所以你布局的時候,完全可以按照設計師給你的效果圖寫各種尺寸啦。

iphone5.png

iphone6.png

到這里大家和上面的對比應該有發現些什么,我們屏幕越大,像素越高,看到的應用越多

源碼

'use strict';

/**

* @param {Number} [baseFontSize = 100] - 基礎fontSize, 默認100px;

* @param {Number} [fontscale = 1] - 有的業務希望能放大一定比例的字體;

*/

const win = window;

export default win.flex = (baseFontSize, fontscale) => {

const _baseFontSize = baseFontSize || 100;

const _fontscale = fontscale || 1;

const doc = win.document;

const ua = navigator.userAgent;

const matches = ua.match(/Android[\S\s]+AppleWebkit\/(\d{3})/i);

const UCversion = ua.match(/U3\/((\d+|\.){5,})/i);

const isUCHd = UCversion && parseInt(UCversion[1].split('.').join(''), 10) >= 80;

const isIos = navigator.appVersion.match(/(iphone|ipad|ipod)/gi);

let dpr = win.devicePixelRatio || 1;

if (!isIos && !(matches && matches[1] > 534) && !isUCHd) {

// 如果非iOS, 非Android4.3以上, 非UC內核, 就不執行高清, dpr設為1;

dpr = 1;

}

const scale = 1 / dpr;

let metaEl = doc.querySelector('meta[name="viewport"]');

if (!metaEl) {

metaEl = doc.createElement('meta');

metaEl.setAttribute('name', 'viewport');

doc.head.appendChild(metaEl);

}

metaEl.setAttribute('content', `width=device-width,user-scalable=no,initial-scale=${scale},maximum-scale=${scale},minimum-scale=${scale}`);

doc.documentElement.style.fontSize = `${_baseFontSize / 2 * dpr * _fontscale}px`;

};

看到大漠寫了一種關于viewport-vw-vh的適配方法,大家也可以看看相關資料

Viewport移動端適配

rem布局之px2rem

我們在寫rem布局的時候發現,盡管我們設置了基準font-size,但是我們還是要去換選一下,有沒有辦法直接寫px,讓他自動換算成rem

有這樣的需求當然我們也有解決方案

px2rem的原理:

px2rem.png

官方例子 https://www.npmjs.com/package/postcss-px2rem

gulp腳手架下

安裝gulp-px2rem-plugin模塊

npm install gulp-postcss --save-dev

gulpfile.js文件內處理

var gulp = require('gulp');

var postcss = require('gulp-postcss');

var px2rem = require('postcss-px2rem');

gulp.task('default', function() {

var processors = [px2rem({remUnit: 75})];

return gulp.src('./src/*.css')

.pipe(postcss(processors))

.pipe(gulp.dest('./dest'));

});

vue-webpack下面

webpack官方有簡單舉例

npm install postcss-loader --save-dev

var px2rem = require('postcss-px2rem');

module.exports = {

module: {

loaders: [

{

test: /\.css$/,

loader: "style-loader!css-loader!postcss-loader"

}

]

},

postcss: function() {

return [px2rem({remUnit: 75})];

}

}

以下舉例vue的寫法,vue中以上webpack寫法加載出錯

在webpack.base中先處理css和postcss

{

test: /\.(css|scss)$/,

loader:"style-loader!css-loader!sass-loader!postcss-loader"

}

我們對px2rem寫入vue-loader中

vue-px2rem.png

var utils = require('./utils')

var config = require('../config')

var isProduction = process.env.NODE_ENV === 'production'

module.exports = {

//使用px-rem轉換

postcss: [require('postcss-px2rem')({remUnit: 100})],

loaders: utils.cssLoaders({

sourceMap: isProduction

? config.build.productionSourceMap

: config.dev.cssSourceMap,

extract: isProduction

})

}

關于1px轉換

這樣一切看上去如此完美了,但是又有個大問題需要注意——1px的邊框在轉化為rem時,在andriod webview以及部分低版本ios webview 會看不到。處理方法——讓1px在編譯后,依然是1px

使用postcss-px2rem插件處理px時候,需要在使用時候注意每個屬性后面的分號不能省略,默認是都轉換為rem,

如若某個屬性不需要轉換為rem,需要按照dpr不同而分別設置大小,則在后面加上注釋/px/,

如若需要原樣輸出,則在后面加上注釋/no/,此處需要多加留意,對于剛接觸的我們新手來說,是個坑啊!

.border_style{

border-color: @border_color;

border-style: solid;

border-width: 1px;/*no*/

}

我們知道現在iphone大多數型號都用上了retina屏,而retina屏的分辨率相較于普通屏幕增加了一倍,也就是說原來1個像素寬度的區域內可以塞進2個像素了。我們css寫的1px是一個概念像素,在retina屏的實際設備上占了2px的位置。

而對于手機屏幕整體來說,一個標注了750寬的手機(iPhone6)在css中只需要375px就能表示

scale縮放

全能型寫法

@media (-webkit-min-device-pixel-ratio: 2){

.border-bottom::after {

border-bottom-width: 1px;

}

.border:after {

content: ' ';

display: block;

position: absolute;

top: 0;

right: -100%;

bottom: -100%;

left: 0;

border: 0 solid #e1e1e1;

-webkit-transform-origin: 0 0;

transform-origin: 0 0;

pointer-events: none;

-webkit-transform: scale(.5);

transform: scale(.5);

width: 200%;

-webkit-box-sizing: border-box;

box-sizing: border-box;

}

}

滿足一般需求可以使用這個

@media (-webkit-min-device-pixel-ratio: 2)

.border:after {

height: 1px;

content: '';

width: 100%;

border-top: 1px solid #e1e1e1;

position: absolute;

bottom: -1px;

right: 0;

transform: scaleY(0.5);

-webkit-transform: scaleY(0.5);

}

總結

以上是生活随笔為你收集整理的rem布局 html,移动端h5之rem布局/px2rem的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 天天av天天干 | 山村大伦淫第1部分阅读小说 | 波多野结衣黄色 | 寂寞人妻瑜伽被教练日 | 76少妇精品导航 | 操操操爽爽爽 | 日韩国产欧美精品 | 国产亚洲精品美女 | 欧美日色| 播播成人网 | 尤物在线观看视频 | 久久国产精品一区二区三区 | 精品国产亚洲av麻豆 | 2一3sex性hd | 亚洲少妇色 | 日本精品一区二区三区四区的功能 | 亚洲天堂精品视频 | 欧美又粗又深又猛又爽啪啪九色 | 色www情 | 求av网址 | 欧美在线激情 | 久久国产a | 久久911| 女人18片毛片60分钟 | 日韩精品一区二区亚洲av | 先锋影音资源av | 久久亚洲色图 | 极品美女扒开粉嫩小泬 | 欧美日韩中文字幕视频 | 在线观看免费黄视频 | 天堂av免费在线 | 国语av在线 | 足疗店女技师按摩毛片 | 香港三级韩国三级日本三级 | 久久精品人妻一区二区三区 | 玩偶姐姐在线观看免费 | 午夜视频大全 | 欧美在线一二三 | 亚洲a∨无码无在线观看 | 轻点好疼好大好爽视频 | hd性videos意大利精品 | 九九超碰| 日韩区欧美区 | 午夜理伦三级理论 | 男女做爰猛烈吃奶啪啪喷水网站 | 亚洲区欧美 | 国模精品视频一区二区 | 国产13页 | 欧美三级网站在线观看 | 黄色av片三级三级三级免费看 | 男人的天堂国产 | www.成人免费视频 | 国产一区二区网址 | 内射毛片内射国产夫妻 | 欧美日韩国产传媒 | 久久爱综合网 | 国产精品成人午夜视频 | 伊人91在线| 亚洲精品一区三区三区在线观看 | 欧美精品色婷婷五月综合 | 国产在线视频网址 | 国产美女黄色片 | 国产精品剧情一区 | 狠狠的干狠狠的操 | 日本在线精品视频 | 欧美日一区二区 | a在线v| 成人av网址在线观看 | 黄av资源| 日韩美女做爰高潮免费 | 在线天堂6 | 秋霞午夜鲁丝一区二区老狼 | 成年在线观看 | 国产视频久久久久久 | 九九久久免费视频 | 欧美成人aa | 色猫咪av | 欧美性生活免费视频 | 亚洲一区二区天堂 | 性欧美色图 | 婷婷亚洲一区 | 少妇全黄性生交片 | 草av在线| 色婷婷777 | 中文字幕在线观看日本 | 黄色二级视频 | 成人黄色免费网址 | 欧美日韩99 | 日本在线视频二区 | 亚洲国产v | 天天干干干 | 欧美日韩国产成人精品 | 久久性感美女视频 | 特大黑人巨交吊性xxxx视频 | 国产精品久久91 | 在线中文字幕日韩 | 日本黄a三级三级三级 | 国产一国产二国产三 | av一二三四区 |