这些是这些技术的适当用途。不恰当的使用是当您跨越这些界限并创建不匹配时。
不恰当的数据库使用
您将博客文章的标题存储为值
<h1>10件你不应该带去跳伞的东西</h1>
将 HTML 标签与标题一起存储是不合适的。它在以后会变得不灵活,并且与内容本身无关。如果它最初的设计就是为了让所有标题在输出时具有不同的 HTML 标签呢?那么,使用另一个数据库字段来存储标签,或者更进一步,使用一个独立的字段来保存表示该标题重要性的符号。
不恰当的 HTML 使用
人们常说“HTML 用于内容”,这只是一部分正确。是的,内容最终会变成 HTML,但是由 HTML 编码员编写的标记应该包含很少的实际内容。它应该包含描述内容的结构元素,在所有这些结构的内部,描述性标签包围动态获取内容的代码。
其他不恰当的 HTML 使用包括:
<div class="post-seperator"></div>
很有可能,它纯粹是为了视觉效果而存在的。理想情况下,应该使用另一种方法来实现相同的视觉效果,而无需额外的 div。
另一个不恰当使用的例子,无需解释
<p style="border: 1px solid red; padding: 10px;">警告:您永远不应该这样做。</p>
不恰当的 CSS 使用
与其他语言相比,误用 CSS 更加困难。编写糟糕的 CSS 很容易,但这只是糟糕的 CSS,而不是技术的误用。例如,使用 RGBa,它允许您在声明颜色时调整颜色的 alpha(不透明度)。然后,您将框的背景设置为使用非常浅的黑色色调,并在其上使用黑色字母。并非所有浏览器都支持 RGBa,框将变成全黑,黑色字母不可读。这无疑是一个巨大的错误,但并非技术的误用。
但是,您可能会误用它,一个例子是 CSS 允许您实际将内容追加到 HTML 中。这有几个有趣的用途,但也可能被误用。例如
#footer:after { content: "版权所有 2009 The Bad Idea Police"; }
不恰当的 JavaScript 使用
关于 JavaScript 有趣的是,如果某件事可以用其他语言完成,那么它可能应该用其他语言完成。
例如,CSS 完全能够处理设计更改的“悬停”事件,但 JavaScript 有时会被误用以处理悬停事件。例如,在悬停时更换图像。这绝对是 CSS 精灵的领域。
另一个典型的例子是表单验证。您可以使用 JavaScript 为表单添加出色的验证,这对用户来说非常响应且有用。但是,您最好也使用服务器端语言验证该表单,否则您可能会遇到安全问题。
上面说 JavaScript 用于功能。这是真的。当您需要页面在加载完成后“执行某些操作”并具有交互性时,这通常是 JavaScript 的领域。但这并不是它所做的一切。JavaScript 非常强大。它可以添加/调整/删除 CSS。它可以添加/删除/调整 HTML。(这两件事都是通过 DOM 完成的)。它可以与您的计算机通信并获取答案。通过 AJAX 技术,它可以与服务器通信并获取答案。
JavaScript 被误用的可能性非常高,但界限有点模糊。例如,在上面不当使用 HTML 的示例中,我们试图摆脱一个用于纯粹设计原因的空 div。我们可以用 JavaScript 将该 div 追加到页面中。这解决了 HTML 的问题,但现在 JavaScript 在处理您的 HTML。感觉像是越界了,但我认为这是一种可以接受的 JavaScript 使用方式。然后,假设您在追加此 div 时,知道它需要是红色的,因此您使用 JavaScript 将 CSS 追加到它并使其变红。这就不是JavaScript 的误用,因为您本来可以使用常规 CSS 来完成。感觉很奇怪,但这就是我的意思,如果您可以用另一种语言做到,那么您就应该用另一种语言做到。
只在理想的世界中
所有这些不只是我的一家之言,这只是对我们行业今天讨论的内容的复述/融合。但这不仅仅是胡言乱语,这些标准的演变是因为它是构建更易于维护、更易访问和更语义化的网站的正确做法。
然而,我首先要承认,规则有时会被打破。我们都是普通人,我们只知道我们所知道的,我们一天只有那么多时间。如果您必须偶尔打破规则才能完成工作,那也没关系。您甚至知道自己正在打破规则,这本身就非常棒,而且您每天都在学习和进步。
有一些不错的指南。如果你遇到一个别人已经处理过的项目,而他们在数据库中使用 HTML,这会让人很沮丧。我今天以前见过整个页面都存储在数据库字段中 - 我希望永远不再看到它!
在数据库中处理内容和标记时,存在一个灰色区域……以 WordPress 为例:您的帖子包含许多段落、列表、链接等。处理这种自由格式内容的唯一合理方法是将标记存储在数据库中。
只要确保它确实是自由格式的内容。
当然,您可以在数据库中使用标记,也可能需要使用标记,但是如果您这样做,您需要记住,您将失去对其中内容的灵活性。
例如,如果您想将数据库中 5 段文章中的所有 s 更改为 s,它将不像简单地更改标记那样容易,您必须进行查询等等。
因此,是的,它是可能的,但是您只应该在非常长的文本中这样做,以及不会更改的文本,或者不会更改标记的文本。
好吧,
我同意 Andrew 的观点,这与本文的最后一段相一致。
在某些情况下,有必要打破规则,无论出于何种原因。由设计人员/程序员决定在每种情况下该怎么做。
干杯!
Alexandre.
好吧,我同意 Andrew 的观点,但只是在内容的情况下。我使用过很多次 WordPress,我喜欢它存储标记的方式。WP 存储有效的标记,如果您想更改某些内容,您只需显示样式段落、列表、块引用、图像等等。数据库中没有存储 CSS 样式(只是某些标准,例如图像)。
但这个想法也与 Dave Sparks 相一致。他说标记不需要存储,只需要定义应用程序最终布局的标记。内容将始终保持不变!
这篇文章很棒!一个很好的补充将是相应的适当使用。我理解这些是广义的例子,所以一个广义的适当使用会很好。
例如,我刚接触 HTML,我做了用 DIV 作为分隔符的愚蠢事情。有什么更好的方法吗?将边框放在上面的 div 或下面的 div 上?换句话说,使用您现有的块元素来设置页面的样式?
再次感谢,我真的很喜欢您的网站。
您将对相反的 div 进行样式设置。因此,您将为它们都提供边距以增加它们之间的空间。
您也可以使用它,但是这不是我使用的。
这个有什么问题,只是为了确保?:)
警告:您永远不应该这样做。
应该避免内联 CSS,就像避免内联 JavaScript 一样(参见此处),因为您将两种应该保持分离的语言混在一起,并且在使用内联 CSS 时会失去很多灵活性,因为当您要更改某些代码的多个出现时,您必须使用“查找和替换”。
哦,您指的是“内联”部分。我明白了,我同意你的观点。但在某些情况下,直接进行内联操作可能快得多,也更容易,比如如果您需要一个时间有限的促销活动的快速着陆页,然后在使用后将其丢弃。
是的,我认为内联样式不应该被使用。即使是为了一个短期展示页面,至少也要把它放在你的页面头部。
我唯一看到有必要使用内联样式的时候是 HTML 邮件设计。
哦,我不知道。更改头部中的 CSS 与在内联中交换 CSS 一样,都是查找和替换的操作。在这两种情况下,它都是专门为该页面构建的,并且在这两种情况下,它都具有比基本 CSS 更高的继承性。
在我看来,如果你要坚持永远不使用“内联”样式,我说就把它添加到你的基本 CSS 文件中,不要把它放在头部。
我同意 Klaus 的观点……原则上,我同意不使用内联样式;但在实践中,如果我正在构建一个一次性的着陆页,直接添加所需的样式有时会更容易。
讽刺
那个花哨的小文章简介使用了内联样式。
话虽如此,我仍然同意这篇文章。网站应该灵活地构建,但这并不意味着这些规则 *必须* 始终遵守。例如本文的最顶部。该 CSS 不需要在整个网站中重复使用,并且特定于此使用情况。因此,内联样式非常适合。
哈,我很高兴有人指出了这一点。但是是的,这是一个很好的灰色区域的例子。
这里的理论是我想让它在 RSS 中呈现出那种样子,而内联样式是唯一的方式!
原则上同意,但有些东西确实只是一次性的独特样式……
为了分离样式和内容,您必须能够对内容的各个部分进行分类或识别。
为只出现一次并且实际上只是一个在唯一位置出现的样式元素的东西想出一个唯一的类名是毫无意义的……
如果您可以对其进行分类(“这是一个警告消息”)或识别(“这是核按钮描述”),那么它当然应该有自己的 CSS 规则。
就我个人而言,我尽量完全避免内联样式,因为
a) 内联样式无法像外部 CSS 文件那样进行缓存
b) 我经常发现自己试图更改任何与布局相关的內容,并且不得不调整 html 文件和 CSS 文件,因为使用了内联样式。
c) 还有一个使用外部 CSS 的便捷方法,即创建一个“单定义”CSS 文件,您可以在其中放置所有“不经常需要”的元素 - 并且可以对规则进行注释。
那么内联 CSS 不应该在教程或书籍中教授,但事实上它被教授了,因为如果使用它非常错误,那么像我这样自学的人就不知道这一点。如果使用它很糟糕,那么它应该以某种方式被禁用。如果代码有效,那么人们就会出于便利的原因使用它!令人沮丧。
总有一天,这些 Dreamweaver-WYSIWYG 网站,HTML、CSS 和脚本在其中融合为一个无休止的密码字符串,以“body onclick”开头,会问自己:我是谁?让我们统治世界。
太好笑了,海伦!标签汤,原始汤。现在我饿了,想吃午饭。
好文章 - 维持关注点分离对于任何大型项目都是必不可少的。曾经有一个需求,需要通过 Web 服务公开一些数据 - 但是原始数据包含标记。他们的答案:解析查询结果……。
很棒的使用列表!大多数都是常识,但我经常看到错误的使用方法。
另外,当然,不要说这是拼写或语法错误! - 文章标题拼错了。Inapproprite vs. Inappropriate。
有趣文章,克里斯。我只是想知道,你说
当谈到用 CSS 使用 *内容* 时,只是想知道那些可能是什么?
是的,我同意……
例如,在制作打印样式表时,一个可能的良好用途是在超链接的末尾附加链接。
a:after { content: " [" attr(href) "] ";
另一个“content”属性可能很有用的地方是,在浮动容器之后创建一个“虚拟”元素,以实现浮动清除,而无需无用的额外标记,就像这样
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
有关更多详细信息,请参阅。
忘记了来源:http://www.positioniseverything.net/easyclearing.html
太棒了,大卫,我从来没有想过用这种方式清除浮动。
非常感谢 :)
还有人认为 CSS 悬停是一个 *功能*,而不是一个 *设计*,这将把它归入不适当的类别。
这种用法被广泛接受,但如果你要严格对待“适当性”,那么值得思考一下。
此外,:hover 仅在锚标记上跨浏览器兼容(除非我的知识过时了),并且没有规定在鼠标移出时保持状态更改。
我喜欢并使用 CSS 来实现我的大多数悬停(使用精灵图),但当悬停需要持久时,JavaScript 在等着我。
但主要的是,是的,它是一个功能,而不是一个设计。
哦,在 Web 开发方面,我们生活在令人愉快的灰色区域,并在这些区域中穿行。;-)
你好。
嘿,你错过了 PHP 的不当使用;D。
IMO,CMS 不应该包含或生成与 HTML 混合的内容。HTML/CSS 应该是模板系统的一部分。
至于 CSS,我有一个问题,什么是一个有效的解决方案来避免使用
我正在使用 960GS,那个空 DIV 似乎对我来说是必须的。
同意“PHP 的不当使用”。最近阅读了有关 PHP 定位的文章,现在我不知道我应该学习哪一个(这里是一个非常绿色的学习者)。
aker,我应该看到什么?我看到一个灰色框,但没有文字。还是只有我?
从我所学到的内容来看,如果你有一个页面,一个实例需要更改目标标签,那么内联 css 可以争论。
很棒的帖子!我认为 PHP 的不当使用是回显没有动态生成的內容。
我必须同意你的观点。我厌倦了帮助人们解决他们的 WordPress 主题问题,结果发现模板中每隔一个词都是用 PHP echo 插入的。
但是,如果他们使用的是为大众创建的主题,那么动态检索和显示博客标题是有意义的。如果这是一个专门为该博客创建的自定义主题,那么你可以并且应该硬编码更多 HTML。
嗯…… 里面发生了一些有趣的事情。我今天之前甚至没有意识到你可以用 CSS 添加内容,这是一堂课,我应该尽快忘记…… 在我最终使用它之前。
我实际上认为 Javascript 应该用于大多数人使用 CSS 的悬停效果。
因为 CSS 用于设计,而 Javascript 用于功能/行为,我认为悬停效果是行为,因此我将它放在那里。
没有什么可以阻止人们使用 CSS 来管理悬停时显示的项目的外观,以及使用 JS 来管理其行为。几个月前讨论的一个有趣概念是通过延迟下拉菜单选项在悬停时的显示来改善用户体验,并在滚动出时保持可见更长时间。这种体验只能通过将 JS 与 CSS 相结合来实现。
在这种情况下,我永远看不到你的悬停。如果它们仅仅是为了漂亮而存在,那没关系,但如果它们是为了传达元素(例如,锚点)的意义或显示一些内容,那就不行。这取决于悬停的使用方式。
感谢你的帖子。这始终需要被提及!
我认为,只要你足够聪明,javascript 就可以用于设计和功能。就像前几天 Thinkgeek 背景示例一样。Jquery 可以轻松地生成 html 来实现这一点。然后,当 Javascript 关闭时,它将拥有一个基本背景。我认为,正确使用 Javascript 可以服务于许多用途。
我认为关键是为工作使用最佳技术。使视觉元素依赖于 javascript 只是为了节省几行 HTML 似乎是不明智的。如果可以用 HTML 和 CSS 处理,则应使用这些技术。
但在那个例子中,HTML 和 CSS 创建了无意义的标记。通过利用 javascript 来创建该 HTML,我们正在帮助页面更好地运行。就我个人而言,只要创建的 HTML 除了“美化”网站之外没有任何其他目的。并且该网站在没有该元素的情况下完美运行。我认为“无害无罚”。
很棒的文章,Chris。对于 Web 开发人员来说,这是一个很好的提醒。
我以前从未想过在讨论中包含数据库,但它完全说得通。在数据库中存储 HTML 的唯一好时机是当你使用 Textile 或 Markdown 等技术时,并且在数据库中存储转换文本的缓存版本以进行快速访问。
非常有趣的阅读。感谢 Chris 的想法。稍后我会发推。
很棒的文章!不过,只是一个小建议,下次你可能想请别人帮你校对 =)
现在,CSS 是设计,而不是行为,因为我们谈论的是 CSS-2,而不是 CSS 5。想想所有新的 webkit-CSS3 魔法
div { -webkit-global-warming(stop, 0); -webkit-tax-declaration(fill out, send); }
CSS 是样式,因为它很静态,而那仅仅是开始。必须有进化,如果未来不是功能,就只剩下很少的东西,比如
h2 { smell: strawberry; }
、变量或内部计算(像在 PS 中那样将颜色相乘)。我读完这篇文章后就去 http://net.tutsplus.com(这是我的日常习惯)。当我到达该网站时,我看到了一个名为“用 PHP 在幕后增强你的 CSS”的新文章。虽然这篇文章中讨论的一些想法似乎很合理,但是,其中大部分内容似乎是这篇文章中列出的不合适内容。我只是想指出一个很好的例子,说明什么时候不应该使用另一种语言,而已经存在的语言可以更有效地做到这一点。
享受,哈哈
嗨,Chris,退一步看看,确保你正在以最有效的方式做事,这总是好的。我认为,正如你所建议的,HTML 作为内容的处理程序非常重要,它可以存储在其他地方。
期待更多 JQuery 的工作。
有趣而且非常真实。感谢你的帖子。
你再次挑战了我,Chris
大家好,
我最近读了这篇文章
http://jeffcroft.com/blog/2009/may/20/applying-oop-concepts-css/
我认为在阅读这篇文章之后,这将是一个值得关注的主题。Chris,关于单个元素上要使用的类数的文章怎么样?你怎么看?
嗨,我有一个问题
关于混合 html 格式和数据库存储:你们如何存储帖子的副标题?就好像:如果你不在数据库中以
是否有一些我不了解的技术可以做到这一点?很想知道!
谢谢
Chris,我关注你的推文和 RSS 订阅,我感谢你所做的所有工作。我从你那里学到了很多。
关于这篇文章的一件小事…… 虽然我同意应尽可能避免内联样式,但我尊重不同意永远不应该使用它们。在某些情况下,当内容是动态生成的时,你是否同意内联样式有意义?(一个微不足道但熟悉的例子:根据使用频率设置博客标签云中标签的字体大小。)我的 $0.02。
元素的分离很棒。我个人尽量避免使用太多 JavaScript。它不仅会减慢网站速度(Flash 也会),而且一些用户没有启用它,所以我尽量依靠服务器端代码,用 html/css 完成大部分工作。不过,这是一个很好的讨论。
PHP 怎么样?使用它仅用于逻辑是不是一个好习惯?
内联 CSS 用于 HTML 邮件,特别是如果你有一个完整的 Lotus Notes 或 Outlook 用户大学。每件事都有它的用途,即使是坏习惯,因为大多数情况下它只反映了过渡学习阶段。曾经我们有长长的 HTML 代码页面和简短的 CSS,现在只是反过来了。没什么好大惊小怪的。最佳实践是教人们最好将所有文件分开(即,将你的 javascript 放入一个 js 文件中,并在你的 HTMl 文档中链接它),HTML 是将所有内容整合在一起的“保护伞”。
更重要的是,教每个人使用服务器端编程语言来实现最佳功能。
要记住的好规则,虽然我在我的网站上刻意/开心地打破了数据库规则,将特定于帖子的样式代码存储在自定义字段和条目部分中……
一个完美的例子:我在工作中有一个项目,他们希望提高他们其中一个页面的搜索引擎排名,所以他们没有使用 HTML 结构和 CSS,而是有人想出了一个绝妙的主意,那就是使用 Light Boxes 和文本向页面“添加更多内容和关键词”,以便搜索引擎可以抓取。这是一个非常糟糕的主意,但我对非技术人员不会期望更多。我建议不要这样做,并提供了一些其他可行的解决方案,但他们仍然想测试 Light Box 的想法。
虽然这篇文章很棒……但我讨厌看到这样的东西,这很令人沮丧,而且这种情况经常发生。每当我看到有人违反了这些规则,我都会感到很痛苦。最糟糕的是当你得到一个充满了大量坏数据的数据库,必须弄清楚如何清理所有数据并使其可使用时。
我完全同意这篇文章!我讨厌人们在数据库标题字段中嵌入 HTML 标签。虽然有例外情况,但标题字段永远不应该包含 HTML。记住,你可以在数据库中使用简单的回车符,然后使用简单的正则表达式将 \n 替换为
Chris,你的观点很好。我以前从未从这个角度想过,但确实如此……每样东西都有其用途,仅仅因为我们可以用某些东西做其他事情,并不意味着它是最佳实践。感谢这篇文章!
很好的建议,我想任何设计师/开发者都需要不断提醒自己这一点。
嗨 Chris - 很棒的话题。只是想知道你对 CSS 变换 的想法?似乎将行为属性与标准的表现属性混合在一起。一开始我以为这很有道理,但仔细想想就不确定了。另一个灰色地带。
我完全赞成。你“转换”的东西是与设计相关的,因此最终属于 CSS。我同意这可能有点灰色……如果转换在某种程度上影响了功能性。
很棒的文章!
如果你想使用 CSS 的 :before 伪类在内容中所有图像内注入一个包装器,该怎么办?
目的是为每个图像创建一个框架,框架的宽度和高度是流动的。
我认为这段代码可能会起作用,这甚至可能吗?
#content-canvas img:before {
}
我将再次尝试这段代码……手指按错了……。
#content-canvas img:before {
content: ''
}
#content-canvas img:after {
content: ''
}
然后你会根据需要对 .image-frame-topleft、.image-frame-right 和 .image-frame-bottom 进行样式设置。
这可能吗?
我假设你在这些内容标签中包含了一些 HTML?我不确定你是否可以像这样直接插入 HTML。如果你可以,我认为你需要以 CSS 内容值所需的那种特殊奇怪的方式对字符进行编码。但如果你可以,我认为这没问题。这是另一个属于 CSS 的纯粹设计内容……
我无法找到任何关于直接插入代码的信息,但理论上你可以在一个单独的文件中存储代码并使用 uri include;
content: uri(mysite.com/beforeimg.txt);
不幸的是,IE 7 及更低版本不支持,其他浏览器仅部分支持。也许不值得花时间调查。
不适当使用的完美例子
通过 CSS 进行跨域 AJAX 请求。因为 CSS 不受相同的跨域规则约束……
太脏了,告诉你!太脏了!
http://nb.io/hacks/csshttprequest