《CSS 简易速速上手小册》第7章:CSS 预处理器与框架(2024 最新版)

在这里插入图片描述

文章目录

  • 7.1 Sass:更高效的 CSS 编写
    • 7.1.1 基础知识
    • 7.1.2 重点案例:主题颜色和字体管理
    • 7.1.3 拓展案例 1:响应式辅助类
    • 7.1.4 拓展案例 2:深色模式支持
  • 7.2 Bootstrap:快速原型设计和开发
    • 7.2.1 基础知识
    • 7.2.2 重点案例:构建响应式导航栏
    • 7.2.3 拓展案例 1:使用卡片组件展示内容
    • 7.2.4 拓展案例 2:定制 Bootstrap 主题
  • 7.3 Tailwind CSS:实用主义的 CSS 框架
    • 7.3.1 基础知识
    • 7.3.2 重点案例:构建一个响应式导航菜单
    • 7.3.3 拓展案例 1:创建一个带有卡片布局的网格
    • 7.3.4 拓展案例 2:自定义按钮样式

7.1 Sass:更高效的 CSS 编写

Sass(Syntactically Awesome Stylesheets)是一个强大的CSS扩展语言,它引入了许多有用的特性,如变量、嵌套、混入(Mixins)、继承(Inheritance)、和模块(Modules),从而使得CSS的编写变得更加高效和可维护。

7.1.1 基础知识

  • 变量:允许你存储信息,比如颜色、字体堆或任何CSS值,使得你能够在整个样式表中重用它们。
  • 嵌套:让你能够在一个选择器内嵌套另一个选择器的样式,这样可以减少代码的重复并保持样式表的清晰。
  • 混入(Mixins):是可以重用的代码块,可以接受参数,使得你可以定义一组可复用的样式。
  • 继承(Inheritance):让你可以基于一个选择器集继承另一个的样式,有助于保持你的样式表的DRY(Don’t Repeat Yourself)。
  • 模块(Modules):Sass 1.23.0引入的新特性,允许你将Sass代码分割成更小的、可维护的片段。

7.1.2 重点案例:主题颜色和字体管理

假设你正在开发一个需要支持多种主题颜色和字体的网站,Sass的变量和混入可以使这项工作变得简单。

  • Sass 样式
// 定义变量
$primary-color: #007bff;
$secondary-color: #6c757d;
$font-stack: Helvetica, sans-serif;// 使用变量
body {font-family: $font-stack;color: $primary-color;
}.button {@mixin button-variant($color) {background-color: $color;border: 1px solid darken($color, 5%);&:hover {background-color: lighten($color, 5%);}}@include button-variant($primary-color);
}

通过定义颜色和字体变量以及按钮的混入,我们可以轻松地调整和应用主题样式。

7.1.3 拓展案例 1:响应式辅助类

利用Sass的混入和循环,我们可以创建一系列响应式辅助类,用于快速调整元素的间距、大小等。

  • Sass 样式
@mixin responsive-margin($property, $values) {@each $size, $value in $values {.m-#{$property}-#{$size} {margin-#{$property}: $value;}}
}@include responsive-margin(left, ('sm': 5px, 'md': 10px, 'lg': 15px));

这段代码通过混入和循环生成了一系列关于左边距的响应式辅助类。

7.1.4 拓展案例 2:深色模式支持

使用Sass的变量和条件语句,我们可以为网站添加深色模式支持,让用户在不同的视觉模式之间切换。

  • Sass 样式
$light-theme: (background: #fff,text: #000,
);$dark-theme: (background: #333,text: #fff,
);body {@if $theme == dark {background-color: map-get($dark-theme, background);color: map-get($dark-theme, text);} @else {background-color: map-get($light-theme, background);color: map-get($light-theme, text);}
}

这段代码通过条件语句切换深色和浅色主题的样式设置。

通过掌握Sass,你的CSS编写将变得更加高效、组织化和强大。无论是管理复杂的样式系统、创建可复用的UI组件,还是实现主题切换功能,Sass都能让这些任务变得轻而易举。让我们开始利用Sass的高级特性,为我们的网站设计注入更多的活力和灵活性吧!

在这里插入图片描述


7.2 Bootstrap:快速原型设计和开发

Bootstrap是一个广受欢迎的前端框架,专为快速开发响应式和移动优先的网页而设计。它提供了一套丰富的HTML、CSS和JavaScript组件,帮助设计师和开发者快速构建整洁、功能丰富的网站。

7.2.1 基础知识

  • 网格系统:Bootstrap的网格系统允许你通过行(rows)和列(columns)快速创建布局,确保布局在不同设备上的兼容性和响应性。
  • 组件库:Bootstrap提供了一系列预制的组件,如按钮、导航栏、模态窗口、卡片等,可以直接在项目中使用。
  • 实用工具类:提供了大量的实用工具类,用于调整边距、填充、字体大小、对齐方式等,提高开发效率。
  • 定制性:Bootstrap允许通过Sass变量和混入来定制框架,使得开发的网站符合品牌的视觉标准。

7.2.2 重点案例:构建响应式导航栏

假设你需要为网站创建一个响应式导航栏,Bootstrap的导航组件能够让这个任务变得轻而易举。

  • HTML 结构
<nav class="navbar navbar-expand-lg navbar-light bg-light"><a class="navbar-brand" href="#">Navbar</a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarNav"><ul class="navbar-nav"><li class="nav-item active"><a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a></li><li class="nav-item"><a class="nav-link" href="#">Features</a></li><!-- 更多导航项 --></ul></div>
</nav>

通过使用Bootstrap的导航栏组件,你可以快速实现一个在移动设备上友好的、可折叠的导航栏。

7.2.3 拓展案例 1:使用卡片组件展示内容

卡片组件是展示内容的理想选择,无论是产品、文章还是个人资料。

  • HTML 结构
<div class="card" style="width: 18rem;"><img src="..." class="card-img-top" alt="..."><div class="card-body"><h5 class="card-title">Card title</h5><p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p><a href="#" class="btn btn-primary">Go somewhere</a></div>
</div>

通过简单的HTML标记,Bootstrap使创建具有吸引力的卡片变得非常简单。

7.2.4 拓展案例 2:定制 Bootstrap 主题

定制Bootstrap以符合你的品牌标准是提升网站专业度的关键。

  • Sass 定制
// 自定义变量
$theme-colors: ("primary": #007bff,"success": #28a745,"info": #17a2b8
);// 引入Bootstrap
@import "node_modules/bootstrap/scss/bootstrap";

通过覆盖Bootstrap的默认变量,你可以创建一个独特且与品牌一致的主题,使网站在众多网站中脱颖而出。

Bootstrap为网站的快速原型设计和开发提供了强大的工具和资源。无论是通过使用预制的组件来加速开发,还是利用其灵活的网格系统和实用工具类来实现复杂的布局,Bootstrap都能帮助你有效地实现设计目标。掌握Bootstrap,让你的网页设计和开发工作更加高效和愉悦。

在这里插入图片描述


7.3 Tailwind CSS:实用主义的 CSS 框架

Tailwind CSS以其实用主义的设计哲学在前端开发者中获得了巨大的流行。它是一个功能类优先的CSS框架,提供了大量的实用工具类,使开发者能够通过组合这些类来构建复杂的设计,而无需离开HTML文档。这种方法旨在加快开发速度,同时保持样式的一致性和可维护性。

7.3.1 基础知识

  • 实用工具类:Tailwind 提供了成千上万的实用工具类,用于设置边距、颜色、字体大小、布局等,几乎可以控制元素的每一个样式方面。
  • 响应式设计:通过简单的类前缀,如 sm:, md:, lg:, xl:, 2xl:,可以轻松实现响应式设计。
  • 定制性:虽然Tailwind 提供了大量预设的样式,但它也支持高度定制。通过修改tailwind.config.js文件,开发者可以根据项目需求定制主题颜色、字体大小、断点等。
  • 无用CSS的清除:Tailwind 与PurgeCSS集成,可以自动移除未使用的CSS,确保最终构建的文件尽可能小。

7.3.2 重点案例:构建一个响应式导航菜单

使用Tailwind CSS构建一个响应式导航菜单,该菜单在小屏幕上隐藏,大屏幕上显示。

  • HTML 结构
<div class="flex flex-wrap justify-between items-center"><a href="#" class="text-xl text-gray-800">Logo</a><nav class="hidden md:flex space-x-4"><a href="#" class="text-gray-600 hover:text-gray-800">Home</a><a href="#" class="text-gray-600 hover:text-gray-800">About</a><!-- 更多链接 --></nav>
</div>

通过使用Tailwind的实用工具类,我们可以快速实现一个响应式的导航菜单,md:flex 确保在中等大小的屏幕及以上导航是可见的,而在更小的屏幕上则隐藏。

7.3.3 拓展案例 1:创建一个带有卡片布局的网格

使用Tailwind CSS的网格工具类来创建一个响应式的卡片布局网格。

  • HTML 结构
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4"><div class="bg-white shadow rounded-lg p-4">Card 1</div><div class="bg-white shadow rounded-lg p-4">Card 2</div><!-- 更多卡片 -->
</div>

通过调整grid-cols-1, sm:grid-cols-2, lg:grid-cols-3类,我们可以定义不同屏幕大小下的列数,gap-4则为卡片之间提供了间隔。

7.3.4 拓展案例 2:自定义按钮样式

定制一个按钮样式,并在不同状态下改变其外观。

  • HTML 结构
<button class="btn-primary">Click me</button>
  • Tailwind 配置(在 tailwind.config.js 中):
module.exports = {theme: {extend: {colors: {'brand-blue': '#007bff',}}}
}
  • CSS(使用@apply指令):
.btn-primary {@apply bg-brand-blue text-white py-2 px-4 rounded hover:bg-blue-700;
}

通过在Tailwind配置文件中添加自定义颜色,并使用@apply指令应用实用工具类,我们可以快速创建一个具有品牌特色的按钮,并在悬停时改变背景色。

Tailwind CSS 通过其实用主义的设计哲学,为网页设计和开发带来了前所未有的灵活性和效率。无论是构建响应式布局、实现定制化设计,还是优化最终产物的文件大小,Tailwind都能提供强大的支持。掌握了Tailwind,你就拥有了在现代网页设计领域快速迭代和实现创意的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2778572.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Web】小白友好的Java内存马基础学习笔记

目录 简介 文件马与内存马的比较 文件马原理 内存马原理 内存马使用场景 内存马分类 内存马注入方式 这篇文章主要是概念性的&#xff0c;具体技术细节不做探究&#xff0c;重点在祛魅。 简介 内存马&#xff08;Memory Shellcode&#xff09;是一种恶意攻击技术&…

springBoot,springSecurity返回乱码

框架&#xff1a;SpringBoot3 问题&#xff1a;响应内容乱码 问题代码&#xff1a; // 成功登录响应的内容Overridepublic void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication…

C#使用RabbitMQ-5_主题模式(主题交换机)

简介 主题模式允许发送者根据主题发布消息&#xff0c;而订阅者可以订阅特定的主题。 在主题模式中&#xff0c;生产者发送的消息被发送到一个交换机&#xff08;Exchange&#xff09;&#xff0c;该交换机根据消息的路由键&#xff08;Routing Key&#xff09;和绑定&#x…

Linux之umask的使用

一、umask的作用 umask值用于设置用户在创建新文件和目录时的默认权限。umask值一共有4组数字&#xff0c;其中第1组数字用于定义特殊权限&#xff0c;一般不关心&#xff0c;日常工作中大家用的更多的是后面三组数字。以下图为例&#xff0c;输入“umask”命令之后&#xff0c…

假期刷题打卡--Day29

1、MT1224棋盘 求一个N*N棋盘中的方块总数。 格式 输入格式&#xff1a; 输入整型N 输出格式&#xff1a; 输出整型 样例 1 输入&#xff1a; 2输出&#xff1a; 5备注 考虑到取值范围&#xff0c;可用long整型定义变量 分析过程 这个题目的意思是&#xff0c;在这…

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目&#xff0c;在纠结一个注册中心是在双活机房都准备一个&#xff0c;那主机房的数据如果传过去呢&#xff0c;查了一些资料&#xff0c;最终在官网查到了一个NacosSync 的组件&#xff0c;主要用来做数据传输的&#xff0c;并且支持在线替换注册中心的&a…

数据结构之外部排序

外部排序就是对大型文件的排序&#xff0c;待排序的记录存放在外存。在排序的过程中&#xff0c;内存只存储文件的一部分记录&#xff0c;整个排序过程需要进行多次内外存间的数据交换。   常用的外部排序方法是归并排序&#xff0c;一般分为两个阶段&#xff1a;在第一阶段&…

【Linux】信号概念与信号产生

信号概念与信号产生 一、初识信号1. 信号概念2. 前台进程和后台进程3. 认识信号4. 技术应用角度的信号 二、信号的产生1. 键盘组合键2. kill 命令3. 系统调用4. 异常&#xff08;1&#xff09;观察现象&#xff08;2&#xff09;理解本质 5. 软件条件闹钟 一、初识信号 1. 信号…

vue项目搭建测试

5&#xff0c;项目测试 导入elementplus以及样式 import ElementPlus from element-plus import element-plus/dist/index.csscreateApp(App).use(store).use(router).use(ElementPlus).mount(#app)<template><el-row class"mb-4"><el-button>De…

python统计分析——两样本t检验

参考资料&#xff1a;用python动手学统计学 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() 2、准备数…

【华为 ICT HCIA eNSP 习题汇总】——题目集12

1、企业网络内部常常采用私有 IP 地址进行通信&#xff0c;以下哪个地址属于私有 IP 地址&#xff1f; A、0.1.1.1 B、127.5.4.3 C、128.0.0.5 D、172.24.35.36 考点&#xff1a;网络层 解析&#xff1a;&#xff08;D&#xff09; A类 IP 地址中&#xff0c;10.0.0.0 ~ 10.255…

例36:打开文件读出文件内容

1.建立一个EXE工程&#xff0c;在主窗体上放一个按钮&#xff0c;如图32。 图32 在按钮的单击事件中输入代码&#xff1a; Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)Dim s as StringDim 文件 As CWSTR FF_OpenFileDialog(hWndForm,_"打开…

爬爬今天爬小说————爬虫练习

爬不同的的小说&#xff0c;会有略微的改动。 我今天这个是从一章的提前到全部的提前。 在我们电脑里面了&#xff0c;想怎么看就怎么看。 代码代码&#xff1a; import re import requestsheaders {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x6…

SAP-PP-01-004物料主数据MRP视图参数

一、MRP1 MRP组 系统运行的 mrp 控制参数的组别。包含物料主数据中的一些 MRP 参数字段及工厂运行 MRP 控制设置参数&#xff0c;例如策略组、消耗模式、重计划期间、计划区间、计划时界、BOM 展开、计划订单转换的采购申请&#xff08;PR&#xff09;类型等。 工厂特定的物料…

【Java八股面试系列】JVM-类和对象加载过程

目录 类和对象的加载过程 类的生命周期 类的加载过程 加载 验证 准备 解析 初始化 类卸载 对象的加载过程 类和对象的加载过程 什么是类加载和对象加载? 类加载&#xff08;Class Loading&#xff09;&#xff1a;这是指JVM在运行时将类的字节码文件加载到内存中的…

Cubase学习:音频转midi

大家好!我是诗书画唱!今天要分享的小技巧就是Cubase中的音频转midi的功能!希望对你有所帮助!以后我会在这个账号分享自己知道的很多小技巧!关注我!不迷路!大家也可以关注我后,在我的空间搜索关键词,找到各种对应的教程进行学习,非常的方便!而且自己的教程会尽可能纠…

算法学习——LeetCode力扣二叉树篇3

算法学习——LeetCode力扣二叉树篇3 116. 填充每个节点的下一个右侧节点指针 116. 填充每个节点的下一个右侧节点指针 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树…

【Linux】学习-深入了解文件的读与写

深入了解语言级别(C语言)文件操作的"读"与"写" 在学习前&#xff0c;我们先要知道在Linux下的一个原则&#xff1a;一切皆是文件 如何理解呢&#xff1f;举个外设的例子&#xff0c;比如键盘和显示器&#xff0c;这两个外设也可以其实本质上也是文件&…

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Viterbi译码原理

目录 一、引言 二、Viterbi译码的基本原理 2.1 卷积码与网格图 2.2 Viterbi算法的核心思想 2.3 路径度量与状态转移 三、Viterbi译码算法工作原理详解 3.1 算法流程 3.2 关键步骤 3.3 译码算法举例 3.4 性能特点 四、Viterbi译码的应用场景 4.1 移动通信系统 4.2 卫…

人工智能如何彻底改变身份欺诈

据 AuthenticID 称&#xff0c;近一半的企业报告合成身份欺诈有所增加&#xff0c;而生物识别欺骗和伪造 ID 欺诈尝试也有所增加。 在当今的数字化存在中&#xff0c;消费者和企业都面临着新的挑战&#xff0c;从考虑数字身份的影响到应对生成人工智能等新工具的使用和流行。与…