将所有样式放在 css 文件中与混合结构

Posted

技术标签:

【中文标题】将所有样式放在 css 文件中与混合结构【英文标题】:Put all styles in css files vs Mixed structure 【发布时间】:2012-02-01 22:12:43 【问题描述】:

有人告诉我,好的模式是将所有样式放在 css 文件中,因为 blah 和 blah(你可以在 google 中搜索原因,因为这是一个非常流行的想法)。 但是,我是一个在人们试图出售时总是问为什么的人。根据我自己对一些项目的经验。我认为将所有样式放在文件中更难维护,因为有一些可继承或特定于页面的样式。

例如我有一个控件来显示条款和条件:

.TermsAndConditions

    background-clip: padding-box;
    border: 1px solid #CFC2A7;
    border-radius: 5px 5px 5px 5px;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), 0 1px rgba(255, 255, 255, 0.6) inset, 1px 0 rgba(255, 255, 255, 0.3) inset, -1px 0 rgba(255, 255, 255, 0.3) inset;
    height: 26px;
    line-height: 26px;
    padding: 0 10px;
    text-align: center;
    text-decoration: none;
    vertical-align: middle;
    white-space: nowrap;

    position:absolute;
    top: 0px;
    left:0px;

当我需要在我的两个页面上使用它时,我必须为其创建两个特定的类:

.HomePageTermsAndConditions

    position: static;
    bottom: 20px;
    right:30px;



.ImagePreviewPageTermsAndConditions

    position:absolute;
    top: 50px;
    left:60px;



Home page:
<div class="TermsAndConditions HomePageTermsAndConditions">
</div>

Preview page:
<div class="TermsAndConditions ImagePreviewPageTermsAndConditions">
</div>

绝对没有样式内联,但是有一些问题:

    位置信息完全不共享,因此基于现在的网络速度,性能增益非常有限。 (例如清除:左)

    有些样式甚至是不可继承的,所以我们必须为每个级别创建css类,这并不省力。

    很难维护,因为文件中的 css 类可能会被另一个页面继承或覆盖,当编辑一个类时很难知道它可能会造成什么影响,因此需要花费时间进行测试/调试/修复往返。

    损害性能,当使用它的页面被删除时,某些 css 类将保留在那里。清理它们需要费力。

所以我建议像这样移动页面/标签特定样式(如位置信息)内联:

.TermsAndConditions

    background-clip: padding-box;
    border: 1px solid #CFC2A7;
    border-radius: 5px 5px 5px 5px;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), 0 1px rgba(255, 255, 255, 0.6) inset, 1px 0 rgba(255, 255, 255, 0.3) inset, -1px 0 rgba(255, 255, 255, 0.3) inset;
    height: 26px;
    line-height: 26px;
    padding: 0 10px;
    text-align: center;
    text-decoration: none;
    vertical-align: middle;
    white-space: nowrap;


<div class="TermsAndConditions" style="position:absolute; bottom: 20px; right:30px;">
</div>


<div class="TermsAndConditions" style="position: static; top: 50px; left:60px;">
</div>

我们可以获得的好处:

    类中没有特定于页面的信息。不会影响性能,因为页面中只有几种样式

    更容易维护,因为内联样式具有更高的优先级,编辑内联样式会立即给 UI 带来效果。此外,您无需担心会破坏其他页面。

    当我们需要删除一个页面时,我们通常不需要清理 css。由于页面特定的 css 在页面中,因此它与页面一起使用。 css 文件中的内容更有可能被共享。

    更加面向对象。由于文件中的 css 类没有特定于页面的信息,因此它们本身更像是一个控件。很容易插入其他页面。

例如:

当我在新页面上需要它时,我只需复制 html 并更改内联样式:

<div class="TermsAndConditions" style="position: absolute; top: 50px; left:60px;">
</div>

这是我反对“将所有样式放在 css 文件中”的想法。我希望看到您对此的想法,无论是好的方面还是坏的方面。

谢谢

【问题讨论】:

【参考方案1】:

我认为最好的办法是将这些东西混合在一起...... 通常我使用类,但是当我需要指定位置/尺寸时,我使用样式。 有时,当我需要覆盖类设置时,我会使用现有类但将其与样式混合。 我认为唯一不使用样式的情况是,我想创建完全动态的布局并能够仅使用 CSS 来更改它。

【讨论】:

【参考方案2】:

将样式放在 HTML 之外的好处是这样的。

假设我在每个页面上都有一个导航栏,例如:

<ul class="main-navigation">
   <li>my link</li>
   <li>my link</li>
   <li>my link</li>
   <li>my link</li>
</ul>

我的样式会是这样的:

.main-navigation ul li 
color:#000;

现在假设我有相同的导航栏,但这次是内联样式。

<ul>
   <li style="color: #000;"></li>
   <li style="color: #000;"></li>
   <li style="color: #000;"></li>
   <li style="color: #000;"></li>
</ul>

或者假设我将我的样式嵌入到我的 HTML 中。

<style type="text/css">
   .main-navigation ul li 
    color:#000;
    
</style>

取决于您的文件管理设置。您很可能不想通过每个 HTML 文件来更改导航颜色这样简单的内容。当您可以进入样式表并更改一行代码时。

希望这是有道理的。但我想总结一下,我会说在某些情况下它可能更实用。不过我个人认为,将 HTML、CSS、javascriptphp 分开会使故障排除变得容易得多。

【讨论】:

还有像 firebug 这样的工具,很容易弄清楚你的 CSS 是从哪里来的。

以上是关于将所有样式放在 css 文件中与混合结构的主要内容,如果未能解决你的问题,请参考以下文章

less混合

CSS课程网站开发示例 ① ( 文件目录结构准备 | CSS 属性书写顺序 - 重要 )

CSS复习笔记引入和语法

如何处理文件夹结构中与模式匹配的所有文件? [复制]

less样式如何使用cssmodule

你能把 Tailwind 和 vanilla CSS 混合起来吗?