当前位置: 首页 > news >正文

预处理器Stylus的介绍及使用,并同Less、Sass进行对比(简单介绍)

目录

一、安装与配置

安装Node.js:

安装Stylus:

配置Webpack:

二、编写Stylus代码

定义变量:

使用变量:

嵌套语法:

混合(Mixins):

函数:

     6.关键字参数:

7.条件表达式: 

7.1举例设置屏幕宽度:

 7.2除非(Unless):

7.3后缀条件 :

官网地址


介绍:

Stylus是一种CSS预处理语言,它允许开发者使用更加强大和富有表现力的方式来写CSS代码。

为啥要用stylus,我们先上代码,看看:

先举例一下Sass和Less:

// Sass 代码
$primary-color: #ff0000;
$secondary-color: #00ff00;body {font-size: 14px;color: $primary-color;p {margin: 10px;padding: 5px;&:hover {background-color: $secondary-color;}}
}.button {background-color: $primary-color;color: #fff;padding: 10px;border-radius: 5px;
}
// Less 代码
@primary-color: #ff0000;
@secondary-color: #00ff00;body {font-size: 14px;color: @primary-color;p {margin: 10px;padding: 5px;&:hover {background-color: @secondary-color;}}
}.button {background-color: @primary-color;color: #fff;padding: 10px;border-radius: 5px;
}

然后,我们再把我们要讲的Stylus放上来,与less、sass进行一个对比

// Stylus 代码
$primary-color = #ff0000
$secondary-color = #00ff00bodyfont-size 14pxcolor $primary-colorpmargin 10pxpadding 5px&:hoverbackground-color $secondary-color.buttonbackground-color $primary-colorcolor #fffpadding 10pxborder-radius 5px

从上面的代码对比可以看出,Stylus的代码更加简洁省略了大量的标点符号冒号、分号、大括号、逗号),代码不仅减少了代码的冗余,还提高了代码的可读性和可维护性。这就是为啥可以选择他的原因。

一、安装与配置

  1. 安装Node.js

    • Stylus是基于Node.js社区产生的,因此在使用Stylus前,需确保计算机上已经安装了Node.js。
  2. 安装Stylus

    • 通过Node.js的包管理器npm来全局安装Stylus。在命令行中输入npm install stylus -g,即可完成Stylus的安装。
      npm install stylus -g
    • 如果是在项目中使用,可以在项目的根目录下运行npm install stylus stylus-loader --save-dev来安装Stylus和stylus-loader(用于webpack打包)。
      npm install stylus stylus-loader --save-dev
  3. 配置Webpack

    • 如果项目是使用Webpack构建的,需要确保webpack.config.js文件中对Stylus进行了正确的配置。
      const path = require('path');
      const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 用于将 CSS 提取到单独的文件中(可选)module.exports = {entry: './src/index.js', // 你的入口文件output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist'),},module: {rules: [{test: /\.styl(us)?$/, // 匹配 .styl 或 .stylus 文件use: [MiniCssExtractPlugin.loader, // 如果你想要将 CSS 提取到单独的文件中(可选)'css-loader', // 处理 CSS 文件,使其可以被 JavaScript 导入'stylus-loader', // 处理 Stylus 文件,将其编译为 CSS],},// 其他 loader 配置...],},plugins: [new MiniCssExtractPlugin({filename: 'styles.css', // 提取出的 CSS 文件名}),// 其他插件配置...],// 其他 Webpack 配置...
      };

    • 使用VueCLI创建的项目,通常这部分配置已经设置好了。

二、编写Stylus代码

Stylus默认使用.styl作为文件扩展名。以下是一些基本的语法示例:

<template><div class="container"><h1 class="title">Hello, Stylus!</h1></div>
</template><script>
export default {name: 'Home'
}
</script><style lang="stylus">
$theme-color = #42b983.containerpadding 20px.titlecolor $theme-colorfont-size 24px&:hovertext-decoration underline
</style>
  1. 定义变量

    • 在Stylus中,可以使用变量来存储常用的CSS属性值,以便在需要时重复使用。
      $theme-color = #42b983
  2. 使用变量

    • 定义变量后,可以在CSS规则中引用这些变量。
      .title color $theme-color
  3. 嵌套语法

    • Stylus支持嵌套语法,这使得在定义复杂选择器时更加直观和方便。
      .containerpadding 20px.titlecolor $theme-colorfont-size 24px&:hovertext-decoration underline
  4. 混合(Mixins)

    • 混合允许你定义一组CSS规则,并在多个地方重复使用它们。
      这里是一个简化和优化的例子,
      展示了如何在 CSS 中设置 border-radius,同时考虑旧浏览器的兼容性:border-radius(n)border-radius: n-webkit-border-radius: n   -moz-border-radius: nbuttonborder-radius(5px)
  5. 函数

    • Stylus支持函数,可以执行一些复杂的计算或逻辑操作。
      element background-color: lighten(#f00,10%)lighten 函数通常用于增加颜色的亮度。
      这个函数接受两个参数:第一个参数是原始颜色;第二个参数是亮度的增加量,通常以百分比表示。

     6.关键字参数:

以下示例在功能上是等价的。 然而,我们可以 在参数列表中的任何位置放置关键字参数。  设置关键字的参数将被用来填充其余尚未填充的参数。

  body {color: rgba(255, 200, 100, 0.5);color: rgba(red: 255, green: 200, blue: 100, alpha: 0.5);color: rgba(alpha: 0.5, blue: 100, red: 255, 200);color: rgba(alpha: 0.5, blue: 100, 255, 200);}

转换为:

   body {color: rgba(255,200,100,0.5);color: rgba(255,200,100,0.5);color: rgba(255,200,100,0.5);color: rgba(255,200,100,0.5);}

若要查看函数或混合(mixin)所能接受的参数,请使用 p() 函数:

p(rgba)

输出:

inspect: rgba(red, green, blue, alpha)

7.条件表达式

Stylus的条件表达式使用ifelse ifelse关键字来构建,和js的if语句差不多啦

7.1举例设置屏幕宽度:

// 定义一个变量来表示屏幕宽度
screen-width = 1200px// 使用条件表达式来设置不同的CSS属性
if (screen-width >= 1000px) {.container {max-width: 1000px;}
} else {.container {max-width: 90%;}
}

 7.2除非(Unless):

除了基本的ifelse ifelse关键字外,Stylus还支持unless关键字,其用法与if相反unless关键字用于在条件表达式为假时执行代码块

unless (条件表达式) {// 条件表达式为假时执行的代码块
}

7.3后缀条件 :

Stylus还支持后缀条件,这意味着ifunless可以当作操作符使用。当右边表达式为真时,执行左边的操作对象。这种语法特别适用于单行语句,如@import@charset等。

// 定义一个变量来表示是否禁用内边距覆盖
disable-padding-override = false// 使用后缀条件来设置不同的CSS属性
body {padding: 10px 20px unless (disable-padding-override);margin: 0 unless (disable-padding-override == false);
}

 上面这个例子中,如果disable-padding-override变量的值为false,则body元素将具有padding属性;否则,padding属性将被忽略,而margin属性将被设置为0。

官网地址

下面是他的官网地址,如需要详细了解点击下方跳转

点击跳转-->Stylus官网

相关文章:

预处理器Stylus的介绍及使用,并同Less、Sass进行对比(简单介绍)

目录 一、安装与配置 安装Node.js&#xff1a; 安装Stylus&#xff1a; 配置Webpack&#xff1a; 二、编写Stylus代码 定义变量&#xff1a; 使用变量&#xff1a; 嵌套语法&#xff1a; 混合&#xff08;Mixins&#xff09;&#xff1a; 函数&#xff1a; 6.关键字参…...

MySql-9.1.0安装详细教程(保姆级)

目录 MySQL介绍&#xff1a; 一、下载 Mysql 安装文件 二、Mysql 安装教程 1.下载完成后进入解压&#xff0c;注意不要放在一个非中文路径下的文件夹下面否则后面会报错。我在此处解压放在了D盘MySQL目录下。 2.解压后的文件应该没有.ini文件。因此&#xff0c;需要创建in…...

【练习Day17】寻找第 K 大

链接&#xff1a;寻找第K大_牛客题霸_牛客网 方法&#xff1a;快排二分查找&#xff08;推荐使用&#xff09; 知识点&#xff1a;分治 分治即“分而治之”&#xff0c;“分”指的是将一个大而复杂的问题划分成多个性质相同但是规模更小的子问题&#xff0c;子问题继续按照这…...

【文档搜索引擎】在内存中构造出索引结构(下)

文章目录 4.保存到磁盘中为什么要保存在磁盘中怎么保存操作步骤1. 前期准备2. 主要操作 5. 将磁盘中的数据加载到内存中Parser 类完整源码Index 类完整源码 4.保存到磁盘中 为什么要保存在磁盘中 索引本来是存储在内存中的&#xff0c;为什么要将其保存在硬盘中&#xff1f; …...

2024年《网络安全事件应急指南》

在这个信息技术日新月异的时代&#xff0c;网络攻击手段的复杂性与日俱增&#xff0c;安全威胁层出不穷&#xff0c;给企事业单位的安全防护能力带 来了前所未有的挑战。深信服安全应急响应中心&#xff08;以下简称“应急响应中心”&#xff09;编写了《网络安全事件应急指南》…...

前端的知识(部分)

11 前端的编写步骤 第一步:在HTML的页面中声明方法 第二步:在<script>中定义一个函数,其中声明一个data来为需要的数据 赋值一个初始值 第三步:编写这个方法实现对应的功能...

OPC UA、MQTT 和 HTTP性能分析及使用场景推荐

在选择适合的服务性能协议时&#xff0c;OPC UA、MQTT 和 HTTP 每种都有其独特的优势和适用场景&#xff0c;因此最佳选择取决于具体的应用需求和技术环境。以下是基于不同维度对比这三种协议的分析&#xff1a; 通信效率 OPC UA&#xff1a;通常用于车间环境&#xff0c;提供…...

并发修改导致MVCC脏写问题

并发修改导致MVCC脏写问题 一、概要 1.1 业务场景 数据库表结构设计&#xff1a; 一个主档数据&#xff0c;通过一个字段&#xff0c;逗号分隔的方式去关联其他明细信息的id。 如主档数据A&#xff0c;有3条明细数据与A关联&#xff0c;其id分别是1,2,3&#xff0c;那么其存…...

跌倒数据集,5345张图片, 使用yolo,coco json,voc xml格式进行标注,平均识别率99.5%以上

跌倒数据集&#xff0c;5345张图片&#xff0c; 使用yolo&#xff0c;coco json&#xff0c;voc xml格式进行标注&#xff0c;平均识别率99.5%以上 &#xff0c;可用于某些场景下识别人是否跌倒或摔倒并进行告警。 数据集分割 训练组99&#xff05; 5313图片 有效集0&am…...

Java转C之CMake

对于一位从 Java 转到 C 或 C 的工程师&#xff0c;理解 CMake 和其指令非常重要&#xff0c;因为 CMake 是目前 C/C 项目中最常用的构建工具。CMake 本质上是一个跨平台的自动化构建系统&#xff0c;它通过 CMakeLists.txt 文件来管理和配置项目的构建过程。在学习 CMake 的过…...

如何自己创建database.js文件来初始化本地sqlite数据库

如何自己创建database.js文件来初始化本地sqlite数据库&#xff01;下面是一个案例展示&#xff0c;帮助大家&#xff0c;快速的视线&#xff0c;本地sqlite数据库信息初始化。 为了使用 database.js 文件初始化 SQLite 数据库并存储解签内容&#xff0c;你需要按以下步骤操作。…...

【汇编语言】内中断(三) —— 中断探险:从do0到特殊响应的奇妙旅程

文章目录 前言1. do01.1 do0程序1.2 存放字符串&#xff0c;得到完整的程序1.3 分析初步完成的程序1.4 正确的完整程序1.5 分析正确的完整程序 2. 设置中断向量3. 单步中断3.1 什么是单步中断&#xff1f;3.2 CPU为什么要提供单步中断3.2.1 思考一下Debug功能3.2.2 Debug是如何…...

0006.基于SpringBoot+element付费问答系统

适合初学同学练手项目&#xff0c;部署简单&#xff0c;代码简洁清晰&#xff1b; 愿世界和平再无bug 一、系统架构 前端&#xff1a;vue| elementui 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven 二、登录角色 1.管理员 2.用户 …...

SpringBoot feign基于HttpStatus重试

场景 基于springboot开发的项目&#xff0c;对接第三方&#xff0c;第三方的接口有限流策略&#xff0c;某个时间段内有调用频率限制&#xff0c;返回的状态码HttpStatus不是200&#xff0c;而HttpStatus是429。现基于HttpStatus我们发起的重试。 技术点 springbootfeign fe…...

【记录49】vue2 vue-office在线预览 docx、pdf、excel文档

vue2 在线预览 docx、pdf、excel文档 docx npm install vue-office/docx vue-demi0.14.6 指定版本 npm install vue-office/docx vue-demi <template><VueOfficeDocx :src"pdf" style"height: 100vh;" rendere"rendereHandler" error&…...

正则表达式中^的用法

正则表达式中^的用法 1.用法一: 限定开头 文档上给出了解释是匹配输入的开始&#xff0c;如果多行标示被设置成了true&#xff0c;同时会匹配后面紧跟的字符 比如 /^A/会匹配"An e"中的A&#xff0c;但是不会匹配"ab A"中的A 比如(\s|^)表示空字符串或字…...

WPF 关于界面UI菜单权限(或者任意控件的显示权限)的简单管理--只是简单简单简单简单

1.定义你的User类 public class User{public User(){ID ObjectId.NewObjectId().ToString();}public string? ID { get; set; }public string? Account { get; set; }public string? Password { get; set; }public string? PasswordMD5 { get; set; }public AccountType?…...

Https身份鉴权(小迪网络安全笔记~

附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;若有错误欢迎指正&#xff01; 5.2 Https&身份鉴权 引子&#xff1a;上一篇主要对Http数据包结构、内容做了介绍&#xff0c;本篇则聊聊Https、身份鉴权等技术。 …...

AngularJS 输入验证

AngularJS 输入验证 AngularJS 是一个强大的 JavaScript 框架,它允许开发者构建动态的、高性能的 Web 应用程序。在处理用户输入时,确保数据的准确性和完整性至关重要。AngularJS 提供了一套内置的输入验证机制,可以帮助开发者轻松地实现这一目标。 为什么需要输入验证? …...

【网络安全】WIFI WPA/WPA2协议:深入解析与实践

WIFI WPA/WPA2协议&#xff1a;深入解析与实践 1. WPA/WPA2 协议 1.1 监听 Wi-Fi 流量 解析 WPA/WPA2 的第一步是监听 Wi-Fi 流量&#xff0c;捕获设备与接入点之间的 4 次握手数据。然而&#xff0c;设备通常不会频繁连接或重新连接&#xff0c;为了加速过程&#xff0c;攻…...

前端使用xlsx-js-style导出Excel,带样式,并处理合并单元格边框显示不全和动态插入表头解决

一、在学习之前&#xff0c;先给出一些学习/下载地址&#xff1a; xlsx-js-style下载地址 https://github.com/gitbrent/xlsx-js-style 或者 https://www.npmjs.com/package/xlsx-js-style SheetJS中文教程&#xff1a; https://xlsx.nodejs.cn/docs/csf/cell 二、先看样…...

自动化工具ansible部署和实践

1 介绍和部署 1.1 介绍 ansible的功能 我爱你在当今的IT自动化领域&#xff0c;Ansible无疑是一个无法被忽视的重要角色。其便利性和高效性受到了广大开发者和系统管理员的一致好评&#xff0c;成为了配置管理和应用部署的首选工具。然而&#xff0c;对于一些初学者来说&#…...

无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火

冬季天干物燥&#xff0c;大风天气频繁&#xff0c;是森林火灾的高发期。相比传统的人力巡查&#xff0c;无人机具有更高的灵敏度和准确性&#xff0c;尤其在夜间或浓雾天气中&#xff0c;依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输&#xff0c;帮助巡…...

React Fiber

React Fiber 是 React 16 引入的全新重写的协调&#xff08;Reconciliation&#xff09;算法的实现&#xff0c;旨在改善 React 的更新机制和性能&#xff0c;尤其是在复杂应用和大量更新的场景下。它使得 React 更加灵活、可调度&#xff0c;能够实现优先级控制和中断更新等特…...

【前端】JavaScript 中的 map() 方法:高级解析与应用

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;map() 方法的定义与核心特性1.1 方法定义1.2 主要特性 &#x1f4af;map() 方法的语法与高级用法2.1 基本语法2.2 简化写法与箭头函数2.3 结合链式操作 &#x1f4af;ma…...

《智能体开发实战(高阶)》四、系统化的日志周报智能体开发计划

智能体扩展与完善规划 为了将前几个章节的智能体逐步扩展为支持整个公司团队使用的高效工具,以下是分阶段的完善与扩写规划。每个阶段旨在提升功能覆盖范围、处理能力和用户体验,并为企业提供实际价值。 阶段一:基础功能完善 目标:巩固现有功能,提升健壮性和适用性。 支…...

什么是Apache日志?为什么Apache日志分析很重要?

Apache是全球最受欢迎的Web服务器软件&#xff0c;支持约30.2%的所有活跃网站。凭借其可靠性、灵活性和强大的功能&#xff0c;Apache数十年来一直是互联网的中坚力量。 一、Apache Web服务器的工作原理 Apache Web服务器的工作原理如下&#xff1a; 接收HTTP请求&#xff1…...

Mybatis——(2)

2.2 Mybatis 工具类&#xff08;了解&#xff09; 为了简化MyBatis的开发&#xff0c;可将MyBatis进一步封装。 import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apa…...

景联文科技入选中国信通院发布的“人工智能数据标注产业图谱”

近日&#xff0c;由中国信息通信研究院、中国人工智能产业发展联盟牵头&#xff0c;联合中国电信集团、沈阳市数据局、保定高新区等70多家单位编制完成并发布《人工智能数据标注产业图谱》。景联文科技作为人工智能产业关键环节的代表企业&#xff0c;入选图谱中技术服务板块。…...

修改浏览器地址栏参数

Vue 修改当前页面地址栏参数 function updateUrlParameter(param: string, value: string) {const url new URL(window.location.href); // 获取当前页面的 URL// 解析哈希部分const hash url.hash ? url.hash.slice(1) : "";const [path, queryString] hash.sp…...