- 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"
我需要在带有布局的 MVC 元素中创建 CSS 命名约定。
布局的使用导致在选择类名称时需要非常小心,因为它可以被布局 CSS 文件中声明的名称覆盖。
我使用的一个规则是只有元素类用于 jQuery 使用的样式和元素 ID。
假设我有这样的布局:
<div class="lyb-ctn">
<div class="lyb-wrp">
@RenderBody()
<div class="lyb-ctn-rgt">
<div class="lyb-ctn-subscribe">
<p class="lyb-ctn-subscribe-title">Subscribe</p>
<input placeholder="Email" /><input type="button" />
</div>
<div class="lyb-ctn-categories">
<p class="lyb-ctn-categories-title">Categories</p>
<div class="lyb-ctn-categories-ctn-list">
<div class="category">
<p>Cars</p>
<p>Boats</p>
</div>
</div>
</div>
</div>
</div>
</div>
一个选项是:
.lyb-ctn {
position:fixed;
padding:0px;
margin:0px;
width:100%;
height:100%;
background-color: #f2f2f2;
padding-top: 50px;
}
.lyb-wrp {
max-width: 960px;
width: 95%;
margin: auto;
background-color: #ffd800;
}
.lyb-ctn-rgt {
float: right;
width: 235px;
border: solid 1px #ff6a00;
}
.lyb-ctn-subscribe {
width: 100%;
}
.lyb-ctn-subscribe-title {
color: #80bd01;
}
.lyb-ctn-categories {
width: 100%;
}
.lyb-ctn-categories-title {
color: #80bd01;
}
我还构建了另一个选项,但我认为这个选项很危险,因为如果它恰好在父布局中存在“.rgt-ctn”,它可以覆盖这个选项:
.lyb-ctn {
position:fixed;
padding:0px;
margin:0px;
width:100%;
height:100%;
background-color: #f2f2f2;
padding-top: 50px;
}
.lyb-ctn .wrp {
max-width: 960px;
width: 95%;
margin: auto;
background-color: #ffd800;
}
.lyb-ctn .wrp .rgt-ctn {
float: right;
width: 235px;
border: solid 1px #ff6a00;
}
.lyb-ctn .wrp .rgt-ctn .subscribe-ctn {
width: 100%;
}
.lyb-ctn .wrp .rgt-ctn .subscribe-ctn .title {
color: #80bd01;
}
这是另一个看起来很干净但是当我们查看它时我们看不到 DOM 的层次结构,我认为找到要编辑的元素可能更难:
.lyb-ctn {
position:fixed;
padding:0px;
margin:0px;
width:100%;
height:100%;
background-color: #f2f2f2;
padding-top: 50px;
}
.lyb-wrp {
max-width: 960px;
width: 95%;
margin: auto;
background-color: #ffd800;
}
.ctn-side-options {
float: right;
width: 235px;
}
.ctn-subscribe,
.ctn-categories,
.ctn-tags {
width: 100%;
}
.ctn-subscribe .title,
.ctn-categories .title,
.ctn-tags .title {
color: #80bd01;
padding: 25px 0 10px 5px;
}
.ctn-categories .ctn-list,
.ctn-tags .ctn-list {
width: 100%;
background-color: #fff;
border: solid 1px #e6e6e6;
border-radius: 3px;
margin: 0;
padding: 0;
}
或者有更好的方法吗?
最佳答案
TLDR:组织起来。
首先,我强烈建议您阅读:
OOCSS - http://www.smashingmagazine.com/2011/12/12/an-introduction-to-object-oriented-css-oocss/
SMACSS - https://smacss.com/
和
BEM-http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/
在元素开始时付出一些努力来了解 CSS 的模块化方法将随着元素的扩大而带来巨大的返回。如果您与两个或更多开发人员一起从事一个元素,那么拥有严格的命名约定会让生活变得更加轻松。
接下来,如果您还没有这样做,那么非常值得过渡到 CSS 预处理器,例如 SASS - http://sass-lang.com/ , 少 - http://lesscss.org/或触控笔 - http://learnboost.github.io/stylus/
使用预处理器有助于组织,因为您可以根据需要将样式表分成任意多个文件,然后在编译时将它们全部导入一个文件以遵循性能最佳实践。 (另请参阅 - http://thesassway.com/advanced/modular-css-naming-conventions)
你提到你有一个规则,只使用类作为 CSS 钩子(Hook)和 ID 作为 JS 钩子(Hook)——这是一个好的开始,但是我建议不要使用 ID,而是转向以 js 为前缀的类。通过这种方式,您的 JS 也变得可重用。
接下来要看的是创建模式库 - Mailchimp 的示例就是一个很好的例子 - http://ux.mailchimp.com/patterns
一般性指导就这么多——所有这些与以下内容有何关系:
“我需要在带有布局的 MVC 元素中创建 CSS 命名约定。 布局的使用导致在选择类名称时需要非常小心,因为它可以被布局 CSS 文件中声明的名称覆盖。”
您会看到以上所有指南都旨在将您的 CSS(和 JS)组织成可重用代码块。这样做的关键是规划,并为您将要使用的每个 block 提供规范引用 - 因此是模式库。
在您的示例中,您可能希望为每个布局创建一个指南 - 如何使用每个布局以及它如何/应该如何影响后代内容?
在您希望布局主动影响其后代内容的地方,您将希望对它们进行范围界定。所以将它们包装在一个可以充当命名空间的类中。即
<div class="layout-one">[ALL DESCENDANT CONTENT HERE]</div>
.layout-one p {
color: green;
}
<div class="layout-two">[ALL DESCENDANT CONTENT HERE]</div>
.layout-two p {
color: red;
}
但是,我认为您更关心的是您的布局会以破坏您的设计的方式重新影响后代内容。因此,将任何仅与布局相关但与后代无关的样式的范围更紧密。
而不是: .layout-one p {}如上所述,去 .layout-one__p {}, .layout-one__h4 {}
正如您所看到的,这个受 BEM 启发的命名约定让人很清楚,所讨论的样式直接是布局的一部分。我们不希望看到此类在布局 HTML 之外使用,因此我们可以编写样式而不用担心它们会影响后代内容。
或者,我们可以在布局的命名空间中编写样式,并确保我们的样式会受到我们想要的影响。
关于MVC 布局中的 CSS 命名最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720073/
我面临以下问题: 我有一个命名空间 Exception\* , 其中包含多种类型 异常(exception)。 我有一个命名空间 Exception\User\* ,其中包含一个 特定类型的异常 (
新的 Highcharts v3.0 气泡图看起来很棒。是否可以用名称/一些文本注释和显示每个气泡? 谢谢,奈杰尔。 最佳答案 您需要做两件事。 首先,命名每个数据点(气泡): data: [ {
我通过使用 EVP_get_cipherbyname("AES-256-CTR") 获得了 EVP_CIPHER*,现在我想找到一种方法从 EVP_CIPHER* 返回到原始名称,在本例中为“AES-
为了避免 JavaScript 堆问题,我使用多个数组:family1、family2、family3 ...、dogs1、dogs2、dogs3 ... 使用示例:“family1 和 dogs1”
我很难理解这段代码。这不是我熟悉的典型 Javascript 函数语法。这是一个命名函数吗?或者这是更新事件的回调?抱歉,我对新手问题很陌生,我对 JS 还很陌生。我了解正在发生的一切,除了这个函数语
是否可以在 python 中执行以下操作? i=1 while True: w = open("POSCAR_i","w") i=i+1 if i<10:
我问这个是因为我刚刚在一段代码上看到它: var myVar = function func(arg){ console.log(arg); } 我不明白为什么函数在为 myVar 定义之前被“
我正在尝试为 ActiveDirectory 创建上下文(客户端和服务器都是 Windows),使用我的 Windows 凭据和 NTLM。 这是我的代码: public void func() {
我正在运行一个使用 JBoss5 容器的 ejb 示例。我正在使用一个例子 from here(Part one) . 在示例中,我在 JBoss 中部署了 bean,在 Tomcat 中部署了一个应
我希望能够命名一个 BackgroundWorker 以便于调试。这可能吗? 最佳答案 我必须尝试,但你不能只设置 Name BackgroundWorker 执行的 DoWork() 方法中的线程?
我在 Android Activity 和其他类之间遇到了越来越多的命名冲突。我想知道你能不能告诉我你是如何避免这些的。遗憾的是,关于 SO 的相关问题并未涵盖我的特定命名问题。 第一个例子 我有一个
当我尝试使用 loadChildren 加载模块以在命名 socket 中加载模块的组件时,出现抛出错误。 有没有办法在命名的路由器 socket 中延迟加载模块? //html //routing
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
在 Type Driven Development with Idris 第 6 章的代码中,我对这段代码感到困惑: data DataStore : Type -> Type where M
通常,如果有一个属性可以获取/设置状态值,我会使用“Is”,例如: Visibility: .IsVisible 但是对于获取/设置操作的属性,最好使用什么?喜欢: Casting shadows:
好的,所以如果你可以很容易地想到一个名词,那么命名一个接口(interface)(或类)很容易:用户、窗口、数据库、流等。 形容词或形容词的概念呢?例如有时间戳的东西(HasTimestamp、Tim
我刚开始学习 PowerShell,我想知道 Posh 中的 cmdlet(或高级功能,无论它们在 CTP3 中称为什么)是否有一些好的动词指南。 如果我做一个get-verb,我可以看到很多。但我仍
$(".song").live('click', function songClick() { //do stuff }); 你能像上面那样命名一个函数,然后稍后再调用它吗?我尝试过,但没有成
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 7年前关闭。 Improve this
我的 Spring 应用程序中有两组类 - DTO 和实体。 在阅读了 Bob 叔叔的 Clean Code 之后,我比以往任何时候都更喜欢正确命名事物。 我坐下来重构我的一个 Spring 项目,但
我是一名优秀的程序员,十分优秀!