技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-13-2.sass工具的变量

简介: 上篇文章我们学习了如何在node + vue中安装sass工具,并对 嵌套 (nested rules) 功能做出了演示,本篇文章我们对sass工具的另一大功能 变量(variables) 进行学习和使用。

上篇文章我们学习了如何在node + vue中安装sass工具,并对 嵌套 (nested rules) 功能做出了演示,本篇文章我们对sass工具的另一大功能 变量(variables) 进行学习和使用。

1.为什么使用变量(variables)功能

设计师在整个页面的视觉设计工作中,会根据网站特性、产品功能、企业文化等特点对页面进行一个色彩的基础定位,每个成功的网站设计都会有其确定的主色、辅助色和点缀色等。同样的,一个网站中的字体同样影响着一个网站的整体视觉。
当我们在全局对一个颜色、字体进行变量的定义,并且在页面中使用该变量颜色后,在后期颜色、字体的调整中会变得方便且严谨,不需要在每个页面查找需要修改的颜色和字体,也不用担心少改了哪个部分。

2.定义颜色变量在这里插入图片描述

通过键值对形式对颜色变量进行定义,格式与数组相同,但语法符号有差异。其中$color中的变量名可以不加引号,由于黑色白色等与后面定义的颜色有冲突容易引起错误,所以一般都用引号引起避免键值对与定义颜色字段的冲突(如 white: white, 就容易引发冲突,所以我们常用 "white": white, 来定义)。

3.使用颜色变量

颜色我们已经定义好了,该如何使用呢?并不是直接在前端组件中引入这个sass变量,而是将我们定义的变量进行遍历,其逻辑是用少量的代码生成大量我们需要的样式。

// colors常用颜色
$colors: (
    // 主色
    "primary": #a80506,
    // 辅色
    "auxiliary": #054ea8,
    // 点缀色
    "Embellishment":#db9e3f,

    // 白色
    "white": #fff,
    // 黑色
    "black": #000,
    // 灰色
    "gray": #777,
);
// 从$colors变量中找到 $colorKey 键值,再找到 $color 色值,进行遍历。
// 在class名中使用变量需要用 "#{}" 方法,而色值中使用直接使用变量即可。
@each $colorKey, $color in $colors {
    // 文字颜色
    .text-#{$colorKey} {
        color: $color;
    }
    // 背景颜色
    .bg-#{$colorKey} {
        background: $color;
    }
}

此时我们进入web端,查看一下生成的颜色。

cd web 
npm run serve 

在这里插入图片描述
此时,我们定义的颜色就以类名的形式生成了css代码,我们可以随时使用。

4.使用直接量定义类名

同样使用遍历方法生成css类名,但某些时候我们没有必要为了几个值定义一个变量,例如文本的左中右对其
普通css中,我们需要编写css:

text-left{
    text-align: left;
}
text-right{
    text-align: right;
}
text-center{
    text-align: center;
}

如果我们使用sass中的遍历方法:

@each $var in (left, center, right) {
    .text-#{$var}{
        text-align: $var;
    }
}

同样可以生成类名:
在这里插入图片描述
同样的方法,我们还可以定义字体大小、粗细等样式。

// 使用px to rem插件设置默认字体大小为13px
// 设置基础字体大小
$base-font-size: 1rem;
// 根据基础字体大小设置字体大小
$font-size: (
    // 使用px to rem插件,alt + z 转化px到rem
    // xs为10px
    xs: 0.7692,
    // sm为12px
    sm: 0.9231,
    // md为13px
    md: 1,
    // lg为14px
    lg: 1.0769,
    // xl为16px
    xl: 1.2308,
);
@each $sizeKey, $size in $font-size {
    // 文字颜色
    .fs-#{$sizeKey} {
        // 尺寸比例 * 基础字体大小
        font-size: $size * $base-font-size;
    }
}

在这里插入图片描述

px是相对于 浏览器和显示屏分辨率进行大小的定义,而rem是针对 HTML根元素进行大小比例的定义。

这就是sass的 变量 (variables) 功能,掌握了这个方法,我们应该就掌握做出像bootstrap, layui等常见大型css框架的类名定义方法。

5.参考bootstrap制作间距类名
// 间距spacing
// bootstrap中,mt-1 -> margin-top: 1rem, pb-2 -> padding-bottom: 2rem

// 类型
$spacing-types: (m: margin, p: padding);
// 方向
$spacing-directions: (t: top, r: right, b: bottom, l:left);
// 尺寸
$base-spacing-size: 1rem; // 基础尺寸
$spacing-sizes: (0: 0, 1: 0.25, 2: 0.5, 3: 1, 4: 1.5, 5: 3); // 基础尺寸为准的倍数
@each $typeKey, $type in $spacing-types {
    @each $directionKey, $direction in $spacing-directions {
        @each $sizeKey, $size in $spacing-sizes {
            // 样版: .mt-1 { margin-top: 0.25rem }
            .#{$typeKey}#{$directionKey}-#{$sizeKey} {
                #{$type}-#{$direction}: $size * $base-spacing-size;
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
除了margin-top: 1rem;等以外还有margin: 1rem;等:

// m-1, p-1等只需要嵌套类型变量$spacing-directions和尺寸变量$spacing-sizes
@each $typeKey, $type in $spacing-types {
    @each $sizeKey, $size in $spacing-sizes {
        // 样版: .mt-1 { margin-top: 0.25rem }
        .#{$typeKey}-#{$sizeKey} {
            #{$type}: $size * $base-spacing-size;
        }
    }
}

在这里插入图片描述
以此类推,还有上下边距(margin-top + margin- bottom)和左右边距(margin-left + margin-right),分别为mx-0,px-0和my-0,py-0。

// 水平、垂直方向边距
@each $typeKey, $type in $spacing-types {
    @each $sizeKey, $size in $spacing-sizes {
        // mx-1,px-1
        .#{$typeKey}x-#{$sizeKey} {
            #{$type}-left: $size * $base-spacing-size;
            #{$type}-right: $size * $base-spacing-size;
        }
        // my-1,py-1
        .#{$typeKey}y-#{$sizeKey} {
            #{$type}-top: $size * $base-spacing-size;
            #{$type}-bottom: $size * $base-spacing-size;
        }
    }
}

在这里插入图片描述
如此,就可以实现像bootstrap中的类名样式。

相关文章
|
3月前
|
JavaScript 前端开发 安全
【逆向】Python 调用 JS 代码实战:使用 pyexecjs 与 Node.js 无缝衔接
本文介绍了如何使用 Python 的轻量级库 `pyexecjs` 调用 JavaScript 代码,并结合 Node.js 实现完整的执行流程。内容涵盖环境搭建、基本使用、常见问题解决方案及爬虫逆向分析中的实战技巧,帮助开发者在 Python 中高效处理 JS 逻辑。
|
8月前
|
JavaScript 前端开发 API
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
475 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
8月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
291 8
|
9月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
7677 23
|
10月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
282 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
196 3
springboot解决js前端跨域问题,javascript跨域问题解决
|
12月前
|
存储 JavaScript NoSQL
Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,基于Node.js 22.3.0编写,包含26个实战案例和43个上机练习,旨在帮助读者从基础到进阶全面掌握Node.js技术,适用于初学者、进阶开发者及全栈工程师。
216 9
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
470 1
|
5月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
1110 11

热门文章

最新文章