深入解读CSS的OOCSS和SMACSS以及BEM

标题:深入解读CSS的OOCSS和SMACSS以及BEM

作为网站的作者,你需要深入理解和掌握 CSS 的一些重要的技术,其中 OOCSS、SMACSS 和 BEM 是其中比较重要的三种技术。

OOCSS

OOCSS(Object-Oriented CSS)是一种 CSS 样式编写的方法,它的主要思想是将样式与 HTML 结构分离开来,将样式抽象为“对象”,从而实现样式的高度复用。OOCSS 的核心特点是“模块化”,将网页拆分成多个模块,每个模块都有自己的 CSS 样式。每个模块都只需定义自己的基本样式和组件,让整个网页更加清晰易用。

示例1:

// 定义了一个组件为.flexbox,可以使该组件内的元素具有弹性布局的样式
.flexbox {
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}

示例2:

// 定义了一个基本的列表样式类,以最小化代码重复
.list {
  margin: 0;
  padding: 0;
  list-style: none;
}

// 定义了一个列表样式类,同时该样式类继承了 .list 样式
.list-inline {
  display: inline-flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
}
.list-inline li {
  margin-right: 10px;
}

SMACSS

SMACSS 是关于如何管理并组织 CSS 的一本书,全称为 Scalable and Modular Architecture for CSS。SMACSS 旨在探讨一种 CSS 工作方式,以创建更易于开发、更易于维护和更可扩展的 Web 网站。

SMACSS 主张将 CSS 样式分为五个分类:

  1. 基本样式(Base styles):包含了项目的重置和默认样式信息。
  2. 布局样式(Layout):负责管理整个页面及其各个结构。
  3. 模块(Module):每个模块应该是相对独立的,可重复使用的组件。
  4. 状态(State):用于定义“子状态”,例如 hover 或副本。
  5. 主题(Theme):关于配色等主题属性的定义。

示例1:

/* 基本样式 */
html, body, div, span, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a {
  margin: 0;
  padding: 0;
  font-size: 100%;
  font-weight: normal;
  background: transparent;
  border: none;
  outline: none;
}

/* 布局样式 */
.container {
  width: 960px;
  margin: 0 auto;
}

/* 模块样式 */
.shopping-cart {
  background-color: #eee;
  border: 1px solid #999;
  border-radius: 5px;
  padding: 10px;
}

/* 状态样式 */
.shopping-cart:hover {
  background-color: #ddd;
}

/* 主题样式 */
body .theme-dark .shopping-cart {
  background-color: #333;
  color: #fff;
}

示例2:

/* 基本样式 */
html, body, div, span, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a {
  margin: 0;
  padding: 0;
  font-size: 100%;
  font-weight: normal;
  background: transparent;
  border: none;
  outline: none;
}

/* 布局样式 */
.container {
  width: 960px;
  margin: 0 auto;
}

/* 模块样式 */
.teaser {
  background-color: #eee;
  border: 1px solid #999;
  border-radius: 5px;
  padding: 10px;
}
.teaser h2 {
  font-size: 1.8em;
  font-weight: bold;
  margin-bottom: 10px;
}
.teaser p {
  font-size: 1.2em;
  line-height: 1.5em;
}

/* 状态样式 */
.teaser:hover {
  background-color: #ddd;
  cursor: pointer;
}

/* 主题样式 */
body .theme-dark .teaser {
  background-color: #333;
  color: #fff;
}

BEM

BEM 代表块(Block)、元素( Element)和修饰符(Modifier),是通过一种易于理解的方式来给 HTML 和 CSS 添加结构的方法。

BEM 的核心理念就是将每个组件看作一个整体,由“块”、“元素”和“修饰符”三个部分组成。

  • 块:代表一块明确的区域或组件,例如“按钮”、“导航栏”等。
  • 元素:代表块里面的一部分,例如按钮的“图片”、“标题”等。
  • 修饰符:更改块或元素的外观或状态。

示例1:

<div class="menu">
  <a class="menu__link menu__link--active" href="/home">首页</a>
  <a class="menu__link" href="/news">新闻</a>
  <a class="menu__link" href="/about">关于</a>
</div>

示例2:

<div class="card">
  <div class="card__avatar"></div>
  <h3 class="card__title">Jane Doe</h3>
  <div class="card__body">
    <p>Hi, I'm Jane Doe.</p>
  </div>
  <div class="card__contacts">
    <a class="card__contact card__contact--phone" href="tel:+1234567890">Call</a>
    <a class="card__contact card__contact--email" href="mailto:jane.doe@example.com">Email</a>
  </div>
</div>

以上是关于 OOCSS、SMACSS 和 BEM 的详细介绍,如果您能在实际开发中善用上述技术,那么您将更加得心应手,并提高您的网站开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入解读CSS的OOCSS和SMACSS以及BEM - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 使用css实现水波加载动画效果

    使用CSS实现水波加载动画效果可以让网站变得更加生动有趣。下面我将详细讲解如何实现这个效果,并提供两个示例供参考。 实现原理 实现水波效果的原理是使用渐变和动画。首先,我们需要创建一个div元素,并设定其width、height等样式。然后,通过background属性,设置该元素的背景为一个终点位置较高的径向渐变,该径向渐变可以模拟水波的起始位置。接着,我…

    css 2023年6月10日
    00
  • 使用CSS设置滚动条样式

    以下是“使用CSS设置滚动条样式”的完整攻略: 使用CSS设置滚动条样式 CSS可以通过伪元素和伪类来设置滚动条的样式,以下是实现滚动条样式的步骤: 使用伪元素和伪类选择器来选择滚动条。 设置滚动条的宽度、高度、颜色等样式属性。 以下是两个示例说明: 示例1:使用伪元素和伪类选择器设置滚动条样式 假设一个用户需要设置滚动条的样式,可以按照以下步骤操作: 在C…

    css 2023年5月18日
    00
  • ie css margin auto 不居中解决方案

    当使用IE浏览器时,使用margin属性的auto值来实现居中是一个常见的做法。但是由于IE浏览器的盒子模型计算方式不同于其他浏览器,会出现不居中的情况。下面将提供详细的解决方案。 问题分析 当使用margin:auto时,其他浏览器会根据标准盒子模型计算,将元素水平居中。而IE浏览器会根据传统盒子模型计算,导致元素无法居中。 解决方案 方案一:左右定位实现…

    css 2023年6月9日
    00
  • 利用纯CSS实现动态的文字效果实例

    这里是“利用纯CSS实现动态的文字效果实例”的完整攻略。 1.选择合适的字体 在实现动态文字效果之前,我们需要选择一种合适的字体来突出文字的视觉效果。一些常用的字体如下: Helvetica Arial Times New Roman Georgia 如果您需要使用其他特殊的字体,可以通过引入字体文件或使用CSS3的@font-face来实现。在选择字体的时…

    css 2023年6月10日
    00
  • textarea去掉滚动条 textarea横向或纵向滚动条的去掉方法

    以下是详细讲解”textarea去掉滚动条,textarea横向或纵向滚动条的去掉方法”的完整攻略: 方法一:使用CSS样式 在CSS中使用属性overflow可以设置元素是否拥有滚动条,将其设置为hidden即可去除textarea的滚动条,示例代码如下: textarea { overflow: hidden; } 除了使用hidden属性以外,还可以使…

    css 2023年6月10日
    00
  • CSS前端页面渲染优化属性will-change的具体使用

    请听我具体讲解CSS前端页面渲染优化属性will-change的具体使用。 1. will-change简介 在Web页面中,一些元素在某些情况下会产生复杂的渲染和绘制,这会导致页面性能下降,会出现页面不流畅,掉帧等问题。 will-change属性就是为了解决这个问题而诞生的。will-change可以为指定的元素创建一个层级别(Layer)的相关环境,使…

    css 2023年6月10日
    00
  • 关于css设置层透明

    设置层透明可以使用CSS3中的opacity属性或RGBA颜色值,以下是详细的攻略: 使用opacity属性设置层透明 opacity的范围为0到1,0表示完全透明,1表示完全不透明。可以将opacity属性应用于想要设置透明度的HTML元素的样式中,如下示例: div { background-color: #000; opacity: 0.5; } 以上…

    css 2023年6月9日
    00
  • AngularJS 实现弹性盒子布局的方法

    下面我将详细讲解“AngularJS 实现弹性盒子布局的方法”的完整攻略,包含以下几个方面的内容: 弹性盒子布局介绍 AngularJS 实现弹性盒子布局的方法 示例说明 弹性盒子布局介绍 弹性盒子布局(Flexbox Layout)是CSS3中提供的一种新的布局模式,它使我们能够更加方便、自由地进行布局。这种布局模式的实际效果是可以在不同大小的屏幕设备上自…

    css 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部