- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
所以我对 OOCSS 有疑问。它应该更便携,但与我通常做事的方式相比,我发现它不那么便携。
我的例子:
我有一个小部件推荐。在主要内容正文(具有白色背景)中,推荐使用黑色字体。但在页脚(具有蓝色背景)中,推荐需要白色字体。
在 OOCSS 之前,我会做这样的事情:
#main-content .testominial {
color: #000000;
}
#footer .testominial {
color: #FFFFFF;
}
使用这种“旧”方法,我可以将我的小部件从内容区域拖到页脚,并且颜色会简单地工作 - 我不需要更改小部件的 CSS 或 DOM 类。
使用新的 OOCSS/BEM,我不应该将 .testimonial 类耦合到 ID(或位置),而是我应该像这样子类化它:
.testominial {
color: #000000;
}
.testominial--footer {
color: #FFFFFF;
}
问题在于,如果不进入 DOM 并更改推荐小部件上的类,我就不能再将我的推荐从内容区域拖到页脚 - 它的可移植性较差,因为它需要开发人员手动干预;而在此之前,编辑者只需拖动它,样式就会自动生成。
我错过了什么吗?似乎没有可靠的真实示例?
最佳答案
您需要考虑删除 testimonial
命名以及 footer
.
考虑这个例子:
.primary-box { }
.primary-box--reduced { }
.primary-box--standout { }
在示例中,类完全独立于它们的页面上下文。结果是这些类是完全可重用的。页面上的任何框都可以采用上面的类,并期望其样式完全符合定义。
例如,您可以:
<header>
<div class='primary-box primary-box--reduced'></div>
</header>
<div class='content-box'>
<p class='primary-box primary-box--standout'></p>
</div>
<footer>
<div class='primary-box primary-box--reduced'></div>
</footer>
现在,当设计师回来调整突出框的填充时,您可以直接转到这些样式并进行调整,确信唯一会受到影响的区域将是 HTML 中具有这些类的区域。
此外,当您决定移动时 .primary-box--reduced
来自 <header>
进入位于其上方的菜单栏或进入页脚,您可以确信样式会完全出现。
当你在某处需要另一个元素时,可能是 primary-box--standout
,或者只是一个默认值 primary-box
在标题中,您只需创建它并添加类,它们的样式将完全遵循。
你也永远不会继承意想不到的样式。
这是一个非常真实的例子,我最近建的一个网站几乎都是这样建的,我说几乎都是因为我还在学习,但我可以保证我很快就遇到了最少的麻烦-具有非常流畅设计的移动元素是那些具有非特定上下文的元素。
重要的是缺乏上下文。在第一个示例中,.testimonial--footer
非常依赖于上下文,您真的只需要在页脚的推荐中使用它。
就像变魔术一样CSS Wizardry cover this exact topic
编辑:我添加了这个例子来帮助对我的回答发表评论。这不是 BEM 或 OOCSS,尽管它更接近 the SMACSS approach。 .这就是我用 css 解决问题的方式,是一种混合 BEM/SMACSS 方法:
按顺序加载:
.primary-box
.header
或 .call-to-action
.about-us
或 .contact
每个文件变得越来越具体,同时构建更复杂的模块。基于上述示例并希望对 OP 有所帮助,您可以看到如下样式:
.header {
.primary-box {
color: #000;
}
}
这将使用更具体的嵌套类表示法覆盖模块样式。请注意,我仍然会避免使用像 .header
这样的类名- .banner-standout
会更好,因为它可以在任何地方重复使用而不会混淆
接下来,你甚至可以看到:
.about-us {
.header {
.primary-box {
color: #f00;
}
}
}
我发现这在实际元素中对于上下文非常有效,同时保留了 BEM 的上下文无关功能,但我也强烈建议尽可能将此链向上推到模块中。如果我识别出新的通用页面部分或模块并适本地重新组织命名和文件,生活就会更轻松。在一个代码已经被仔细重构的元素中,我的页面文件中没有任何内容。
关于html - SMACSS、BEM 和 OOCSS 不是可移植的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30498946/
我不明白 RSCSS 和 BEM 之间的区别。有人说 RSCSS,有人说 BEM。 请告诉我两者的区别 最佳答案 RSCSS 只是 BEM 的扩展,加上创建它的团队的一些额外想法和经验。 例如 RSC
在 grunt 文件中 stylelint: { all: ['app/styles/**/*.scss'] }, .stylelintrc { "plugins": [
我正在尝试使用 stylelint 对 BEM 样式进行 lint和 stylelint-selector-bem-pattern plugin但无法让它工作。 我的配置如下: 节点:5.11.0 g
我正在学习 HTML BEM (CSS) 架构,即使在观看了一些 youtube 视频后也不太了解。你们中的任何人都可以查看我的一段代码以查看我的类命名是否正确吗?
我正在尝试使用 BEM 命名约定,并且在决定在何处包含特定页面的修饰符时遇到了一些困难。 例如,假设我有一个橙色按钮: Button A 我的元素有 3 个不同的页面: - pageA.html -
我正在尝试返回到 Web 的前端编码。上一次写 CSS 是在 10 年前,那时候有一种病叫 分类炎 .我对 classitis 的理解可能是错误的,但我认为不要在您的 HTML 文档中放置过多的 CS
在使用 BEM 时,我曾被简单的场景搞糊涂过。示例中有一个基本按钮: .button { // styles for button } 及其具有更具体样式的修饰符: .button.butto
Closed. This question is opinion-based。它当前不接受答案。
所以我试图理解 BEM 命名结构。所以假设我有以下 html {{team.name}} {{team.score}}
在整个站点中定义通用非 block 特定样式的最佳方法是什么? 例如: html foo bar 萨斯/CSS .intro__text { } .profile__text
这是一个理论问题,但它现在困扰了我几个小时。 我正在学习 BEM,到目前为止它很棒,但我遇到了问题。假设我有这段代码: Blah Generated from the CMS 如何定位 p
使用 CSS BEM 方法... 假设我有一些 HTML,像这样(这只是为这个问题编写的示例 HTML): Text. Text. Text. Text.
不知道哪个是官方网站,我找到了getbem.com和 en.bem.info . 有人建议使用 -- 作为修饰符(Naming): CSS class is formed as block’s or
我有一个关于 BEM 中通用 block (例如 .button)与媒体查询样式的问题。 BEM 中的 block (如文档所述)应该具有适用于网站上所有元素的通用样式,假设我有一个 block :
我最近开始使用 BEM 来编写可重用的 CSS 组件。在BEM documentation和其他网站,我发现由于显而易见的原因,不鼓励对标签元素进行全局重置。 但是,当我查看基于 BEM 的网站(包括
最近我开始在我的元素中使用 BEM 来组织 CSS,但现在我已经到了这样的 html: TITLE SUBTITLE 由于我对 SMACSS
... 例如,我将它放在 header 中,它不依赖于 header block 。为了使其对 BEM 友好,我倾向于这样做: ... 这是处理 BEM 的
HTML 布局 social icon here social icon here social icon here social icon
我正在尝试遵循 BEM 命名约定,但我不确定如何实现以下内容:我有一个“工具提示” block ,应该使用不同的主题设置样式。假设我应用了一个“默认”主题。 工具提示可以放置在不同位置的元素周围,这
我是 BEM 的新手,正在处理示例模板: HTML Site branding link link
我是一名优秀的程序员,十分优秀!