【问题标题】:Proper way of styling HTML elements样式化 HTML 元素的正确方法
【发布时间】:2013-12-03 20:37:29
【问题描述】:

我知道你可以这样做:

<img style="position: absolute;" src="test.png" alt="Test image" width="50" height="50" />

我不使用第一种方法,因为我知道外部样式表旨在将 CSS 与 HTML 代码分开。我喜欢保持这种状态。

<img id="foobar" src="test.png" alt="Test image" width="50" height="50" />

有时我会使用这种方法,但是当我查看 Facebook、Instagram 或 Twitter 等大型网站的一些专业 HTML 编码时,我发现它们使用了 很多 的容器 divs,这让我不确定我是否做得对。

<div id="foobar">
    <img src="test.png" alt="Test image" width="50" height="50" /> //use 'src' in place of 'sc'
</div>

我发现由于某种我实际上并不知道的原因,我主要使用这种方法。但在这种情况下,我只是将样式添加到div,而不是直接添加到img。或者当我这样做时,我通过在 CSS 中使用 #foobar img{ ... } 选择它来直接将样式添加到 img 元素。

<div id="foo">
    <img id="bar" src="test.png" alt="Test image" width="50" height="50" />
</div>

如果容器只是完成工作所必需的,我通常会这样做,我会在 imgdiv#foo 元素上设置一些样式。

我知道可能还有更多方法,但主要是最后两种方法我不太确定何时使用它们。我知道还有其他 HTML 元素,但我只是拿了一个 divimg 进行演示。

话虽如此,我想知道每种方法的优缺点以及哪种方法应该是一个好的做法?

【问题讨论】:

  • 将这样的元素放在您在示例中引用的容器中是一种很好的做法,因为具有不同容器的图像可以有不同的样式
  • 不同的人和方法将促进不同的最佳实践,以了解您应该如何设计元素。不幸的是,没有“正确的方法”。通常要考虑一下您正在尝试做什么,非常重要的是,您将来可能需要做什么。例如“我是否只需要设置这一张图片的样式,它只存在于这一页上?”意思是“我可以使用身份证”。但是“我是否需要设计一系列图像,这些图像可以在轨道上的某个地方换成其他图像?”意思是“我可以很容易地通过将它包围在div 中来对它进行排序。”做#foobar img { }很好。
  • 注意:您应该从图像中删除高度和宽度声明,并将它们也放入 css 中:)
  • @Chris 这个帖子stackoverflow.com/a/2414940/1115367 让我在图像标签本身而不是从 CSS 中声明图像的尺寸。当图像是设计/布局的一部分时,我只会在 CSS 中声明尺寸,在这种情况下它不会。我说的对不对,我不知道。但话又说回来,没有对与错。所以我想这是主观的,应该按照规范中的说明去做。
  • @KidDiamond 我在那里读到了答案:我不知道我是否同意他的前提,但是嗯。我很少在提前知道原始图像文件的实际高度和宽度的情况下编写代码,所以我想这对我来说 99% 的时间都不是问题。

标签: html css


【解决方案1】:

许多不必要的标签会产生一个称为“标签汤”(ref) 的问题。这是手写 HTML 中的问题;您的目标是最大限度地利用 CSS 样式,并避免使用过多和无意义的标签。

“正确”创建文档时,您应该从文档大纲的角度开始。想象一下这个页面是一个报告,它将从上到下阅读,并且是左对齐且样式简单的。您使用最少的标记设计此层次结构,充分利用页眉、部分、文章和页脚标签。在“过去”中,您将使用 div 代替。

接下来,您应用样式来影响外观,包括文档中元素相对于彼此的定位。这是可以添加任何非语义 div 的地方,以方便在盒子模型中定位和组织。同样,您仍然尝试将包装或非语义标签保持在最低限度。

考虑到所有这些因素,大型网站通常不会由干净且语义严格的文档大纲组成。大多数情况下,这些网站是由代码组装而成的,将动态内容构建到整个页面中。在这些场景中,更多的非语义包装标签通常作为模块化、自包含代码生成 HTML 片段的副产品。此外,Web 应用程序可能需要包装标签以帮助通过 AJAX 或其他 javascript 操作进行动态内容重绘。

CSS 的作用也是添加非语义包装标签的一个因素。由于 CSS 的特殊性 (magic!),有时需要有一些额外的“句柄”,您可以使用这些“句柄”来对特定的标签组合进行真正、非常具体的处理。

要点是编写您可以在项目中管理的最简洁、最语义化的代码。除了最小化和语义化之外,就其本身而言,没有“适当的方式”。

进一步阅读

【讨论】:

  • 好帖子!许多关于特异性的重要信息让我对语义 HTML 有了更好的理解。 +1
【解决方案2】:

使用样式表的主要原因是能够将其缓存在网站中,从而在初始加载后加快加载时间。您在 html 本身上看到一些带有样式的元素的原因可能是因为它是通过服务器端代码或客户端脚本注入的。 FB 开发人员实际上看不到那部分代码,而他们只会看到几行服务器代码,因此在他们方面,无论每个元素是在样式表上还是在html 本身。

另一个原因可能是当许多类相互叠加(嵌套类)的样式过多时,最终的选择可能是在 html 元素本身上使用它,因为它具有最高优先级并覆盖任何样式类或任何其他形式。

以这种方式使用样式的原因有很多,但通常对开发人员来说更容易保持干净的 html/css/script 和如果可能的分离,但是当事情变得复杂时,有时打破常规做法实际上会使它更容易......

【讨论】:

    【解决方案3】:

    在我看来,没有绝对的答案。这取决于你的设计。

    如果您的网站中有很多相似的部分要设置相同的样式,则应使用 div 容器(或其他元素,例如 &lt;nav&gt;, &lt;header&gt; 等...)。

    这种方法的优点是您可以在节内设置其他元素的样式,而无需为每个元素指定class 属性或id,从而使您的代码更简洁且更易于维护。

    如果你想为一个独特的元素设置样式,我认为最好使用 id 属性并将 CSS 添加到此 id。

    请记住,id 是唯一的,因此,如果您在同一页面中有两个元素具有相同的 CSS,您将不得不复制您的 CSS 代码,这绝不是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多