【前端第十四课】less的基本写法;CSS Module技巧

简介: 【前端第十四课】less的基本写法;CSS Module技巧

目标

掌握less的基本写法

less选择器

变量定义

掌握CSS Module技巧


Less

https://less.bootcss.com/


Less是一种CSS的预处理语言,它在CSS的基础上增加了一些编程语言的特性,可以提升我们编写CSS的效率,减少很多重复性的代码,最终编译成纯净的CSS代码执行。Less是CSS的超集,就像我们使用的TS和JS的关系,我们也可以把Less完全当作CSS来使用。


同样流行的CSS预处理器还有SCSS、Stylus,大家的基本功能都比较类似,Less因为简单易用,可以满足绝大多数的使用场景,所以我们先来学习一下它。


安装

我们可以通过 npm 来将 less 编译器安装为一个命令


npm i less -g

然后我们可以通过 lessc 命令来编译 less 文件了


lessc test.less

上面的命令会直接打印编译之后的结果,如果要输出到文件,可以加上输出文件名


lessc test.less test.css
变量(Variables)
@width: 10px;
@height: @width + 10px;
@color: #f00;
.header {
  width: @witth;
  height: @height;
  height: @color;
}

现在CSS支持原生变量了,而且是动态的,有些时候使用原生变量会是一种更好的选择,如果需要考虑兼容性,可以使用Less的变量


混合(Mixins)

Mixin 是一种将一组属性从一个规则集混入到另一个规则集的方法。假设我们定义了一个类如下

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
  }

如果我们想要在其他类中混入这些属性,只需要像函数一样调用他们即可:

.menu a {
  color: #111;
  .bordered();
}
.post a {
  color: red;
  .bordered();
}


.bordered 所包含的属性就同时出现在 .menu a 和 .post a 中了


嵌套(Nesting)

Less提供了嵌套代替层叠或者与层叠结合使用的能力,假如我们有下面的CSS代码

#header {
  color: black;
}
#header .navigation {
  font-size: 12px;
}
#header .logo {
  width: 300px;
}

如果使用Less,我们可以这样来写

#header {
  color: black;
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
  }
}

还可以和伪类或者子元素选择器,如

#header {
  color: black;
  &:hover {
    color: red;
  }
  & > span {
    font-weight: bold;
  }
}

过深的嵌套只会让代码难以维护,建议嵌套不要超过三层,如果出现要嵌套超过三层的情况,应该考虑如何优化选择器的设计。


导入(Importing)

导入可以让我们将另外一个Less文件导入进来,例如我们可以把变量样式都定义在一个单独的Less模块中,其他文件都来引用它,通常我们用这种方式来控制主题样式,当我们需要修改主题的时候,只需要修改变量文件中的值,然后重新编译即可。


vars.less

@primaryColor: #f00;
@textColor: #666;

theme.less


@import "vars";
#header {
  background-color: @primaryColor;
  color: @textColor;
}

CSS Modules

借助于webpack,我们可以把CSS也当成模块来拆分引用了,但是模块化的一个核心是作用域隔离,CSS并没有真正的模块化机制,这意味着我们写在不同文件中的CSS代码中的类会对整个HTML页面起作用,随着我们应用中组件的增多,很容易会出现类名冲突引发样式混乱。通常我们解决这种问题需要靠命名的约定,每个模块用自己的前缀然后加上嵌套等方式,如:


.button {
}
.button-default {
}

.modal {
}
.modal-header {
}

但是这样也不安全,需要大家都自觉遵守。


现在 css-loader 提供了一种叫做 CSS Modules 的方案,可以帮我们自动生成唯一的类名,不会和其他模块的命名出现冲突


要使用CSS Modules有几个步骤,首先需要在webpack的配置文件中打开相关的配置


{
  test: /\.less$/,
  include: path.resolve('./src'),
  use: [
    MiniCssExtractPlugin.loader,
    {
      loader: 'css-loader',
      options: {
        modules: {
          localIdentName: '[local]-[hash:5]'
        }
      }
    },
    'less-loader'
  ]
}

上面配置的意思是我们对 src 下面的 .less 文件启用 modules 转换,转换的格式模板为 [local]-[hash:5],其中hash是根据文件名和类名确定的,所以不会冲突,因为CSS Modules会改变输出的类名,我们只能对自己写的代码进行适配。


经过上面的配置之后,我们在代码中导入的less文件返回的就是一个键值对了,其中键名是原始的类名或ID名,键值就是转换输出之后的名字,如:


{
  btns: "btns-bdd41",
  body: "body-dab49"
}

所以我们就不能在JSX中填写固定的类名了,需要使用变量的方式,如下


import * as React from 'react'
import style from './style.less'
export default class Main extends React.Component {
  render() {
    return (
      <div className={style.body}>
        <div className={style.btns}></div>
      </div>
    )
  }
}

CSS Modules会转换所有的类名和ID名,如果有些名字我们不想让它转换,可以使用 :global(),如:

:global(#app) {
  background-color: #f4f4f4;
}
相关文章
|
8天前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
26 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
1月前
|
前端开发 开发者 UED
《前端技术基础》第02章 CSS基础【合集】
层叠样式表(Cascading Style Sheets,简称CSS)是一种用于描述网页视觉表现的语言。该语言与HTML协同工作,其中HTML负责构建网页的结构,而CSS则负责定义网页的外观和格式。CSS通过一系列规则来实现样式的应用,这些规则由选择器(Selectors)和声明块(Declaration Blocks)构成。选择器的作用是明确指出哪些HTML元素将受到特定样式规则的影响,而声明块则包含了具体的样式声明,这些声明定义了元素的视觉属性和相应的值。
53 1
|
1月前
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
3月前
|
前端开发
create-react-app 如何使用 less/sass 和 react-css-modules?
本文详细介绍了在 create-react-app 项目中如何使用 less/sass 和 react-css-modules 来管理和应用样式。首先,通过安装相应依赖并配置 webpack 支持 less/sass;接着,介绍如何使用这些预处理器编写样式;最后,讲解了如何配置和使用 react-css-modules 实现样式的模块化管理,以及如何结合使用 less/sass 和 react-css-modules 提高开发效率和代码质量。
58 3
|
3月前
|
Web App开发 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用CSS3,打造炫酷视觉效果!
【10月更文挑战第31天】前端开发面临复杂布局的挑战,本文介绍了几种提升开发效率和代码质量的工具和技术。基础的HTML和CSS可以应对大部分布局需求,而Firefox开发者工具、VS Code、Vue、React等则能应对更复杂的布局,帮助开发者构建高性能、用户友好的网页应用。
77 4
|
4月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
474 1
|
4月前
|
前端开发 JavaScript 容器
前端之CSS基础知识
前端之CSS基础知识
30 0
|
4月前
|
前端开发 开发者
CSS预处理器Less、Scss
【10月更文挑战第3天】
146 59
|
4月前
|
前端开发 容器
前端技术分享:利用CSS Grid布局实现响应式设计
【10月更文挑战第1天】前端技术分享:利用CSS Grid布局实现响应式设计
|
4月前
|
前端开发 UED 容器
前端技术分享:利用 CSS Grid 实现响应式布局
【10月更文挑战第1天】前端技术分享:利用 CSS Grid 实现响应式布局
105 2

热门文章

最新文章

  • 1
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 3
    【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 4
    详解智能编码在前端研发的创新应用
  • 5
    巧用通义灵码,提升前端研发效率
  • 6
    智能编码在前端研发的创新应用
  • 7
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 8
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 9
    抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
  • 10
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡