解决PC端和移动端的css简单适配问题

一般用媒体查询来实现,不同宽度的屏幕对应不同的css样式

@media (min-width: 400px){
   .app {
        width: 400px;
        height: 400px;
        background-color: green;
    }
}

那么问题来了,如果我们有很多个媒体查询条件呢?是不是app的样式需要写很多份,当我们页面有很多很多个div盒子的时候,也是按照这样复制再修改,下班岂不是遥遥无期??估计也没人这么蠢,毕竟在坐的各位都是大佬。

 我们知道,px是一个绝对单位,写死了就不会变,那我们有没有一个相对单位来给它进行长度和宽度的赋值呢?那就是rem了没得说了。

rem 是 CSS 中的一个长度单位,全称为 "root em",它代表相对于 HTML 文档根元素(即 <html> 元素)的字体大小。rem 单位结合了绝对单位和相对单位的优点,提供了一种灵活的方式来设置字体大小和其他尺寸,同时保持整体设计的一致性和可扩展性。

rem的特点:其单位是相对于根元素,通常是html的字体大小,还有全局一致性,由于 rem 是相对于根元素的,所以你只需要在一个地方(通常是全局样式表的开始处)设置根元素的字体大小,就可以影响到整个页面中所有使用 rem 的元素。

例如,如果你的 <html> 元素的字体大小是 16px,那么 1rem 就等于 16px。如果你将一个段落元素的字体大小设置为 1.5rem,那么它的字体大小就会是 24px。 

 

.app {
    width: 10rem;
    height: 10rem;
    background-color: red;
}
@media (min-width: 400px){
    html{
        font-size: 20px;
    }
}

优雅的适配封装

 

(function(doc){
    let docEl = doc.documentElement;  // 获取根节点的html
    doc.addEventListener('DOMContentLoaded',recalc)
    function recalc(){
        let width = docEl.clientWidth;
        docEl.style.fontSize = 20 * (width / 320) + 'px';
    }
})(document)
  • 获取<html>元素的可视宽度(不包括滚动条),存储在width变量中。

  • 根据width计算新的字体大小。这里使用了一个公式20 * (width / 320),意味着当宽度为320px时,根元素的字体大小为20px;宽度增加时,字体大小按比例增加。

  • 将计算出的字体大小设置为<html>元素的style.fontSize属性,单位为px

最后我们将这个做好的适配封装代码引入项目全局去使用就好了。

### 使用 `postcss-pxtorem` 插件实现 CSS 单位转换 #### 配置方法 为了使项目支持从像素单位到相对单位的自动转换,可以在构建工具配置文件中集成 `postcss-pxtorem` 插件。对于基于 Vite 构建的应用程序,在 `vite.config.ts` 文件里添加如下所示的相关配置: ```typescript import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import postcssPxToRem from 'postcss-pxtorem'; export default defineConfig({ plugins: [ vue(), ], css: { postcss: { plugins: [ postcssPxToRem({ rootValue: 16, // 设定根节点font-size,默认为16px propList: ['*'], // 表明哪些属性会被处理;'*'表示全部 selectorBlackList: [], // (字符串或正则表达式列表)忽略的选择器 minPixelValue: 0, // 设置要替换的最小像素值 mediaQuery: false, // 是否允许媒体查询中的px也转换成rem exclude: /node_modules/i // 排除某些目录下的文件不进行转换 }), ] } }, }); ``` 此段代码定义了一个 PostCSS 处理流程,其中包含了用于将固定尺寸单位(px)转变为弹性尺寸单位(rem)的功能[^3]。 #### 技巧与注意事项 当应用上述配置之后,开发者需要注意几个方面以确保最佳效果: - **行内样式的局限性**:由于 HTML 属性内的样式无法通过这种方式被解析并修改,因此建议尽可能采用外部样式表来管理视觉表现逻辑。 - **响应式设计考量**:尽管该插件可以很好地帮助创建灵活的设计方案,但在实际开发过程中仍需结合其他技术手段如视口单位(`vw`, `vh`)、断点媒体查询等共同作用于复杂场景下多终的一致体验优化[^2]。 - **图片资源适配**:针对高清屏显示需求,除了调整文字其他界面元素外,还需特别关注图像素材的质量控制——即准备不同分辨率版本(比如一倍图、两倍图乃至三倍图),并通过适当的方式加载对应质量级别的图形资产。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值