将CSS类用于逻辑是一种好的做法吗
Is it good practice to use CSS classes for logic?
假设我有这样的代码:
<div class="red hide">
<!-- More tags here -->
<div>
和:
<style>
.red {
background-color: red;
}
</style>
最后:
$(function() {
if (someConditionIsTrue) {
$('.hide').hide();
}
})();
如果使用CSS类进行逻辑(比如上面的例子),可以吗?
注意,在这里,类.hide
不用于任何样式,仅用于逻辑。
class
属性实际上是DOM的一部分,而不是CSS的一部分。换句话说,class
属性(以及任何其他属性)是HTML结构的一部分,并且已经代表了某种形式的客户端逻辑。因此,在CSS、jQuery和JavaScript中使用属性作为选择器是完全有效的。
例如,这些都是有效的用途:
HTML
<div class="hide" data-example="1"></div>
CSS
.hide {display:none;} /* CSS class selector */
[data-example="1"] {display:none} /* CSS attribute selector */
JS
$('.hide').hide(); // jQuery Class selector
$('[data-example="1"]').hide(); // jQuery Attribute selector
CSS和JS组合
根据您的评论,将CSS与JS逻辑混合确实是一个值得关注的问题。理想情况下,关注点分离的原则要求每个关注点都用于自己的特定目的,即CSS用于样式设计,JS用于通过添加类来操纵DOM。
例如:
CSS
.hide {display:none;} /* Set the styling of the class in CSS */
JS
$('#some-element').addClass('hide'); // Add the class to the DOM element in JS
这是编码约定的一部分。你应该思考一个术语的含义。
例如,如果我在类名中看到"hide",我可以认为你的css已经为这个类指定了一个display: none
。
你应该更喜欢一个类名,它描述了像toggle/collapse这样的函数,或者一个常见的后缀(显示我,隐藏我):
I am a very long sentence <span class="hide-me">hide me if you click</span>
如果只涉及一个元素,则应该使用"id"属性。
所有这些都是语义问题,您不必认为class
属性是为CSS保留的。
如果CSS赋予"class"属性很大的权力,那么它只是CSS选择器的一个特定情况,并且该属性不打算保留给CSS。
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 用于自动将一种类型的URL更改为另一种类型
- 一种用于横向和纵向照片的 CSS 样式
- 将CSS类用于逻辑是一种好的做法吗
- 有没有一种安全的方法可以将 React.js 与 Python Flask 后端用于多用户、受密码保护的站点
- Javascript Switch 语句中的默认值仅适用于一种情况,但不适用于两种情况
- 有没有一种类似于Razor的模板语言用于纯Javascript应用程序
- 在 NodeJS 中,有没有一种类似于 dependant 的方法:Ruby 中的 :d estroy 用于关联记录
- 一种模式,用于使 userId 可用于 JavaScript,而不会破坏缓存
- DurandalJs:一种通用解决方案,用于将焦点放在组合视图上的第一个输入元素上
- 什么'这是一种流行的编程技术,用于处理多步骤、多层过程中的故障
- 需要找出一种模式,使相同的代码同时适用于api和正常呈现
- 将CSS类用于JS标记是一种糟糕的做法
- 一种算法,用于判断从列表中识别一个单词需要多少个不同的先导字符
- 在Redux/Flux中,用于乐观更新的操作存储是一种很好的方法
- 有没有一种更优雅的方法将 css 应用于“除了这个元素之外的所有元素”
- 有没有一种设置方式"!“重要”;用于event.stop()
- Backbone 中的 2 种保存方法(同步).js - 一种用于持久化,另一种是最终的完整方法
- 有没有一种适用于Android的Firebug或JavaScript控制台调试