讲师中心 微信公众号

扫码关注官方订阅号

注册 / 登录
首页
文章
后端开发 web前端 数据库 开发工具 php框架 常见问题 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 自媒体 新闻
专题
后端开发 web前端 数据库 开发工具 php框架 科技 Java 系统教程 电脑教程 硬件教程 手机教程 软件教程 游戏教程 新闻
AI工具
AI 聊天问答 Agent智能体 AI 文本写作 AI 绘画作图 AI 设计工具 AI 视频创作 AI 音频制作 AI 办公学习 AI 编程开发 Prompt指令
学习
大前端 后端开发 数据库 移动端 运维开发 计算机基础
编程手册
大前端 后端开发 数据库 移动端 运维开发 计算机基础
下载
js特效 网站源码 工具下载 类库下载 网站素材 学习资源 插件扩展 手机游戏
最近更新
当前位置:首页 > web前端 > css教程 >

正文

0

0

手把手教你CSS架构之SMACSS

WBOY

WBOY

发布时间:2022-01-20 18:05:48

|

1985人浏览过

|

来源于掘金

转载

本篇文章给大家带来了关于css架构smacss的相关知识,其中会讲到什么是smacss以及该架构分类的相关问题,希望对大家有帮助。

手把手教你CSS架构之SMACSS

因为 CSS 只有一个作用域,如果不注意维护 CSS 代码,则会导致我们写的代码难于阅读和维护,于是我们借助网页本身是有层次的,抽象出来了BEM 方法论。

BEM 简单的三层分法,在应对小中型网站没有问题,但是去应对复杂网站的样式可能就比较困难了,我们需要寻求一个更好的办法。

于是 SMACSS 横空出世了, SMACSS 和 BEM 的关系有点像布局中的 Flex 布局和 Grid 布局的关系。

立即学习“前端免费学习笔记(深入)”;

但是请注意, SMACSS 和 BEM 之前绝不是包含和被包含的问题,就像在应用 Flex 布局和 Grid 布局的时候,铺网站结构我们会更多倾向 Grid,普通简单的二维布局则会采用 Flex,我们会在合适的时机采用合适的方法,SMACSS 和 BEM 也差不多,掌握了思想,应用都是小事。

如果你还没有学过 BEM 可以参考下 CSS 架构之 BEM 这篇文章。

什么是 SMACSS

不难想到,SMACSS 是缩写,这个缩写就是网站的开门注 :Scalable and Modular Architecture for CSS,名字的意思很明确就是要编写模块化、结构化和可扩展的 CSS。

40.png

当你学完 SMACSS,再来理解 Scalable and Modular Architecture for CSS 体会就更深了。

SMACSS 应该怎么读,SMACSS 虽然不是一个单词,但是它是有自己的发音的,音同单词 {smacks}。

SMACSS 的分类

如果给 BEM 找个核心词,那就是分层,如果给 SMACSS 也找个核心词,那肯定就是分类,一字之差,我们来看看 SMACSS 如何进行分类的。

SMACSS 的核心是分类,具体把项目的样式分为了五类:

  • Base(基础)

  • Layout(布局)

  • Module(模块)

  • State(状态)

  • Theme(主题)

接下来我们具体看看五个部分具体的内容。

Base

基础(Base)规则里一般放置默认样式。这些默认样式基本上都是元素选择器,不过也可以包含属性选择器,伪类选择器,孩子选择器,兄弟选择器。本质上来说,一个基础样式定义了元素在页面的任何位置应该是怎么样的。

例如:

html {
    margin: 0;
    font-family: sans-serif;
}
a {
    color: #000;
}
button {
    color: #ababab;
    border: 1px solid #f2f2f2;
}

我们看到 Base 的代码和 CSS resets 非常的相似。

这部分的代码一般我们都是寻求 Normalize.css 或 sanitize.css 的帮助,而不需要自己完成。

Layout

我们先来区分下网站什么部分属于 Layout 什么部分属于 Module,看看下面这个网站截图:

01.png

先来一次大致的划分,主要包括头部、体部、尾部等,这些就是属于 Layout 的。

再来一次细致的划分,Layout 里面的元素还可以继续细分,例如导航栏等,这些都是组件 Module。

Lifetoon
Lifetoon

免费的AI漫画创作平台

下载

Layout 很贴近 HTML 标签,作为网站的骨架,负责布局,Module 更多负责业务展示和交互的部分。

Layout 与 Module 的关系为( > 表示包含):

Layout > Module

如果网站复杂,其实是可以这样的:

> Layout > Module > Layout > Module ...

所以,布局(Layout)规则就是将页面拆分成几个部分,每个部分都可能有一到多个模块。

一般布局类名都是 .l- 开头。

需要注意,官方讲主要的 layout 使用可以使用 ID 选择器,次要的 layout 采用类选择器,对于这个我是绝对不能接受的,我认为应该全用类。

走个实例:

02.png

.l-header {}
.l-primarynav {}
.l-main-content {}

注意,其实现在项目开发,Layout 往往直接被当做组件直接使用了,例如 、

等组件,然后你可以在他们内部去遵循 Module 规则。

Module

看完上一节,Module 就很容易理解了。

模块(Module)  是我们的设计当中可重用,可模块化的部分。插图,侧边栏,产品列表等等都属于模块。

Module 从工程化的角度,你叫它 component 也没多大问题。

走个实例,一个 POST 组件:

@@##@@

类名很简单,以 moudle-name 或 component—name 作为前缀就行了。

State

对于 Module 甚至是 Layout,里面不可避免需要动态交互,比如按钮是不是禁用 disable,布局是不是激活 active,tab 组件是不是展开 expand 等,于是我们需要维护 state 来操作动态变化的部分,这就是第四个部分 State。

State 的类名,一般使用 .is- 来开头,例如:

.is-collapsed {}
.is-expanded {}
.is-active {}
.is-highlighted {}
.is-hidden {}
.is-shown {}
.is-successful {}

Theme

大家多多少少都用过网站的换肤功能,所以 Theme 也算比较常见的了,整个网站上重复的元素,比如颜色、形状、边框、阴影等规则基本都在 Theme 的管辖下,换句话说 Theme 是定义公共类名的地方。

大多数情况下,。我们不想每次创建它们时都重新定义它们。相反,我们想要定义一个唯一的类,我们稍后才将其添加到默认元素中。

.button-large {
    width: 60px;
    height: 60px;
}

不要将这些 SMACSS 主题规则与基本规则混淆,因为基本规则仅针对默认外观,并且它们往往类似于重置为默认浏览器设置,而主题单元更像是一种样式,它提供最终外观,这种特定的配色方案是独一无二的。

如果站点具有多个样式或多个用于不同状态的主题,主题规则也很有用,因此可以在页面上的某些事件期间轻松更改或交换,例如使用主题切换按钮。至少,它们将所有主题样式保存在一个地方,因此您可以轻松更改它们并保持它们井井有条。

SMACSS 目录

项目中使用了 SMACSS 的命名规范,目的大概就是这样的:

手把手教你CSS架构之SMACSS

总结

因为 CSS 只有一个作用域,会导致代码很混乱,很难阅读,也很难扩展,于是出现了BEM ,但是当项目更加复杂的时候,我们需要一个新的更上一个台阶的样式管理方案,这就是 SMACSS ,不用于 BEM 的分层,它把采用的办法是分类,项目中的样式文件被它分为五类,让我样式管理变得更加的方便了。

(学习视频分享:css视频教程)

03.png

相关文章

css 想通过透明度影响背景色但不影响文字怎么办_rgba 背景色替代 opacity

css 想用 HSL 方便调整色相怎么办_hsl() 调整 hue saturation lightness

css 响应式样式写在一起太乱怎么办_拆分为多个媒体 link

css 想让图片随容器滚动而定位怎么办_position absolute 配合 relative

css 文本溢出换行不对怎么办_word-wrap 或 overflow-wrap 控制

相关标签:

css

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

上一篇:css图片的边框怎么设置颜色为渐变色 下一篇:css3如何让盒子水平居中

作者最新文章

夸克浏览器如何调用AI搜索_夸克AI搜索的快捷指令大全

2025-10-19 11:02

夸克浏览器一键启用AI搜索_带你体验夸克AI搜索的强大之处

2025-10-19 18:42

玩转夸克浏览器的AI搜索模式_夸克AI搜索新手入门操作指南

2025-10-20 09:50

夸克浏览器AI搜索最新版教学_探索夸克AI搜索的隐藏功能

2025-10-24 20:48

夸克浏览器怎么用AI搜索_夸克AI搜索正确提问方式教学

2025-10-25 23:12

微信朋友圈怎么设置定时发布 微信朋友圈定时发送图文教程

2026-01-02 09:14

微信朋友圈怎么定时发送 微信朋友圈定时发布设置方法【教程】

2026-01-06 09:59

苹果手机怎么定时发朋友圈 iPhone微信朋友圈自动发布方法【步骤】

2026-01-08 11:11

微信朋友圈能定时发送吗 微信朋友圈定时发送功能开启方法

2026-01-09 08:15

微信朋友圈草稿箱怎么用 微信朋友圈定时发送隐藏技巧

2026-01-10 08:41

热门AI工具

更多
DeepSeek

DeepSeek

幻方量化公司旗下的开源大模型平台

AI大模型

开放平台

豆包大模型

豆包大模型

字节跳动自主研发的一系列大型语言模型

AI大模型

通义千问

通义千问

阿里巴巴推出的全能AI助手

AI大模型

腾讯元宝

腾讯元宝

腾讯混元平台推出的AI助手

文档处理

Excel 表格

文心一言

文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

AI大模型

中文写作

讯飞写作

讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

中文写作

写作工具

即梦AI

即梦AI

一站式AI创作平台,免费AI图片和视频生成。

图片拼接

图画生成

ChatGPT

ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

AI大模型

中文写作

智谱清言 - 免费全能的AI助手

智谱清言 - 免费全能的AI助手

智谱清言 - 免费全能的AI助手

AI大模型

PDF 文档

相关专题

更多
Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

44

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

58

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

11

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

65

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

75

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

21

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板
  • [表单按钮]CSS3窗口登录表单带关闭按钮
  • [图片特效]CSS3绘制iPhoneX手机墙纸切换特效
  • [表单按钮]jQuery联系人生成二维码代码
  • [文字特效]10款鼠标悬停遮罩显示文字特效
  • [文字特效]HTML5 Canvas粒子文字特效
  • [表单按钮]jQuery橙色注册表单验证代码
  • [图片特效]jQuery大屏淡入淡出幻灯片
  • [图片特效]jquery底部带缩略图的幻灯片代码
  • [表单按钮]html5用手机号码注册表单代码
  • [文字特效]饮料瓶造型文字旋转特效
  • [其它模板]思翔企(事)业单位文件柜 build 20080313
  • [企业站源码]雅龙智能装备工业设备类WordPress主题1.0
  • [电商源码]威发卡自动发卡系统
  • [电商源码]卡密分发系统
  • [电商源码]中华陶瓷网
  • [电商源码]简洁粉色食品公司网站
  • [电商源码]极速网店系统
  • [电商源码]淘宝妈妈_淘客推广系统
  • [电商源码]积客B2SCMS商城系统
  • [电商源码]CODEC2I 众筹系统
  • [网站素材]极简线条玉兰花卉插画矢量素材
  • [网站素材]手绘烹饪调料香料合集矢量素材
  • [网站素材]惬意午后咖啡阅读时光矢量插画
  • [网站素材]中国宏伟古建筑矢量素材
  • [网站素材]黑色星期五耳机折扣横幅设计下载
  • [网站素材]国潮风莲花荷塘插画矢量素材
  • [网站素材]假日快乐烟花背景ps素材下载
  • [网站素材]新春喜庆剪纸喜鹊窗花矢量素材
  • [网站素材]绿色生态梯田自然风景矢量素材
  • [网站素材]紫色风格2026折扣横幅海报设计下载
  • [前端模板]驾照考试驾校HTML5网站模板
  • [前端模板]驾照培训服务机构宣传网站模板
  • [前端模板]HTML5房地产公司宣传网站模板
  • [前端模板]新鲜有机肉类宣传网站模板
  • [前端模板]响应式天气预报宣传网站模板
  • [前端模板]房屋建筑维修公司网站CSS模板
  • [前端模板]响应式志愿者服务网站模板
  • [前端模板]创意T恤打印店网站HTML5模板
  • [前端模板]网页开发岗位简历作品展示网页模板
  • [前端模板]响应式人力资源机构宣传网站模板

相关下载

更多
php商城系统
淘源码商城PHP淘宝查信誉
PHP房产程序[BBWPS]
PHP简约自动发卡平台个人版
ERMEB域名PHP离线网络授权系统
Difeye-敏捷的轻量级PHP框架
大泉州汽车网PHP整站程序

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

CSS教程
CSS教程

共754课时 | 19万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)

共79课时 | 151.2万人学习

phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 53.4万人学习

最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

最新文章

更多
css 伪类与元素状态变化_如何通过 :active 和 :hover 实现动态效果
css 类选择器和 id 选择器区别_开发中如何正确使用
css 想让按钮在加载时平滑弹入动画怎么办_使用 transform translateY keyframes 实现弹入
css面板展开后布局突然挤压怎么办_使用transition-height实现缓慢扩展
css grid布局子元素无法对齐怎么办_使用justify items和align items调整位置
css grid布局中的minmax函数_控制网格项的最小最大尺寸
css 想通过透明度影响背景色但不影响文字怎么办_rgba 背景色替代 opacity
display: none和visibility: hidden的区别是什么?
css 想用 HSL 方便调整色相怎么办_hsl() 调整 hue saturation lightness
css 响应式样式写在一起太乱怎么办_拆分为多个媒体 link
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号

微信扫码
关注PHP中文网服务号

技术交流群

QQ扫码
加入技术交流群

PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • PHP学习

  • 技术支持

  • 返回顶部