我最初是在两年前写的这篇文章。它已经有点过时了,尤其是现在 HTML5 已经出现,并且使得 HTML 比 XHTML 1.1 更漂亮。所以我更新了它!
我忍不住要查看源代码,我看到每个好看的网站。就像如果你有一副 X 光眼镜,可以让你随意看到任何你看到的人的内衣。你怎么能不看呢?这太诱人了,想知道一个漂亮的网站是否是用漂亮的代码构建的,或者它的美只是表面的。代码?漂亮?当然。毕竟,代码就是诗。这只是 HTML,所以它不可能像动态语言那样复杂和优雅,但它仍然带着创造者的笔触。
这让我思考,是什么让代码变得漂亮?在 HTML 中,它归结为精湛的工艺。让我们看看一些以应有的方式编写的标记,看看它可以有多漂亮。

它足够大,可以打印出来贴在你的储物柜里,给你的朋友留下深刻印象。好吧,它的大小可能有点尴尬。我会提供 PSD,如果你想修改它。
- HTML5 – HTML5 及其新元素打造了迄今为止最漂亮的 HTML。
- DOCTYPE – HTML5 有史以来最好的 DOCTYPE
- 缩进 – 代码缩进以显示父子关系并强调层次结构。
- 字符集 – 声明为头部中的第一件事,在任何内容之前。
- 标题 – 网站标题简单干净。页面的目的是第一位的,使用分隔符,并以网站的标题结尾。
- CSS – 仅使用一个样式表(媒体类型在样式表中声明),并且仅提供给好的浏览器。IE 6 及以下版本使用通用样式表。
- 主体 – 为主体应用 ID,以便在没有任何额外标记的情况下允许进行独特的页面样式。
- JavaScript – jQuery(最漂亮的 JavaScript 库)从 Google 提供。仅加载一个 JavaScript 文件。这两个脚本都引用在页面底部。
- 文件路径 – 网站资源使用相对文件路径以提高效率。内容文件路径是绝对的,假设内容是联合的。
- 图像属性 – 图像包括替代文本,主要用于视障人士,但也用于验证。应用高度和宽度以提高渲染效率。
- 主要内容优先 – 页面的主要内容出现在基本身份和导航之后,但在任何辅助内容(如侧边栏材料)之前。
- 合适的描述性块级元素 – 标题、导航、部分、文章、旁注……所有这些都比旧的 div 更恰当地描述了它们包含的内容。
- 层次结构 – 标题标签保留给真正的内容,并遵循清晰的层次结构。
- 合适的描述性标签 – 列表标记为列表,具体取决于列表的需要:无序、有序和未充分利用的定义列表。
- 通用内容包含 – 多个页面中通用的内容通过服务器端包含(通过适合您的任何方法、语言或 CMS)插入。
- 语义类 – 除了适当的元素名称之外,类和 ID 也是语义的:它们描述而不指定。(例如,“col” 比“left” 好得多)
- 类 – 只要需要将类似样式应用于多个元素,就会使用类。
- ID – 只要元素在页面上只出现一次,并且不能以其他合理的方式进行定位,就会使用 ID。
- 动态元素 – 需要动态的元素是动态的。
- 字符编码 – 如果是特殊字符,则进行编码。
- 无样式 – 页面上的任何内容都不会应用样式,甚至不会暗示样式可能是怎样的。页面上的所有内容要么是必需的网站资源、内容,要么是描述内容。
- 注释 – 注释包含在可能在查看代码时不会立即显而易见的事物中。
- 有效 – 代码应遵守 W3C 指南。标签已关闭,使用必需的属性,没有任何已弃用的属性,等等。
非常棒的文章。我喜欢在主体上放置 ID 的想法,之前从未想过这一点。
我现在正在创建一个网站,它有不同的页脚,所以这可能很方便 :D
不错的作品 Chris。这是另一个对您的读者有用的链接……http://www.456bereastreet.com/archive/200711/posh_plain_old_semantic_html/
我喜欢干净的代码,无论我使用哪种语言——唯一的问题是,当你有一个迫在眉睫的截止日期,却发现自己沉迷于美化代码而不是完成那个重要的需求时!!!
你真的需要这样做吗?从 SEO 的角度来看,它真的有区别吗?
“重要内容优先”
“如果您的最重要的内容(如新闻和活动)可以首先列在 HTML 中,最好。如果您的侧边栏只是导航或不太重要的内容,最好将它放在 HTML 的最后。”
我不确定这是否对 SEO 有影响(就我个人而言,我认为 SEO 只是另一个流行的潮流,人们出于某种原因而加入——编写好的、有效的代码和好的内容,其他一切都会随之而来),但是……
它对无障碍性有很大的影响。
您是否曾经尝试过在没有视觉的情况下使用屏幕阅读器访问网站?您真的需要在看到实际文章之前浏览 50 个成员的博客列表吗?
重要内容优先也是常识。我的意思是,为什么你不这样做呢?有任何有效的理由,任何理由,不这样做吗?
我同意,David。“SEO” 应该改为“BO”(浏览器优化)。很少有人知道搜索引擎到底在寻找什么。就像你说的,“编写好的、有效的代码和好的内容,其他一切都会随之而来”。一个好的设计公司应该优化他们上传的每个网页。使用简单的标签,如标题、描述和 ALT,一切都将好起来。
HTML 5.1 规范现在有元素 “main” 来解决这个问题,即区分页面上的主要内容与页眉、页脚、导航面板等。
我很高兴地说,我在我目前正在进行的网站上使用了上面列出的每个提示。我一直努力构建项目,以便我有时间和资源来编写干净的语义代码。如果客户在时间安排上确实很灵活,我几乎总是愿意投入自己的时间来完善代码。归根结底,您希望对自己的工作感到自豪,并知道您尽了最大的努力。毕竟,谁知道是谁在偷偷地窥探您的网站并写一篇博客文章呢。这让我想起(发抖),我真的需要更新自己的网站。鞋匠的孩子没鞋穿。;)
一切都很好(应该很明显),但是“代码缩进为部分”的想法简直是胡说八道。
页面代码是为机器而不是人类准备的。它是否缩进、凌乱,甚至是否在一行中都没有关系。实际上,对于 IE6,有时最好将列表保持在一行中,不换行。
如果您手动编写每页的所有代码,缩进可能会有用,但如果您使用 CMS,则很可能无法实现所有漂亮的格式。
而且总是有工具可以帮助您快速格式化页面源代码,以查看“他们是如何做到的”,即使原始 HTML 很“凌乱”。
我认为保持代码整洁非常重要,不仅是为了你自己,也是为了将来可能需要处理该网站的任何人。
我曾经接手过一些网站,仅仅因为有人明显不在乎任何类型的顺序,所花费的时间几乎翻了一番。
即使您确实使用 CMS,它很可能也会使用您最终需要修改的模板。
你一定是在开玩笑。您的代码格式对于维护易于管理的文件至关重要。即使使用 CMS,您也经常需要在模板级别进行更改,并且您在混乱的代码中四处寻找,试图在一片混乱中找到那个列表项,您会希望自己更井井有条。
您的代码格式质量清楚地表明了编码人员的勤奋和细致程度。简单明了。
这里的问题只是“何时”。缩进是为人类准备的。浏览器只是想要紧凑、有效的代码。
所以,你们俩都对。
你听说过代码整理工具吗,新手?
没有内联样式?我不想为我在临时假期品牌重塑期间可能想到的每一个疯狂想法创建 CSS,比如内容区域内带有背景图像的丑陋绿色 DIV。所以我要把所有这些都放到一个 CSS 文件中,只为一个页面?我可不这么认为。
但作为一般规则,我同意你的观点。也就是说,我认为大多数阅读本文的人已经知道这一点。不是吗?
你使用帖子中显示的 body 标签上的 id 属性,并相应地引用该 div。
@smickworks: 我要说的是,通过为一个页面创建单独的样式表,你失去了将 CSS 缓存的好处,但无论如何,内容应该与表现形式分离,无论它只出现在一个页面上还是通用。
你可以把所有页面的 css 放到一个文件中。它只是一个非常长的 css 文件(取决于网站)。
这些新的描述性块支持非 HTML5 浏览器吗?
写得不错;)
标题应该放在带有编码的元标记之后,因为如果标题包含非 ASCII 字符,你可能会遇到严重问题 - IE 可能会显示一个空白页面。
说得很好!
有效的 HTML5 不需要字符集放在 head 中的第一个位置吗?
不,它不必是第一个。它只需要位于前 x 个字符或行内,或者类似的东西(我不记得确切的数字)。但是,在我看来,没有理由不把它放在第一个位置。
非常有用的文章,感谢你特别提到了 body id。我会把它作为我未来网站的清单。
大家好,
好文章,好的评论。
我一直也在思考如何编写更简洁的代码,但我遇到了一些障碍,至今还没有找到好的解决方案。
1:我们应该如何在一个文件中结合 PHP HTML 和 Javascript?如果我编写 PHP,我会尝试使用 MVC 模型,并且只在“视图”页面中使用一些循环和 echo 语句。但是,如果我还添加了 JS,它很快就会变得混乱。
2:如果你想让你的 PHP 生成干净且缩进良好的 HTML,你必须在你的 PHP 中手动编写 /t 和 /n。这会让你的 PHP 代码变得不那么干净和易读。因为 PHP 代码更有可能产生复杂的问题,而我想要最干净的代码,所以我更喜欢 HTML 代码不那么干净。
3:我最近遇到的一个问题。如果你有一个网站,你可以让用户添加内容,并且允许他们使用某些标签,你如何控制使用的标签也是干净的?
你对这些问题有什么想法?
1:我们不应该这样做。应该使用模板系统,我个人喜欢 PHPTAL
1:为什么在一个文件中?不同的应用程序层有不同的 MVC 用途,你可以在数据库层上有视图,但这些视图构成了上层层的模型。客户端层也是如此,服务器提供其视图(HTML),这就是浏览器页面的模型。如果应用 MVC,表现形式应由 CSS 控制。
2:你可以在 PHP 中使用 heredoc 语法,这样你的 PHP 代码会更简洁,而且非常易读。
3:这是应用程序逻辑,你可以随时尝试格式化和验证它,应该很有趣。
不要使用 PHP includes、jsp:includes 或任何其他这种烂东西。如果你决定不想要在那个特定位置包含内容,或者根本不包含内容,那么猜猜会发生什么 - 你需要更改网站上的所有 150 页。
不,相反,应该使用修饰器/组合器,比如 sitemesh,或者像 RoR 这样的 MVC 框架,它可以免费提供视图模板。
不要将标题和页脚包含到你的页面中 - 将你的页面包含到你的标题和页脚中!
就像你一样,我查看我访问的网站的源代码,只是为了看看竞争对手是否像我一样写出干净的代码。
澄清一下关于 IE 和 xhtml 的问题。IE 在使用 xhtml 1.1 文档类型时默认使用怪异模式,但在使用 xhtml1.0 严格模式时则不会。
其次,如果可以阅读,那就是语义的。在 ul 周围添加一个额外的 div 不会害死任何人。虽然,我个人不会添加额外的 div。
最后,代码缩进可以帮助其他编码人员 - html 不仅仅是为机器设计的 - 以后可能需要有人进入并使用它,无论是通过 cms 还是外部,它都非常有帮助。
我理解你的感受,Chris,我对精心制作的代码也有同样的瘾。
我经常这样做。尤其是当我看到一个漂亮的网站时,我往往会想:“它的内在有多漂亮?”
我发现,在做动态网站时,生成一个带有适当缩进结构和换行符的看起来不错的 HTML 文档是一个挑战。我已经到了不得不面对这样一个事实的地步:我在这方面花费了太多时间,真的需要放手了。
好文章。然而,遗憾的是,这篇文章所在的网站本身并没有通过验证。H1 元素位于 A 元素内,缺少 alt 属性,P 元素没有关闭。
不错的清单!
我想知道是否有工具可以检查我的网站,并给我一些关于如何改进它的提示。或者,是否有工具可以帮助将基于表格的设计转换为干净的 div 设计?
任何提示都会非常感谢!
@Inwit,
是的,有这样的工具,那就是人类的大脑及其对标准和干净代码的追求 ;-)
说真的:我认为,手工重新设计/重构代码比让软件来做要好得多。
我很少相信机器生成的代码。
举个例子:可怕的 Dreamweaver 和 Frontpage 网站… *不寒而栗*
我也有同样的瘾,不过我更经常在 firebug 中使用 CTRL+SHIFT+S。
有人可能会说,语义上干净的菜单不需要在它周围包裹一个 div。
我很喜欢这篇文章。
这是一篇非常好的文章,对我来说有一些新的提示,还有一些我经常忘记的好想法。有人告诉我做的一件事是我现在非常喜欢,那就是在我的 div 末尾添加一个注释,明确说明它属于哪个 div
你好,
很好的建议,但我更愿意(而且我确实这样做)在 body 上添加一个 class,而不是一个 ID。
body 标签本身就是唯一的,所以 body.yourclass 将是唯一的,不需要使用 ID。
此外,你为 body 选择的 ID 可能会与整个页面中使用的 ID 冲突。
总而言之,我们也可以说,在一个*网站*中,不同页面的 body 都是同一个“对象”。如果为它们分配一个 ID,就意味着“每个 body 都是一个不同的实体”,而事实并非如此:相同的实体,只是存在一些(或很大)差异,因此我认为 class 在语义上更好。
我的两分钱…
在这种情况下,在 body 元素上使用 id 是有意义的。它用于指示要加载的特定页面。如果你需要为单个页面覆盖默认的 CSS,这将很有用,现在你有了可以在选择器语句中使用的 id。
我不同意。
body 只出现一次,所以你没有理由不能使用 ID 而不是 class。
至于为什么要使用 ID 而不是 class,这在文章/图像中已经说明了。它是为了将特定的独特样式应用于特定的独特页面。
现在,如果有一组多个页面需要以这种方式进行样式化,那么使用 class 会更合适。
例如,你想要为你的在线目录和博客使用不同的外观。目录的所有页面都可以使用“catalog”的 body class,并使用绿色背景。
但是,你的目录中有一个页面是关于促销商品的,请将该页面的 body 设置为“red_hot”的 id,并使用红色背景,因为它很独特。
在使用 CMS 时,其中一些步骤是不必要的,但是,如果你想避免加载额外的样式表,或者你想通过 JavaScript 进行特殊处理,那么在 body 上添加一个 id 和/或 class 可以为你提供一个非常有用的**挂钩**到你的标记中。
文档中只有一个 body 元素,并且位于 html 元素内部,因此你可以使用 ID 来标识它。无论你的网站中存在多少个文档,这都没有关系。
@John Lascurettes
虽然从技术上讲你是对的,不需要包装 div,但出于几个原因,这样做仍然是好的。
举个例子:为未来做计划。CSS 的美妙之处在于你可以用语义的方式标记文档,并将表示层与内容层分离。在一个理想的世界里,这意味着你只需标记一次页面,就可以根据自己的意愿进行设计和重新设计。现在你可能不需要包装 div,但这样做也无妨,它会增加更多控制,你以后可能会改变主意。
嘿,我喜欢这篇文章。我想知道你是否可以给我展示一个文本框的 HTML 代码。我需要它来做一些事情,但我不知道它是什么样子的。谢谢!
-Ashley
“保持代码整洁美观实际上可以节省你的时间,因为它更容易阅读和查找东西。"
这是真的!我刚开始学习网页设计,但我很快就学会了这一点。此外,当我清理我的模板时,发现了一些乱七八糟的代码,这让我开怀大笑。:):)
虽然 HTML 代码很干净,但它并没有什么特别之处。如果你像这个网站一样设计一个典型的网站,它具有典型的页眉、菜单栏、搜索框、侧边栏、内容区域和页脚,它可以工作。但是,当你设计一个具有许多内容面板的商业网站时,我怀疑你干净的 HTML 代码是否有效。
所有程序员都应该遵循的第一条规则是:添加注释!
1) 你没有给出任何理由说明为什么这种标记方式不能工作。它只是会有更多元素,可能会有更多动态内容。
2) 注释在图片和文章中都有提到并突出显示。
说实话,HTML 注释远不如代码注释重要。我说的是真正的代码(PHP、JavaScript 等),而不是标记(HTML)。
使用 HTML 注释的唯一原因(如文章中所示)是,如果代码的功能不够直观。比如 PHP 包含文件。
举例来说,你可以看到网站,也可以看到标记... 你需要添加一个注释来解释“这是主导航菜单”吗?它是一个包含“main_nav_menu”类名的 UL 元素。
你显然没有做过任何大型项目,所以你不知道。去 bbc.co.uk、nytimes.com、msn.com 或者任何其他大型知名网站看看,然后告诉我什么是漂亮的语义标记。
关于“哇”:请允许我向你介绍一下“应该”和“是”的谬论。现实不一定符合应该如何。反之亦然。停止喷子行为。
注释... 是指我用来给自己留笔记的括号-感叹号-东西吗?这样我就能知道我在一大堆乱七八糟的代码中到底在哪里?
我依靠它们。
@sV:注释 HTML?哈哈!如果你想浪费宝贵的带宽,让客户的网站速度变慢,那就没问题,绝对是最好的选择!
注释对于服务器端脚本或要编译的源代码来说是好的,但将注释放在 HTML 或 CSS 代码中是不好的。
如果你想分享信息,那就写一篇*文档*,而不是注释。
而且,保持一个大型网站的整洁是可能的。事实上,如果你不想让网站在经过 6 个月的修补后崩溃,就必须这样做。
“干净”并不意味着“基础”,你可以生成干净的复杂代码。
顺便说一句,如果代码很干净,你就没必要添加注释了 ;-)
我真的很赞同你的观点!
另外,“编写 HTML/CSS” != “编程”
它只是标记语言。
如果你在命名空间方面很聪明,并且使用描述性的 ID 和类名,那么很少需要 HTML 注释,在我看来。
这幅关于漂亮的 HTML 代码的图片很美!
谢谢。
这是一个关于如何编写 HTML 代码的好例子。谢谢。我只想补充一点,title 标签非常重要,我同意 Chris Coyier 的观点,title 标签应该放在 meta 标签之后。
body id 可以用 php 自动生成
<body id="<?= basename($_SERVER['PHP_SELF'], ".php")?>">
如果你使用模板,这尤其有用。
我不同意所有这些观点。其中许多功能用于强迫 HTML/CSS 承担超出其能力的责任(例如,用 DIV 将页面包裹起来没有任何语义意义,它只是帮助设计师实现图形/排版效果)。同样,将菜单放在列表中的原因仅仅是因为它是一个列表,而不是为了让你能够在选项卡上添加圆角。
另外,从逻辑上组织标题,并保持标题样式一致,这不是一个更好的主意吗?为什么在不同页面上更改二级标题 - 这只会让用户感到困惑。
漂亮的代码应该是结构良好的,并用语义进行标记。这使得代码易于阅读。
“为什么在不同页面上更改二级标题 - 这只会让用户感到困惑。”
原因是二级标题在整个网站上可能都意味着相同的东西,但这并不意味着它们应该看起来都一样。
在不同页面上更改 H2 标签到底是如何让用户感到困惑的?他们看不到标签,所以 H2、H4 还是 .sometext 有什么区别呢?如果创建所需网站外观的唯一方法是用 DIV 包装它,那么这样做有什么坏处呢?
屏幕阅读器会宣布标题级别,他们也可以通过标题级别进行导航。因此,如果你正在听一个页面,它会先读取标题中的所有内容,你只需按下 H1 或 H2 键就可以跳过这些废话,开始听到与页面实际相关的内容。在整个网站上保持标题级别的使用一致,对于盲人用户来说是一个福音。
你的 HTML 代码确实很干净,还有一些很棒的建议。我想说你漏掉了一点。HTML 还应该进行压缩。
事实上,我几乎不同意这篇文章中的所有观点。它完全错过了重点。HTML、CSS 和其他相关技术的重点是创建网站,然后通常是让网站保持更新。HTML、CSS 等等本身并不是最终目的。人们不会因为你编写代码而付钱给你,而是因为你解决了问题而付钱给你。因此,他们希望问题得到解决,而不产生新的问题。所以,大多数人想要的是创建尽可能干净、简单、且能完成所需工作的代码。因此,在阅读上面的文章时,我会问一些科学问题,例如“为什么”以及“证明”。
# 正确声明 DOCTYPE
为什么?大多数网页在没有 DOCTYPE 的情况下也能正常运行,因此它增加了不必要的混乱。此外,W3C 的人对每个人都指向他们的网站感到非常恼火。他们说,如果你必须使用 DOCTYPE,那么就把 .dtd 文件放在你自己的服务器上,使用你自己的带宽。
# 整洁的头部
我同意。像这样保持整洁。
# 为 body 添加 ID
为什么?与不使用 ID 相比,这样做有什么好处?就我个人而言,我可以想到为 body 添加 ID 的具体原因,例如,如果你要动态地修改它。但在其他情况下,你最终得到的代码可能毫无用处。
# 语义化的干净菜单
为什么?如果菜单可能会发生变化,那么这可能是一个好规则。但根据菜单结构和页面设计,这可能不是一个好主意。
# 为所有页面内容添加主 DIV
为什么。这可能是为了编写代码而编写代码。这解决了什么问题?
# 首先添加重要内容
为什么?SEO 吗?西方人从左到右,从上到下阅读。因此,在一个标准的 3 列布局中,我预计代码顺序应该是页眉、左侧、中间、右侧、页脚。如果代码顺序不同,我就会到处寻找。
# 包含公共内容
我多少同意这一点。通常这是一个好主意,但有时它行得通,有时不行。这是一个架构问题。
# 将代码分节并添加制表符
哦,我喜欢代码添加制表符。制表符是我的朋友。顺便说一下,Python 使用制表符作为其结构方法。因此,使用制表符缩进的代码与大多数其他使用花括号的语言中的使用花括号缩进的代码相同。
# 正确的结束标签
是的,但我真的讨厌那些在 img 标签中(以及其他标签中)添加“/>”的人。没有它也一样可以正常工作,而且主要的浏览器都没有出现任何问题。
# 标题标签的层级结构
SEO 有一套自己的规则,这些规则正在毁掉所有人的标题标签。但又一次,客户没有为漂亮的代码付费,他们经营着一家公司,SEO 通常对他们的利润非常重要,因此它优先于所有良好的设计规则。
## 内容,内容,内容
P 和 BR 更像是一种风格选择。如果你打算在你的 CSS 中使用 P,那么它可能更好,但如果你不这样做,为什么不坚持使用一个更符合计算机思维方式的标签呢?
## 不要使用样式!
错误,错误,错误。CSS 就像其他所有工具一样。表格、字体和其他标签仅仅是工具。一个表格可以走得很远,很少会遇到 CSS 会杀死的意外情况。但再一次,这是一个架构问题。如果你有数百个手工编写的 html 页面,那么 CSS 将在你的下一个网站重新设计期间为你节省时间,但如果你只在数据库驱动的网站中只有几个模板,那么将太多格式放到 css 中只会妨碍你并增加代码复杂性。
我的规则是为任务使用合适的工具,而不是我最喜欢的工具。正确的工具应该产生最少数量的小而简单的文件。一个关于我所见过的糟糕使用 CSS 的例子是,在一个网站上有 30 个从根本上不同的页面,它们所有的 css 都被压缩成一个文件。同样糟糕的是,将 css 分成 30 个独立的文件。
单独文件中的 CSS 具有三个目的。一个用于通用代码的公共库,可能是一个重新格式化整个网站的单一位置,以及加速网站加载速度,因为 css 文件将被 304。所以,如果 css 在整个网站中没有重复,那么就只剩下加速页面加载速度了。所以,如果你遇到了一种常见情况,即将一些 CSS 复制到仅在页面上一个位置使用的 CSS 文件中,而且这个位置很少被加载,那么为什么它要在 CSS 文件中?为什么不把它放到一个样式属性中,直接放在它被使用的地方?CSS 纯粹主义者会因为这个而变得非常激动,但对我来说,这闻起来像宗教而不是事实。在良好的编程中,你需要记住,真实的人会阅读这些代码。如果一个人在修改页面时,必须跳回 CSS 文件并搜索一些标签修饰符,那么你是在为你的客户服务,还是在为一些别人在脑海中想出来的规则服务?如果样式修饰符就在你进行修改的地方,那么你让一切都变得更容易、更简单、更便宜。
我个人会解雇任何我发现的浪费我金钱进行“正确”格式化的程序员,这些格式化只会让代码变得复杂和模糊,从而错过了他们被雇佣的根本目的;解决问题。
我所施加的更重要的代码规则是:在代码中使用英语。ftr_l.png 不好,而 footer_left.png 更好。
首先,我完全不同意你刚刚说的几乎所有事情。
# 正确声明 DOCTYPE
A) 文档类型定义存在是有原因的。如果你不明白,也许你应该谷歌一下。
# 为 body 添加 ID
A) 在我上面的一条评论中解释过。它是用来控制和连接你的标记的。
# 语义化的干净菜单
A) 一切都应该语义清晰。这不仅仅是关于你的“为 IE 6 设计”的网站看起来不错,或者你的 Frontpage/Dreamweaver 代码能正常工作……它是关于标记的持久性、稳定性和兼容性。
# 为所有页面内容添加主 DIV
A) 目前,这是解决某些设计问题的唯一方法,比如固定宽度、居中的网站。
# 首先添加重要内容
A) 再次,之前的评论。无障碍性。屏幕阅读器用户不应该为了阅读一篇文章,而不得不听完你整个博客或可能不相关的公司服务列表。
而且,为什么不把重要的内容放在前面?我还没有听到任何有效的理由,说明为什么你会故意不这样做,除了开发者懒惰。
# 正确的结束标签
A) 按照定义,图像标签是一个自闭合标签。像链接标签和元标签一样。我不确定你为什么要和规则争论。这就像说,是的,但我讨厌在编程中使用 if/else 代码……我宁愿使用 turtle/shell o_0
# 标题标签的层级结构
A) 盲目阅读和遵循 SEO 垃圾的人是他们自己最大的敌人。有效的语义代码和有用、相关的內容是你唯一需要担心的两件事。其余的都是递减的回报,特别是如果你付钱给一些“SEO 专家”来搞砸你的网站。
## P 和 BR 更像是一种风格选择。
A) 不,实际上不是。这是一个语义和结构选择。如果某件事是段落,就使用 P 标签,如果你只是想换行,就使用 br 标签。真的很简单。
## 将太多格式放到 css 中只会妨碍你并增加代码复杂性
A) 不,完全错误。将表格用于非表格数据,这纯粹是无知。使用 CSS 不会使事情变得复杂,而是使事情变得非常简单。
你听说过 DRY 吗?可重用代码?模块化?易于维护?
## 将 CSS 放到一个样式属性中,直接放在它被使用的地方……闻起来像宗教而不是事实
A) 这是我曾经听到过的一个自称聪明的人说过的最愚蠢的事情。
其次,当我看到这句话时,我彻底失去了与你进行关于这个主题的有意义的辩论的希望。
“浪费我金钱进行“正确”格式化的程序员,这些格式化只会让代码变得复杂和模糊”
正确的格式化会使代码模糊?真的吗?
我并不介意因为这个原因被你解雇,但它也让我真的、真的感谢我不为像你这样的人工作。
@Robert 你是在开玩笑吧?!哇。
我无法相信你花了时间写这些。真是浪费精力。你不可能更错了。
我认为 Robert 只是在开玩笑,对吧?我的意思是,他说的所有事情都明显地错误至极。
然后我去看了他的网站。我还在笑得屁股疼。哈哈哈
@Robert
DOCTYPE:省略它会触发怪异模式,并伴随许多奇怪的行为,使跨浏览器实现难以快速完成,因为其他浏览器中的快速模式试图实现 IE 的许多快速模式。这使得一切变成了一场猜测游戏。
而且你从哪里听说 W3C 不希望人们使用与 w3c 网站相关的 DTD 的文档类型定义?没有浏览器会加载 HTML 文件的 DTD,所以它没有理由说这话。
语义清晰的菜单
重要的不仅仅是语义清晰的菜单,而是整个文档。原因是为了让机器理解和解释内容。辅助技术、搜索引擎是受益于语义文档的最大群体。
重要的内容放在前面
因为一个网站可能以多种方式呈现。例如,手机将无法显示三列布局。它需要将所有内容线性化。网站被更多人访问,不仅仅是计算机上的浏览器。这就是为什么布局不应该决定内容的顺序。
正确的结束标签
/> 在那里是因为它采用的是 XHTML 格式。XML 格式的 HTML。如果你不喜欢,可以使用 HTML。
XHTML 比 HTML 的优势在于你可以使用简单的 XML 解析器来读取和迭代 DOM。如果你有 HTML,你需要使用 SMGL 解析器,它并不那么简单。
标题标签的层次结构
“SEO 有一套自己的规则,这些规则正在毁掉所有人的标题标签。”——那是什么?
## 内容,内容,内容
P 和 BR 不是风格选择。P 元素定义了一个段落,BR 仅仅是一个强制换行符。为什么 BR 更符合计算机的思维方式?
## 不要使用样式!
表格用于布局和字体标签是错误的工具, period。关键在于将布局与内容分离。
从整体上看,你似乎认为网站纯粹是一个视觉问题。你的论点没有考虑到如何将文档呈现给不同的媒体,例如屏幕阅读器、手持设备和打印机。将所有布局放到单独的 CSS 文件中,使你可以为这些不同的媒体提供不同的 CSS。
如果一个网站有 30 个页面需要 30 个不同的样式表,那么真正的问题是为什么它需要 30 个不同的样式表?为什么没有一致性?
“我个人会解雇任何我发现的浪费我金钱进行“正确”格式化的程序员,这些格式化只会让代码变得复杂和模糊,从而错过了他们被雇佣的根本目的;解决问题。”
CSS 不会使代码变得复杂或模糊。这完全取决于编写代码的人。
如果你将文章视为一个特定的例子,你的一些问题是有效的。许多 DIV 和 ID 可能不需要。它完全取决于每个网站,标记应该适应每个情况。
但是,你关于语义和将布局与内容分离的许多问题都没有说服力。你是否了解过 web 语义的优势?将内容、布局和行为分离的价值?
托马斯,不要浪费你的精力和 Robert 争论,我们显然生活在不同的世界 ;-)
充其量,他是个搅屎棍,最糟糕的是他真的相信自己说的话……
他正是每个自由职业者都应该害怕的那种客户……
他认为自己足够聪明,不仅可以完成你的工作,而且可以比你做得更好。
简而言之:危险。
“一般来说,我发现用最少(不少于)的元素来表达你的页面是最理想的。”
是的——有一个需要注意的地方。有时在某些地方添加额外的 div 很有用,这样以后可能可以用作样式钩子。我曾多次后悔没有在需要调整某些东西时添加任何备用样式钩子,要么只能不去管它,要么必须逐页添加它们。在页面关键部分周围添加几个备用 div 不会造成伤害,而且从长远来看可以为你节省很多时间。
“不,不,不。那么,如果你不使用字符集中的字符,你为什么要费心设置它呢?直接在你的代码中放入 © 符号,只要你设置了正确的字符集,这种做法就可以保证它显示正确。”
不,不,不。你知道你的文本编辑器使用的是什么字符集吗?我不知道——它可能是 Windows-1252。将 UTF-8 键入普通文本文档的第三行并不能神奇地以 UTF-8 形式保存该文档!我宁愿保持安全并使用字符编码,并保证它将在每个浏览器中正确显示。
如果你无法以 utf-8 形式保存你的文件,那么你就应该停止网页开发(或者更努力地学习)。
如果你知道你的编辑器和你的 Web 服务器的作用,那么就没有必要编写编码实体。
对此表示赞同。为什么应该使用这些可怕的编码字符串,而不是将文件保存为 UTF-8(无 BOM)编码呢。
这样可以省去很多麻烦。
很棒的文章,但你能告诉我如何先获取“重要内容”吗?我使用 php 包含来管理我的导航和页脚,当在 html 源代码中看到时,导航部分是第一个,如何才能使“内容”先被读取呢?
谢谢
你可能希望在你的侧边栏之前包含内容,例如,使用一个典型的博客作为例子。
主要原因是可访问性。
使用屏幕阅读器的人(以线性方式向下阅读页面)不应该必须跳过你的 50 个类别和博客列表,才能看到你的文章。
嘿,如果你对所有的 HTML 需求使用 Haml,你已经完成了大部分工作了!
非常棒的文章,不过我建议在你的列表中添加另一个技巧:为适合的图像类型使用合适的图形文件格式。
你的“CleanCode”图像显然应该是 PNG(或 GIF),而不是 JPEG。JPEG 适用于摄影内容,而你的 CleanCode 图像显然不是照片!
我做了一些测试,你应该能够使用 32 种颜色的 8 位 PNG 制作一个大约 100-125 KiB 的文件,并且效果比你 896 KiB 的 JPEG 文件更好。如果嵌入 PNG 而不是 JPEG,则 PDF 也可能做到这一点。
什么?!Jpeg 是受支持的 Web 图像!
感谢你让所有傻瓜都出来了,Chris,哈哈!
非常棒的文章!我之前也没有想过在 body 上使用 id :)
干净的代码不是爱好,也不是苦差事或工作,而是一种生活方式。当我看到一个看起来很漂亮但代码很糟糕的网站时,我无法忍受,它毁了我对创建它的开发人员的钦佩。
顺便说一下,我也查看了你的网站源代码,因为我自己也是一名 Web 开发人员,并且做了同样的事情。你的网站代码很干净,朋友,干得漂亮。
如果每个 Web 开发人员都能阅读这篇文章就好了。
你可以通过使用条件注释来渲染具有 IE 版本 ID 和 IE 类别的 div 来简化你的 IE CSS。这样你就可以将所有样式保存在一个样式表中。这样更容易管理。看看 newsweek.com 的源代码,你就会明白我的意思了。
我假设你正在你的 main.css 文件中使用一个重置样式表。这对小型网站来说很好,但较大的网站需要更多地拆分样式表,以便更灵活。
使用 HTML5,你无需声明“type”属性。
http://diveintohtml5.org/semantics.html#rel-stylesheet
HTML5 现在是否支持 php 类型标签?:) 无论如何,干得漂亮 :)
为什么 JS 文件声明在页面的底部?它们应该放在头部。
谢谢
这是常见的做法,这样加载 JS 就不会潜在地减慢整个网站的渲染速度。
如上所述,为了防止阻塞(减慢),也就是说,你可以在文档的头部使用 JS 文件的并行加载,以达到同样的效果。
我个人使用并行加载,在文档的底部,不仅可以确保更快地加载内容,而且可以更快地渲染,并且不会有任何阻塞。
实际上,我的脚本将我的脚本附加到文档的头部,这意味着它在 firebug 等工具中仍然看起来是正确的。
x
我唯一想做不同的事情,就是你的 H1 标签的位置。我通常把它放在网站徽标或标题周围,如果有的话。在这种情况下,它会出现在写着
这样,如果你的页面在没有样式的情况下被查看或打印,你仍然会在页面的顶部有一个漂亮的、粗体的大 H1 网站标题。其余的标题可以从 H2、H3 等开始。这可能不是严格的语义上正确的,但 H1 是我们最接近的东西(除了 TITLE,它不属于 body),用于语义上描述网站标题吗?
我认为它也可能对 SEO 有用,但我可能错了,如果标题标签具有相同的内容,并且在 SEO 中优先级更高。有人知道这个问题的答案吗?
我曾经完全赞同这一点,但现在我不同意。我认为徽标应该只是普通的锚链接,而 <h1> 应该保留给该页面的主要标题。只是一个个人喜好。我想强调该页面上最重要的内容是该页面上的内容,而不是徽标。
我必须同意 Chris 的观点,因为内容为王,而徽标只是次要的。H1 标签绝对应该用于内容标题,而不是徽标。
如果有的话,我会把博客的标语放在 h1 中,并将名称和徽标保留在普通的 'a' 和 img 标签中。
即使这样,你也在浪费一个 h1 标签,所以要小心选择分配的位置。
你的 H1 可能是从 SEO 角度来看最重要的唯一内容元素。页面标题也有帮助,但更多的是从用户查看 SERPs 的角度来看,而不是从爬虫查看你的内容并确定其相关性的角度来看。锚定徽标,给它命名,然后保留它。“介绍”你的页面,明确地使用 H1,这样你就设置好了。
在我看来,为了提高你的关键词的相关性,你的标题和主要标题应该**几乎相同**。
这样就不会出现我们应该把 H1 放在哪里作为标题,以及 H1 是否服务于相同的目的,即描述页面内容的问题。
喜欢这个例子。_图像_ 的标题栏中的一个小错别字引起了我的注意,而其他所有内容都经过精心呈现。“beatiful-code” 不重要,但 FYI。
克里斯
关于缩进,我有一个问题。你是使用制表符还是空格来缩进的?就最终产品而言,虽然我希望保持代码井井有条,但总有一些内容(例如 CMS 或某些服务器端进程)会把它弄乱。
干杯
我认为最终结果不需要像你使用的模板那样完美地格式化。
机器不在乎它是如何格式化的。另一方面,你需要能够阅读和维护代码。
我,同样,在包含某些东西时也会遇到格式问题,但我的视图模板非常干净,所以对我来说这是一个完美的解决方案。
你使用 UTF-8 并对特殊字符进行编码,为什么这样做呢?
我正要问同样的问题。如果你用 UTF-8 编写页面,那么编写原始字符而不是字符代码是不是更有意义?从两个角度来看,这样做是有意义的:你不会用不需要的东西来膨胀文件大小;而且你可以阅读你写的内容,而无需在脑海中解析字符代码!
如果你要写出所有的字符代码,那么使用 UTF-8 就没有意义了。
我想要使用可扩展的标签,比如 `section` 和 `aside`,但我认为 IE6 不会识别它们。有人能确认或否认吗?
IE6 不会在没有 JavaScript shiv 的情况下看到它们 -> http://ejohn.org/blog/html5-shiv/
IE 6 在很多方面都不正确,它肯定不支持 HTML5,除非从 JS 获得一些外部帮助。
太棒了!我需要学习 HTML5。
最棒的是,它并不难学,HTML5 与 XHTML 1.0 - 1.1 很相似 :)
你好,
我喜欢你对漂亮 HTML 代码的描述,但我想指出 HTML5 中的一个新增功能,它让代码更漂亮。在 HTML5 中定义字符集可以通过以下方式实现:
关于这为什么有效的解释可以在 这个 public-html 邮件列表消息 (来自 Mark Pilgrim) 中找到。
哎呀,这根本不起作用——代码没有显示出来。让我再试一次(并且可以随意将此评论与上一条合并)
<meta charset="utf-8">
啊,其次,除了 < 和 & 之外,不需要对任何字符进行转义。代码看起来 *要* 好得多,因为只对必要的字符进行了编码。
感谢您更新此内容,Chris!它正在取代我墙上的旧版本。
很棒的内容,Chris。
我有一个问题,可能是我自己的疏忽。我注意到您向 footer 标签添加了一个 class,这意味着它应该被设置样式,而不是一个名为 footer 的 div。但在没有 javascript createElement shiv 的情况下,IE7 和 IE8 无法识别 footer 标签。头部中的条件 IE CSS 调用是为了解决这个问题吗?
我对 shiv 进行了反复权衡……我选择不包括它,因为这只是一件临时的事情,而且这篇文章并不是真的关于这个……
关于 class,它不需要这个 class 才能被唯一地设置样式。请注意,这个 class 名称与页面上的许多其他元素共享(“container”)。这是我用来进行 clearfix 的 class 名称。
这对于纯 HTML 来说很不错。
然而,当涉及到 web 脚本(例如 PHP)时,往往会产生未正确缩进的输出。
你仍然可以通过在 PHP 代码中正确缩进来修复它。这更难,也更耗时,但仍然是可行的。
:( 我希望我的 html 看起来像这样。它正在变得更好,但现在它有点乱。我的 title 不是第一个,我的 javascript 在头部。我可能最终会把它移动到尾部,但这是个大问题吗?我有 document.ready,所以这会造成很大的区别吗?我不想有争议,我只是真的很好奇。
嘿,Chris,还有一个想法:它不可打印!即使在 11×17 的小报纸上,说明性文本也只有 4pt。我修改了你的 PSD,大幅裁剪了代码示例窗口,然后将右列向左移动了一个完整的列宽。现在,在 11×17 的纸张上,类型是可以识别的。再次感谢您提供这些内容!Art
只是想知道,既然你已经指定了 utf-8,为什么还要“编码特殊字符”?我不赞成“很难分辨你的编辑器使用的是什么”的论点,因为……好吧……分辨你的编辑器使用的是什么并不难。
能够将提供的文本直接复制粘贴到代码中,而无需替换任何内容,这确实很不错……
总的来说,我喜欢你的 HTML 布局。我想说 head 和 body 元素应该缩进到 html 元素内部,以保持一致。
你可能说对了,只是因为某种原因,多年来我一直把它们放在最左边。我真的不知道为什么,但现在任何其他方式看起来都很奇怪。
我不知道这是否已经提过,但如果你使用 html5,并且希望它在 IE 中工作,那么你需要包含这个 http://ejohn.org/blog/html5-shiv/ 来设置元素的样式
这解决了我的一个问题
如果我开始使用这些技巧,我会遇到哪些浏览器兼容性问题?我假设新标签可能在旧浏览器中不受支持。如果我知道有哪些浏览器支持,我很乐意开始实施所有这些内容。有人能帮我解释一下吗?
很棒的技巧文章!我知道其中一些……但绝对不是全部!太棒了!谢谢!
script 标签应该放在 <head> 部分,而不是随意散布在页面主体中。如果你希望代码在页面加载或 domready 后运行,那么使用正确的事件处理程序。
那些 script 标签并没有“随意散布”,它们被专门放在页面的底部,这样它们就不会阻止页面的其他部分下载,从而减少页面渲染所需的时间。
看看 Yahoo 对此事的看法。
上面的评论应该说 <head> 部分,显然 HTML 这里没有转义……hrmmm alert(‘易受脚本注入攻击’)
你为什么要对样式表进行三个条件判断?我通常使用一个普通的包含,IE6 也能看到它,然后只对 IE6 进行一个条件判断,以修复损坏的元素。
很棒,Chris。
很棒。刚发给了我的一个朋友。
为了可访问性,<a> 标签是否应该有一个 title 属性?
据我所知,title 属性从来都不是必需的,无论是为了验证、可访问性,还是其他任何目的。
img 标签上的 alt 属性,当然。但 title 标签纯粹是可选的。
title 标签当然不是必需的,但它们对于可访问性目的非常有用,特别是在处理链接时。
屏幕阅读器可以从一个链接跳到另一个链接。因此,如果你的链接文本本身没有意义,那么你需要一个 title 标签来帮助添加上下文。
也就是说,有人告诉我,如果 title 与链接文本相同,那么添加 title 会更糟。因此,像这样
你可以 <a href="http://www.example.com/" title="查看有关干净 HTML 的文章">阅读这篇文章</a> 如果你想的话。
很好,但像这样
你可以 <a href="http://www.example.com/" title="查看有关干净 HTML 的文章">查看有关干净 HTML 的文章</a>
不好。title 标签应该只用于在缺少上下文的地方添加上下文。
看看,对我来说,使用 class 而不是 ID(其中 ID 旨在作为单个调用),是代码不规范的标志。我不会允许我的开发人员在 section 和 footer 上使用 class,而他们应该直接设置 footer 的样式,只在特殊情况下使用 ID 来撤销样式,例如嵌套在其他元素中的 footer,或者使用高级 CSS 选择器来解决问题。
也许我已经习惯了看到糟糕的前端模板代码(咳嗽,zen cart,os commerce,cube cart,大多数 cms 模板),但对我来说,class 基本上是最后的手段,也是我部门的最后手段。
在第二段中,你应该说 (the) 而不是 (they)。
这篇文章非常出色。我唯一遗憾的是,我在编码生涯中没有早点看到它。我真的很震惊,竟然有人敢挑战它。你是否曾经更新过别人编写的不规范网站???显然没有……
我不知道。我认为,在使用标题(如 h4)时,footer 元素是无效的。
使用 h4 标题是完全有效的,包括这种情况。
代码是艺术
http://camendesign.com
PS:你的表单需要 JS。请参考 http://camendesign.com/website_optimisation_measures
太酷了,我喜欢代码的格式,看起来非常棒!
但是.. 这太没用了,浪费了我们的带宽。HTML == 输出,不是艺术。如果你停止缩进,你的页面文件大小会更小,加载速度也会更快。哈哈,我真的认为有些人相信搜索引擎会因为完美的缩进而对网站排名更高。压缩的 HTML 更有价值:数据更少,加载更快。所以如果你的网站有很多访问者,它必须以压缩的形式交付。
另外,你使用的是 UTF-8,所以不需要使用 HTML 实体,对吧?
我认为在主体结尾处放置脚本标签是非常糟糕的;它应该加载在头部标签内。我看到你使用的是 jQuery,所以你应该使用 ready 事件。
我通常将脚本包含在头部,为什么放在主体结尾?
<aside><h3>…</h3></aside>
如果你阅读 HTML5 规范,它离美观还很远。在分节元素内部,重置你的标题并使用 h1 重新开始。顺便说一句,这个网站的评论转义器失败了
为什么你要求未转义的代码,而你真正想要的是转义的代码?
你可以粘贴未转义的代码(你可以轻松阅读的代码),如果它在 ‘code’ 标签中,浏览器会对其进行转义。
对于所有抱怨 JavaScript 没有在头部引用的用户:http://developer.yahoo.com/performance/rules.html#js_bottom
很棒的讨论!这是我的两分钱的价值
脚本调用在底部。
我知道 YSlow 对此非常重视,但我发现有些脚本如果放在最后就无法正常工作,所以我倾向于将它们放在头部,并确保 .js 文档被压缩。
还有其他人和我一样吗?
嗯.. 读完后不得不评论.. 你似乎在说你的代码有多干净,但里面仍然有一些非常糟糕的习惯。
* 你在头部为 IE 做的 CSS hack 并不符合 W3C 标准 - 即使它们通过了 W3C 检查,它们仍然是 hack。
* 你的路径大多是绝对路径,而不是相对路径。你只在 PHP 包含文件中使用相对路径。
* 你使用 utf 编码来表示撇号是不必要的。
* 它们是 PHP 包含文件,而不是服务器端包含文件 - 两者有很大区别。
* 如果你为每个 HTML 页面打开 PHP 解析器,你的服务器会变慢,除非你说你的页面是 PHP… 那样的话它就不是漂亮的 HTML,而是“漂亮的”PHP。
* 谷歌分析是一个不必要的 PHP 包含文件 - 跟踪代码非常标准,对任何做过一两个网站的人来说,它都很清楚。
* 你说 ‘col’ 是一个好的,清晰的,CSS 类名?
“…即使它们通过了 W3C 检查,它们仍然是 hack。”
条件注释不是 hack。它们就是注释。IE 只是将它们解释为其他东西。开始 hack ... 现在这才是 hack,因为它会破坏渲染引擎中的错误。条件注释不是错误。它们就是按照计划那样设计的。如果你想说条件注释是 hack,那么你必须说 Webkit CSS 动画/过渡东西是 hack,因为它还没有在规范中。利用合法的浏览器功能永远不是 hack。
“它们是 PHP 包含文件,而不是服务器端包含文件 - 两者有很大区别。”
PHP 包含文件和服务器端包含文件之间没有很大区别。它们基本上是相同的,诚实地说你在挑剔。在服务器上包含而不是在客户端包含,因此通常将它们称为服务器端包含文件,这是一种被广泛接受的说法。
“那样的话它就不是漂亮的 HTML,而是“漂亮的”PHP。”
不,它仍然是 HTML。PHP 只是 PHP 标签内的内容。其他所有内容仍然是 HTML。PHP 解析器不会干预或处理 PHP 标签之外的任何内容。
谷歌分析是一个不必要的 PHP 包含文件 - 跟踪代码非常标准,对任何做过一两个网站的人来说,它都很清楚。
不一定。这取决于你将其放入包含文件中的原因。如果你想在包含文件中添加一些代码来检查页面名称并有选择地插入跟踪代码,该怎么办。因此,你可以在某些页面上显示代码,但在其他页面上不显示。这只是一个例子,我可以想到其他例子。
“你说 ‘col’ 是一个好的,清晰的,CSS 类名?”
当然,如果它是一个列,并且你希望所有列都看起来相同。
实际上,“col” 仍然是表现性的。HTML 告诉我它应该是一个列。在手机上,它可能不应该是一个列。
另一方面,我不确定我们是否能完全摆脱它。有些东西必须告诉浏览器它要进入标签、对话框或列。
我正在尝试制作一个 0% 表现性的网站,我最终的做法是给每个块(因为我使用的是 HTML5 所以我使用的是 section)一个 ID,然后使用 jQuery 对那些打算作为对话框的 section 添加 .addClass(“.dialog”)。
在 iPhone javascript 中,我不插入类,因为它在那里没有意义(.dialog 的样式仅适用于浏览器)。
将脚本放在主体末尾应该确保在 javascript 之前加载 html。当 javascript 文件正在下载和执行时,它们通常会导致其他下载停滞。所以当你在头部放置它们时,你就有可能在 javascript 加载时显示一个空白页面。
将它们放在主体末尾消除了这个问题。这确保内容不会等待表示层。
也就是说,当内容依赖于它时,我确实将 js 放在头部,比如加载 SWF 文件或启动地图应用程序。
如果“代码是诗歌”,那么这就是聂鲁达。做得很好,Chris。
不过,我很想知道,A List Apart 在这方面的例子:http://www.alistapart.com/articles/previewofhtml5
文章中是 section 在 article 内,而你做的是相反的。
虽然我同意你的例子,因为它在语义上来说,将 section 放在 article(s) 中似乎合乎逻辑。有什么区别吗?
文章中是 section 在 article 内,而你做的是相反的。
应该是
文章中是 article 内有 section,而你做的是相反的。
我认为上面的例子并不打算成为在页面上语义放置元素的硬性规则。相反,它是一个示例,展示了简洁易读的布局。我怀疑作者说他偶然发现了创建布局的最佳方法。相反,我认为他只是想说明简洁的代码可以制作一个漂亮的网站,同时也是一个易读的网站。你放置 section 元素的位置实际上取决于你的网站。如果你将其放在 article 元素内部,你可能会在 CSS 方面自食其果。每个网站都需要根据你想要用该网站做什么来进行评估,但我们需要在一定程度上遵循公认的实践。但是,有一些模糊空间。例如,我从不围绕主体标签内的所有内容放置包装类。但我看到很多网站都这样做。我不会大惊小怪。我认为这是不必要的,因为你已经有一个包装... 那就是 body 元素。但很多人都会这样做... 模糊空间。
不错的文章。但什么时候能用上它?在 10 年后,当所有旧浏览器都死掉的时候?Web 开发者必须尽力让所有浏览器都能正常运行。
你现在就可以使用它... 这就是这篇文章的重点。
为旧浏览器提供一些可用的内容,但为现代浏览器用户提供更丰富的体验。
你好,
非常喜欢你的网站。你的见解总是一个很棒的学习体验。
我一直都在寻找答案,但一直找不到。
如果我使用 html5 和 css3,我该如何确保旧浏览器能够理解我的操作?
谢谢
Jack
非常喜欢你的网站。你的见解总是一个很棒的学习体验。
我一直都在寻找答案,但一直找不到。
如果我使用 html5 和 css3,我该如何确保旧浏览器能够理解我的操作?
这是一个很好的问题,我希望看到有人解答它。
我认为这对于 HTML 应该是什么样子是一个很好的视角。终于有人注意到你应该只有一个样式表。我更进一步地说,你不再需要条件样式表了。如果你玩弄一个网站足够长的时间,你就可以解决现在大多数问题,即使是 IE6 也是如此。你不需要 hack IE7,根据我的经验。
语义类也是你指出的另一个很棒的东西,人们有时不会考虑到下一个要编辑他们代码的人!
这将是我唯一另一个抱怨 - 一个元素上的多个类。如果你试图处理别人的代码,并且必须在 10 个不同的地方查找才能弄清楚所有类都在做什么,这将是一场彻头彻尾的灾难。
很棒的文章,感谢你的发布。
值得注意的是,如果代码确实是诗歌,那么这应该被视为一个人的特定愿景,而不一定所有人都应该坚持这个愿景。
我并不是说这些建议是无效的,而是美丽在于观察者眼中!
***
我广泛使用另一种语言,所以我可以证明编码特殊字符非常重要。
无论您如何声明文档或如何在编辑器中保存它,总有人会找到一种方法以意外编码查看页面。编码特殊字符可以绕过可能产生的所有混乱(最佳情况下是奇怪的字符,最坏情况下是页面损坏)。
有时对我来说,一个挑战是 *使* 代码看起来很美观。当然,当您从头开始编码或完全控制输出函数时,这很容易。一些现有的函数,比如 wplistpages, “不幸地” 将列表回显成一行。
我完全支持拥有干净的代码,并且当我的 php 添加了不必要的空格时,我会发疯......
但我参加了一个治疗小组来克服它 :p 现在,只要我的代码在我的编辑器中是干净的,并且在我的渲染输出中几乎是干净的,我就很高兴,并且不会浪费太多时间只是为了让它看起来对像我这样的干净代码狂热者来说很美观 :)
你错过了一点,国际友好,比如不要使用像 “11/9/2009” 这样的日期,这会让非美国读者感到困惑。
美国不是唯一使用 mm/dd/yyyy 的国家。所以,根据这个定义,它就是国际性的。我认为我们不需要在网页设计中如此挑剔。如果我们沿着这条路走下去,那么也许我们也应该将美国英语或英国英语标准化。我认为这条规则是使用适用于您的受众的格式和规则。如果您有国际受众,那么您可能需要提供一个多语言网站,该网站也使用该特定国家的日期格式。
很多(大多数欧洲?)国家使用 dd/mm/yyyy 或一些 DD 在 MM 之前 的变体,所以彼得说得很有道理,尽管美国人不是唯一使用 MM 优先的人。
尽管我是美国人(住在欧洲),但我必须赞同他的观点。除非您的网站针对特定区域,您知道访问者会理解日期格式,否则应使用更标准且易于理解的格式,例如 2009 年 11 月 12 日或 2009 年 11 月 12 日。
避免任何混淆,即使它确实占用了一些空间。
@Davin Studer – 事实上,除了美国之外,唯一使用 mm/dd/yyyy 的国家是伯利兹。参见 按国家/地区划分的日期格式.
解决日期格式问题的最简单方法是使用国际标准 ISO 8601,在任何地方都可识别,没有歧义:YYYY-MM-DD
示例:2013-10-29
HTML5 是否跨浏览器?
我请求,不,要求制作一张这个的大型墙贴出售。它放在我的“太阳帝国罪恶”科技树海报旁边会看起来很棒。:D
我看不出对图像使用绝对路径有任何好处——你能解释一下你所说的“假设内容被联合”是什么意思吗?
你是说如果你的图像在不同的域名上吗?这是我能想到的唯一使用绝对路径的原因,但这不言而喻。
或者,你是否主张将你的媒体资产放在一个单独的服务器上以提高下载速度(通过绕过每个域名的两个 HTTP 连接限制)?
此致
皮特
有趣,尽管“jquery 最好的 js 库”评论毫无用处(但这确实是一个微不足道的细节)。
一个想法是,在页面的底部放置一个“返回顶部”的小按钮,克里斯,因为有时滚动非常大(就像这里一样)。
很棒的文章,干净的代码总是更容易查看和更新!
向专家提问——你的 PHP 包含应该使用绝对 URL 以便在不同的文件夹中使用吗?如果是这样,推荐的做法是在前面使用 $_SERVER['DOCUMENT_ROOT'] 变量吗?
有趣的帖子——我对 CSS 不太了解,但不知何故我会添加一些元标记作为描述和关键词。我认为评分网站仍然建议添加这些。
从搜索引擎的角度来看,我不知道 PHP 导航在最终的 HTML 网站上会是什么样子——那么链接是否可见......这里的最终 HTML 网站可以很好地看到结果。
干杯
当我手写所有网站以及我工作的公司网站时,我一直对 HTML 标准非常严格。但是现在我使用 WordPress,这已经过时了,不是因为我不认为高质量代码是关键,而是因为 WordPress 似乎喜欢随时重写我的代码。我喜欢使用 WordPress 的好处,胜过我讨厌它重写我的代码。
很棒的文章,我是一个干净代码的狂热者!
代码由机器执行,但机器不会编写代码,人类会。丑陋的代码会使其他人更难使用您的代码,如果您加入专业的开发“团队”,这很可能发生。
我喜欢你的干净代码海报示例。非常棒!:)
几个问题
我一直使用 H1 作为网站名称的占位符,并使用 CSS 删除文本以用徽标替换它。我读到这是对 SEO 友好的。最好将它们保留为实际内容吗?(我一直从 H2 作为主要内容标题开始,然后向下进行。)
在大型网站上,内容由非技术人员(通常是记者)通过 CMS 动态插入,对特殊字符进行编码是否实用——通常是记者?CMS 软件是否应该将 & 转换为 &,将 < 转换为 <,将 Ø 转换为 Ø 等?还是仅限于静态页面?
您预计多久可以开始使用 HTML5?我也很喜欢它,并且在我的 iPhone 网页应用程序中使用了它,但对于 *真正的* 页面呢?
谢谢!:)
理奇
该死,我使用 OL 和 LI 编写了我的列表,而不是自己编号(1. 2. 3.),但这没有用。我还为我的特殊字符编码示例使用了 PRE,但这似乎被忽略了。:-/
无论如何,我希望你能明白我的意思。:)
顺便说一句,克里斯:“有点老了”是什么意思?听起来很酷,但我以前从未听说过。吸血鬼?:)
我认为你可以使用 丹·塞德霍尔姆的技巧 将它缩短一些
<!--[if gte IE 7]><!-->
<link rel="stylesheet" type="text/css" media="screen, projection" href="screen.css" />
<!--<![endif]-->
你检查过它在 IE6 中是什么样子吗?不太好看。 http://browsershots.org/ -> 用于测试。IE6 确实会把事情搞砸。:S
这没有通过 W3C 验证器。保持它有效怎么办?
很棒的提示,克里斯 :) 我一直想知道“好的代码”是什么样子......这将肯定会帮助我解决很多问题(当然是在代码方面)。
继续努力。:)
出色!非常好的进步!!
来自西班牙的问候!!
即使 HTML5 比 4 和 xhtml 更好,但也只有新版本的浏览器支持它,对吧?
所以我认为那些电脑不太聪明的人不会像 IE6 用户一样升级他们的浏览器。
喜欢!为什么你需要在图像上指定高度和宽度。这对我来说似乎很老派。这里没有人知道吗?
这与浏览器渲染页面的方式有关。添加宽度和高度可以让浏览器为图像预留正确的空间。否则,它将从图像元数据中找出尺寸,因为它是从服务器传输到客户端的。
最重要的是,它会在页面加载时减少卡顿。
酷!谢谢Russell。
我完全赞成干净的编码。很棒的文章。我将研究底部的脚本,虽然有时它们需要在顶部,但这很有趣。
很棒的例子Chris,感谢分享psd。迫不及待地想真正使用HTML5!
非常有用的文章Chris,我的网站是用XHTML编写的,但我正在进行重新设计,可能会用HTML5编写这个代码:)感谢
好的,所以我正在做这个,因为我的html看起来很像这样
我认为你可以通过省略.col类使你的代码更美观。你可以通过“footer ul”来定位ul,可以吗?
页脚列表可以在标签内
嗨Chirs
老实说,代码只是那样,特别是你在演示目的中使用了如此琐碎的例子=)
我知道很多人在赞美,但我们应该能够平等地表达自己的意见。
希望我的评论不会被删除。
欢呼,
我被编码风格深深地启发了。感谢这篇文章。
欢呼。
我最近创建了一个php函数来清理和缩进xhtml,可以在以下地址找到:snipplr.com,它可能是你提示的一个很好的补充。
第二段有小错误
让我们看看一些以**他们方式**编写的标记,看看它能有多美。
“文件路径 - 网站资源使用相对文件路径以提高效率”
当你想要从不同的域甚至子域提供你的资产时,这个想法就失效了。例如,如果你有一个高流量的网站,并且想分散负载。使用绝对路径来指向你的内容交付网络上的各种内容位置。例如,static2.example.com/css/main.css
“使用一个css文件”
这是一个很好的速度方面的想法,因为浏览器只需要建立一个连接来下载你的文件。对于模块化来说,这是一个完整的PITA。最好的解决方案是编写模块化CSS文件,并在运行时使用服务器端处理器将它们组合成一个文件。这样,你就可以将所有CSS部分作为一个文件提供,这个文件也可以被缓存和压缩(并且缓存它,这样它只会被命中一次)。
尝试阅读YSlow文档以获取更多信息。
“缩进” - 当然,你的代码需要可读,尤其是在view-source中。使用gzip或deflate压缩将减少从代码中删除空格的需要。
当我查看这个时,我的大脑一直在想的是,在我的手机上按每MB下载的数据付费,并且不得不下载整个main.css文件,然后让手机弄清楚要使用CSS的哪些部分,而不是有一个更小的手机专用文件。
很棒的文章,谢谢!
很棒的,感谢分享
很棒的文章。
我认为我的标记已经非常接近你的概述了,但我可能可以改进一些地方。我甚至可能不得不打印那张图片!
酷。很难解释好的代码,看到它在一个大的图像上很好。这需要被裱起来。**这是一件艺术品!**
嗨Chris,非常感谢你提供PSD下载。但是,我在哪里可以找到FunctionLH Heavy字体?你用它来做你的章节标题,看起来很不错。
我见过的最好的代码解释。简单易懂,干净的语言,没有过时的内容:)就像W3C验证器。
你有一个非常有信息量的博客,提供了很多很棒的想法。
以下代码对我有用
<body id="”>
它获取当前加载的脚本文件的名称,并剥离扩展名
很棒的更新Chris,感谢。我认为这与@paul想要表达的意思相关
我喜欢使用页面变量来声明很多东西,包括body id。所以你可以声明
$activepage = 'about-us';
然后你可以将值回显到body id,也可以在其他地方使用它,比如在包含文件内等等。
我认为那种标记看起来像博客结构
不错,但内联PHP毁了一切。
我听说在使用UTF-8编码和HTML5时,你不用“©”,应该使用真正的字符©。你能提供关于©比©在HTML5中更好的来源或w3c链接吗?