webpack之css样式增强

如何在React中使用CSS模块,并解释为什么使用它们比传统CSS更有益? 在React中使用CSS模块是一种将CSS类名局部化到单个组件的方法,从而避免了全局作用域中的类名冲突。CSS模块允许你为组件编写样式,并确保这些样式只应用于该组件,而不会影响到其他组件。 阅读详情

css 前缀补齐

  1. 安装插件postcss-loader、autoprefixer
  2. webpack中添加配置
{
  test: /\.less$/,
  use: [
    MiniCssExtractPlugin.loader, 
    'css-loader', 
    'less-loader',
    {
      loader: 'postcss-loader',
      options: {
        plugins: () => [
          require('autoprefixer')({
            browsers: ['last 2 version', '>1%', 'ios 7']
          })
        ]
      }
    }
  ]
}

css px转化为rem

  1. 使用px2rem-loader将px转化为rem
  2. ⻚⾯渲染时计算根元素的 font-size 值,可以使⽤⼿淘的lib-flexible库,能够根据设备的实际宽高计算根元素的font-size的值。
{
  test: /\.less$/,
  use: [
    MiniCssExtractPlugin.loader, 
    'css-loader', 
    'less-loader',
    {
      loader: 'postcss-loader',
      options: {
        plugins: () => [
          require('autoprefixer')({
            browsers: ['last 2 version', '>1%', 'ios 7']
          })
        ]
      }
    },
    {
      loader: 'px2rem-loader',
      options: {
        remUnit: 75,
        remPrecision: 8
      }
    }
  ]
}

模板html里边内联进来这段代码,计算根元素font-size的大小

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script> 
    ;(function(win, lib) {
        var doc = win.document;
        var docEl = doc.documentElement;
        var metaEl = doc.querySelector('meta[name="viewport"]');
        var flexibleEl = doc.querySelector('meta[name="flexible"]');
        var dpr = 0;
        var scale = 0;
        var tid;
        var flexible = lib.flexible || (lib.flexible = {});

        if (metaEl) {
            console.warn('将根据已有的meta标签来设置缩放比例');
            var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);
            if (match) {
                scale = parseFloat(match[1]);
                dpr = parseInt(1 / scale);
            }
        } else if (flexibleEl) {
            var content = flexibleEl.getAttribute('content');
            if (content) {
                var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
                var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
                if (initialDpr) {
                    dpr = parseFloat(initialDpr[1]);
                    scale = parseFloat((1 / dpr).toFixed(2));
                }
                if (maximumDpr) {
                    dpr = parseFloat(maximumDpr[1]);
                    scale = parseFloat((1 / dpr).toFixed(2));
                }
            }
        }

        if (!dpr && !scale) {
            var isAndroid = win.navigator.appVersion.match(/android/gi);
            var isIPhone = win.navigator.appVersion.match(/iphone/gi);
            var devicePixelRatio = win.devicePixelRatio;
            if (isIPhone) {
                // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案
                if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
                    dpr = 3;
                } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
                    dpr = 2;
                } else {
                    dpr = 1;
                }
            } else {
                // 其他设备下,仍旧使用1倍的方案
                dpr = 1;
            }
            scale = 1 / dpr;
        }

        docEl.setAttribute('data-dpr', dpr);
        if (!metaEl) {
            metaEl = doc.createElement('meta');
            metaEl.setAttribute('name', 'viewport');
            metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
            if (docEl.firstElementChild) {
                docEl.firstElementChild.appendChild(metaEl);
            } else {
                var wrap = doc.createElement('div');
                wrap.appendChild(metaEl);
                doc.write(wrap.innerHTML);
            }
        }

        function refreshRem(){
            var width = docEl.getBoundingClientRect().width;
            if (width / dpr > 540) {
                width = 540 * dpr;
            }
            var rem = width / 10;
            docEl.style.fontSize = rem + 'px';
            flexible.rem = win.rem = rem;
        }

        win.addEventListener('resize', function() {
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300);
        }, false);
        win.addEventListener('pageshow', function(e) {
            if (e.persisted) {
                clearTimeout(tid);
                tid = setTimeout(refreshRem, 300);
            }
        }, false);

        if (doc.readyState === 'complete') {
            doc.body.style.fontSize = 12 * dpr + 'px';
        } else {
            doc.addEventListener('DOMContentLoaded', function(e) {
                doc.body.style.fontSize = 12 * dpr + 'px';
            }, false);
        }


        refreshRem();

        flexible.dpr = win.dpr = dpr;
        flexible.refreshRem = refreshRem;
        flexible.rem2px = function(d) {
            var val = parseFloat(d) * this.rem;
            if (typeof d === 'string' && d.match(/rem$/)) {
                val += 'px';
            }
            return val;
        }
        flexible.px2rem = function(d) {
            var val = parseFloat(d) / this.rem;
            if (typeof d === 'string' && d.match(/px$/)) {
                val += 'rem';
            }
            return val;
        }

    })(window, window['lib'] || (window['lib'] = {}));

  </script>
</head>
<body>
  <div id="root"></div>
</body>
</html>

loader plugin的版本不同,其用法也会存在差异

豆包 想了解 `style.less` 文件的作用,其实它本质上是使用 LESS 预处理器编写的样式文件,核心作用是让 CSS 开发更高效、更易维护 style.less是使用 LESS 预处理器编写的样式文件,核心是增强 CSS 的编程能力(变量、嵌套、混合等);它能简化样式编写、实现模块化管理,提升大型项目样式的可维护性;需编译为普通 CSS 才能被浏览器识别,且完全兼容原生 CSS。 阅读详情

相关推荐

React组件美化与CSS模块化实践指南

本文深入探讨了在React中使用Radium库来增强组件样式的方法,包括通过JavaScript动态应用伪类样式、媒体查询的实现,以及如何通过Webpack和CSS Modules来实现CSS的模块化。文章通过具体代码示例和步骤,展示了如何为React组件添加响应式和动态的样式,以及如何将CSS的作用域限定在组件内部,避免全局污染。

weixin_32747681的博客 467

CSS渐进增强

Posted on November 9th, 2008 in 前端开发 by lifesinger 原文地址:http://lifesinger.org/blog/?p=486 原文:Progressive Enhancement with CSS 作者: Aaron Gustafson 翻译:lifesinger 本系列上一篇涵盖了渐进增强的基本概念,现在我们来讨论如何应用...

weixin_30735745的博客 194

【gateway nc adapter虚拟网卡 win11 联想】问题的解决

由于需要登录公司内网,于是启用奇安信VPN。但启动后报出网关未连接的问题,于是我检查了我的网络适配器,并尝试解决,以下给出几种我实践过程中的行动,并附带最后成功的解决方法。

m0_73602417的博客 6558

HTML5与CSS3学习笔记【第十四章 使用CSS3进行增强】

近年来,浏览器快速吸纳了很多新的CSS3 属性,可以使用 CSS 创建圆角、渐变和阴影以及调整透明度等。

luminous-烁的博客 350

投入产出表之直接消耗系数和完全消耗系数计算--基于Excel

介绍 上篇博客已介绍投入产出表的结构类型及意义解读,在此就不重复写了。 投入产出法中相对稳定的因素是一些系数,根据投入产出表可以计算很多系数: 案例 案例数据即流量矩阵,采用的是中国2012年的部分行业数据,若有不对,请批评指正哈。 直接消耗系数的计算 根据上表和直接消耗系数的计算公式,直接消耗系数矩阵通常用A表示。农林牧渔产品和服务部门对其他部门产品的直接消耗系数分别为: 这些消耗系数的经济意义是,农、林、牧、渔产品和服务部门每生产单位(1亿元)总产出,要直接消耗0.1378亿元本部门产品,0.26

m0_46271335的博客 7万+

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译

FMT(基于rtthread)开源代码编译 win10下编译环境搭建及编译 什么是Firmament? Firmament (FMT) 是一款基于模型设计 (Model-Based-Design, MBD) 的开源自驾仪,可被用来快速构建无人机,无人车,无人船,机器人等平台的控制系统。 系统主要由两部分构成. FMT-Firmware: 一个基于C/C++开发的稳定、高性能的嵌入式系统. FMT-Model: 一个基于MATLAB/Simulink开发的仿真框架以及算法库. 昨天得知FMT开源飞控项目已经开

weixin_45786595的博客 2873

渐进增强 VS 优雅降级

一图胜千言 印象中,渐进增强和优雅降级这两个概念是在 CSS3 出现之后火起来的。由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器中使用CSS3,而在低级浏览器只保证最基本的功能。二者的目的都是关注不同浏览器下的不同体验,但是它们侧重点不同,所以导致了工作流程上的不同。 名词解释 渐进增强(Progressive Enhancement):一开始就

lzm18064126848的专栏 627

基于相位检测与锁相环的DIY超声波风速仪设计与实现

相位检测是信号处理中的一项基础技术,它通过测量两个周期信号之间的相位差来获取信息。其核心原理在于,当信号在介质中传播时,外部因素(如风速)会改变其传播速度,从而导致接收端信号的相位发生偏移。锁相环(PLL)是实现高精度相位检测的关键电路,它能动态调整本地振荡器的频率,以跟踪并锁定输入信号的相位,从而将微小的相位变化转换为易于测量的电压信号。这项技术的工程价值在于其对电路精度要求相对较低,鲁棒性好,非常适合低成本、高灵敏度的测量应用。在气象监测、工业传感和消费电子等领域,相位检测技术被广泛用于风速风向测量、位

weixin_29540599的博客 387

CSS----增强用户界面

今天写的是增强用户界面 常见用户界面属性关键词!! box-sizing、resize、outline-width、outline-style、outline-color、outline 1.resize属性 注意!! 如果希望此属性生效,需要设置元素的 overflow 属性,值可以是 auto、hidden 或 scroll resize开发严谨兼容写法: 2.box-sizing属性 b...

siyangyuyangzhu的博客 191

STM32 USB键盘实现指南

在STM32上实现键盘功能可以通过USB HID(人机接口设备)协议来实现,使STM32设备能被计算机识别为标准键盘。通过上述步骤,您可以在STM32上实现一个功能完整的USB键盘。关键点包括:正确配置USB HID设备实现键盘矩阵扫描处理按键事件并生成HID报告优化按键响应和消抖处理添加额外功能如宏键和LED反馈这个实现可以作为基础,进一步扩展为游戏键盘、宏键盘或特殊输入设备。

suny8的专栏 973

OSPF规划两大模型:双塔奇兵、犬牙交错

大家好,今天给大家带来的是OSPF规划两大模型:双塔奇兵、犬牙交错,让我们直接开始吧! OSPF规划之双塔奇兵 说明: OSPF 如果某个区域存在两个 ABR,并且在两个 ABR 上都对 area n 内的路由做了聚合操作。 最佳配置: 两台ABR之间的红线应该使用以太网的子接口技术,一个子接口属于area0,另一个属于 area n;或者该链路规划为 area n,同时配置虚连接; ABR 的 loopback0 规划入 area 0 OSPF 规划之犬牙交错 说明: 有时接入层的设备会以乱序的

网络技术联盟站 2424

css基础强化

css权重问题 行内样式优先级最高 #id +100 .class +10 e +1 其他 +0; 浏览器渲染DOM为从右往左的顺序(解析css,快速确定元素) 权重值计算的时候,不进位 选择器分类 元素,伪元素(元素实际存在),类选择器,属性选择器,伪类选择器(元素的状态),id选择器,组合选择器,否定选择器,通用选择器(*) css盒模型 基本概念:padding,ma...

晨露 351

Orange3实战教程:转换---预处理

部件提供了多种预处理方法,这些方法可以在单个预处理流程中组合使用。某些方法也可作为独立部件提供,支持更高级的技术和参数调整。连接到测试与评分:在交叉验证的每个批次中应用预处理器,随后学习器的预处理器会作用于预处理后的子集。连接到学习器:覆盖学习器的默认预处理流程,仅应用自定义流程(各学习器的默认步骤详见其文档)。直接连接到原始数据并输出预处理后的数据集,可能导致模型过拟合。:从原始数据中随机选择固定数量或百分比的特征,主要用于高级测试或教学用途。的预处理器输入,同时传入数据和学习器(如。

err2008的专栏 148

css-modules,CSS Modules 方案

在讲CSS Modules之前,先想想什么是CSS Module?在我眼中CSS Module是对css进行模块化的管理,更加深入的解释就是用来管理css样式的导入与导出。灵活按需导入以便复用代码,导出的时候要合理的分割域的界限。CSS Module面对的问题模块化实际过程中遇到的问题有如下几点:样式污染命名混乱无法共享变量,具体来说,在主题样式文件库中设置了默认样式,然后想要在js中去获取,在原...

weixin_34517745的博客 895

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

webpack修炼日记(二)——loader,让webpack不再“裸奔”

什么是loader,官方早已给出了答案。**“loader 让 webpack 能够去处理其他类型的文件,并将它们转换为有效模块, 以供应用程序使用,以及被添加到依赖图中。”**说白了,加上loader之后,webpack就可以去处理其他类型的文件了,这样一来,webpack的可拓展性就很强了,这也是webapck可玩性体现之一。只要有相关的loader,那么在webpack中就可以对其进行配置然后处理相关文件。**

weixin_54231785的博客 196

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

css module

常见的样式的添加方式&lt;div className='wrap'&gt;     &lt;Slide rotationMap={this.state.rotationMap}/&gt; &lt;/div&gt;除此之外,还有另外的方法,使用之前要先开启css module,在webpack中添加 modules:true的配置{ test: /\.scss$/, exclude...

qq_31680395的博客 383

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

webpack中使用loader对css,less文件进行打包,与url有关文件的打包

loader打包处理less,css文件 npm i less-loader@10.0.1 less@4.1.1 -D

m0_47794838的博客 207

webpack-配置处理less 文件的loader

Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。 安装 less-loader npm i less-loader -D 安装依赖包less, npm i less -D 定义less匹配规则 module: {//这个节点用于配置所有的第三方模块加载器 rules:[...

上海 彭彭 1827

Fluent UI与CSS-in-JS热更新:10个技巧优化开发环境的样式更新体验

Fluent UI是微软推出的一套完整的Web组件库,包含丰富的React组件和样式工具,而CSS-in-JS技术则允许开发者在JavaScript中编写CSS样式。本文将分享10个实用技巧,帮助开发者优化Fluent UI项目中CSS-in-JS的热更新体验,显著提升开发效率。 ## 🎨 了解Fluent UI的样式系统 Fluent UI采用了现代化的CSS-in-JS方案,通过`mak

gitblog_01004的博客 310

webpack-note

webpack详解

m0_68717067的博客 180

终极apidoc主题定制指南:从CSS样式到JavaScript交互全面解析

**apidoc** 是一款功能强大的RESTful API文档生成器,它不仅提供标准的API文档模板,还支持完全自定义的主题开发。本文将为您详细介绍如何从零开始定制属于自己的apidoc主题,涵盖CSS样式定制、JavaScript交互增强以及模板系统深度解析。🚀 ## 📋 apidoc主题架构概览 apidoc的模板系统基于现代化的前端技术栈构建,核心组件包括: - **Handle

gitblog_00257的博客 367

webpack总结

文章目录webpack装载器loader插件plugin代理热加载多页面处理 webpack 从项目入口文件开始,装载转换所有文件,优化处理文件,生成最终发布文件 重要概念:入口(main.js),出口(dist),装载器loader,plugin. 装载器loader Loader的作用是让webpack拥有了加载和解析非JavaScript文件的能力。 装载器loader, 装载并转换(css,less) , 常用它装载器loader less-loader less转化css css-lo..

iygxv 302

更新日志_webpack 文档更新日志(8.158.28)

❝新一期的 webpack 更新日志又来了哦,本期内容大部分都与 CSS Modules 相关,话不多说开始正题。❞英文篇内容更新APIcompilation-object 中新增了 deleteAsset 字段,用于移除资源loader新增了 remark-loader,用于处理 markdowncss-loader 中新增了 compileType 的使用说明当配置为 icss 时,...

weixin_39561179的博客 159

css模块化 ----less

一、Less是什么? Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。是一种动态样式语言,属于css预处理语言的一种。 二、less的使用 浏览器环境中使用 Node环境中使用 npm install less -g lessc demo.less newDemo.less webpack中使用方法 ...

小李不吃肉 541

好客租房161-css modules的说明

css modules通过对css类名重命名 保证每个类名的唯一性 从而避免样式冲突的问题 换句话:所有类名就具有局部作用域 只能当前组件内部生效 webpack的css-loader原因

qq_41632427的博客 108
上一篇: webpack的基本使用
下一篇: 静态资源内联
ccxCode
博客等级 码龄8年 1粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值