讲师中心 微信公众号
AI工具推荐 视频效率加速

大型电商网站商品列表在CSS中如何按BEM标准命名?

轻强同学_2136

轻强同学_2136

发布时间:2026-09-22 12:52:22

|

478人浏览过

|

来源于php中文网

原创

product-list 是合法 Block,因能跨页复用、独立渲染与交互;homepage-product-list 等含页面语义的则不是,因其绑定上下文导致复用即错乱。

大型电商网站商品列表在css中如何按bem标准命名?

商品列表本身是不是 Block?先看它能不能跨页复用

直接说结论:product-list 是合法 Block,但 homepage-product-listsearch-result-list 不是。前者能用在首页、搜索页、分类页、弹窗推荐位;后者一写就锁死上下文,后续任何复用尝试都会触发样式错乱或 JS 选择器失效。

判断标准就一条:这个 UI 单元是否脱离当前页面后,仍能独立渲染、交互、埋点?能,就是 Block;不能,说明它还没切到合理边界。

  • product-list 合格:结构稳定(标题+网格+分页)、数据源抽象(支持传入任意商品数组)、无隐含 DOM 依赖(不假设父级有 .main-content
  • category-product-list 不合格:“category” 是业务位置,不是功能语义;一旦用在搜索页,类名就失焦,Sass 变量映射和 CI 校验全失效
  • 命名必须小写 + 中划线:productlistProductList 都不行——grep 查不到、VS Code 插件不补全、stylelint-selector-bem-pattern 直接报错

列表里的卡片、分页、加载态怎么拆 Element?别嵌套三层

product-list__item 是对的,product-list__item__image 就越界了。BEM 明确禁止元素再带子元素,因为这等于把 DOM 层级硬编码进类名,破坏可移植性。

常见错误是顺着 HTML 结构一路往下写:<div class="product-list"><div class="product-list__item"><div class="product-list__item__image">...</div></div></div>。这种写法会让工具链拒绝编译,CI 构建失败,且无法支持卡片在邮件模板中单独渲染。

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

CSS婚礼策划服务机构宣传网站模板
CSS婚礼策划服务机构宣传网站模板

CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载
  • 所有一级子节点都应是 product-list 的直接 Element:product-list__titleproduct-list__gridproduct-list__paginationproduct-list__loading
  • product-list__grid 内部若需控制列数,用修饰符:product-list__grid--cols-2product-list__grid--cols-4,而不是新增 product-list__grid__col
  • 如果“图片下方的价格标签”总和图片强耦合,且在多个列表中重复出现,它不该是 product-list__item__price,而应抽成独立 Block:price-tag,然后在 item 里用 product-list__item__price-tag

Modifier 怎么写才不会后期全量替换?避开颜色/尺寸类名

product-list--compact 安全,product-list--red 危险。电商项目换主题色是常态,一旦用了 --red,下次改品牌色就得全局搜改,还容易漏掉 JS 动态拼接的类名(比如 el.classList.add('product-list--red'))。

Modifier 必须表达可预测的状态或语义,而非视觉结果。它要能回答“这个列表现在处于什么逻辑状态?”而不是“它现在看起来是什么颜色?”

  • 推荐写法:product-list--loadingproduct-list--emptyproduct-list--infinite-scrollproduct-list--with-filters
  • 响应式断点下沉到 Modifier 层:product-list__grid--mobile-2 而非媒体查询里写 .product-list__grid { @media (max-width: 768px) { grid-template-columns: repeat(2, 1fr); } } ——这样便于统一开关、支持服务端渲染条件注入
  • 慎用 is- 类:如 is-hidden 是通用状态,不属于 BEM 范畴;BEM 的 Modifier 必须绑定到具体 Block,product-list--hidden 才合规

HTML 里要不要显式写全类名?JS 拿不到节点就白搭

只改 CSS 类名、不改 HTML 是最常见返工原因。比如把旧代码 <div class="product-list"><div class="item">...</div></div> 改成 .product-list__item,但 HTML 里还是 class="item",那所有 JS 查询 document.querySelectorAll('.product-list__item') 都为空。

BEM 的作用域隔离完全依赖类名本身,不依赖 DOM 层级。这意味着每个元素必须在 HTML 中显式声明完整 BEM 类名,且只含一个 Block 相关类。

  • 正确 HTML:<div class="product-list"><div class="product-list__item"><div class="product-list__item__image"> ❌ 错误,__item__image 违反语法
  • 正确 HTML:<div class="product-list"><div class="product-list__item"><div class="product-list__image"> ✅ 元素平级,无嵌套
  • JS 里不要用 querySelector('.item'),必须用 querySelector('.product-list__item') ——否则在详情页插入同结构卡片时,会误取到无关节点
  • 组件化场景下(React/Vue),Block 名建议定义为常量:const BLOCK = 'product-list';,所有类名基于它派生,避免拼写不一致
真正卡住落地的,从来不是“要不要加双下划线”,而是 Block 边界是否经得起跨页复用考验、Element 是否真被当作平级单元处理、Modifier 是否承载了可演进的业务状态。这些地方一旦松动,BEM 就退化成一种徒增类名长度的表面规范。

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

3796

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

857

2023.07.27

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1698

2023.07.28

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

3046

2023.08.01

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

5945

2023.08.10

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

5071

2023.08.10

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

1777

2023.08.21

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

2391

2023.08.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

0

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

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

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 5.6万人学习

CSS教程
CSS教程

共754课时 | 93.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn