【问题标题】:CSS code structure decisionCSS代码结构决定
【发布时间】:2017-02-12 22:55:26
【问题描述】:

我目前正在为某个网站制作标题。此标头包含两种不同的设计:

浮动/水平标题:

+-------------------------------------------------------------------------+
|      +--------------+                       +--------------------+      |
|      |     LOGO     |                       | Menu | Menu | Menu |      |
|      +--------------+                       +--------------------+      |
+-------------------------------------------------------------------------+

居中的标题:

+-------------------------------------------------------------------------+
|                          +--------------------+                         |
|                          |        LOGO        |                         | 
|                          | Menu | Menu | Menu |                         |            
|                          +--------------------+                         |
+-------------------------------------------------------------------------+

当浏览器宽度小于某个断点值时,应该使用居中的标题。否则为水平标题。这可以通过 CSS media-queries 来实现。我的问题是 header.css 文件的更好的代码组织方式:

  1. 仅使用两个设计(font-familycontainer-width: 100% 等)的代码交集以及两个媒体查询。

伪代码:

/* Code necessary for both designs */

@media-query (width < breakpoint) {
  /* upgrade code to centered header */
}

@media-query (width >= breakpoint) {
 /* upgrade code to floating header */
}
  1. 始终使用居中的标题 + media-query 覆盖必要的部分:

伪代码:

/* Code necessary for centered designs */

@media-query (width >= breakpoint) {
 /* Overwrite centered header code */
 /* Insert floating header code */
}

我的问题是这两种 css 结构的优点/缺点是什么?代码重复怎么样。第一个总是使用media-query 来显示任何有用的信息。第二个需要覆盖一些第一个居中的标题功能。

我希望这不会被关闭,因为它太主观了。我只问优点/缺点不是选择什么设计或哪个设计更好.. .

【问题讨论】:

    标签: html css responsive-design media-queries design-decisions


    【解决方案1】:

    基于可读性和一般 CSS 原则,我绝对不会建议您的第一个示例。同时使用greater thanless than 的想法是多余的并且有些令人困惑——这相当于为一个条件执行两个if 语句。

    按降序或升序排列您的媒体查询,将默认样式保留为屏幕最大或最小。

    我个人在任何媒体查询之外定义所有全角样式,然后在我遍历样式表时使用max-width,定义越来越小的屏幕尺寸。话虽如此,相反的情况也是完全可以接受和常见的,您可以在任何媒体查询之外定义您的移动设备尺寸,并向下遍历增加尺寸(使用min-width)。这两种方法都创建了一个易于理解的示例 - 如果我要在您之后处理此文件,我会确切地知道在哪里可以找到我正在寻找的更改。

    我想说一件事应该达成一致,那就是在您的@media 查询中使用 both min-widthmax-width 绝不是一个好主意。

    【讨论】:

    • 感谢您的回复。我实际上正在考虑用SASS 编写标题。在 SASS 中,我可以使用类似函数的功能在两个 media-queries 中使用类似 upgrade_to_centered()/upgrade_to_floating 的东西(我认为这更干净)。最终的 CSS 看起来像上面的第一个示例。你还会选择第二种方法吗?我只是认为,在media-query 中设置新设计之前首先重置 default 设计会有点痛苦。两个媒体查询不会发生这种情况..
    • 两个媒体查询只是额外的工作,通常是多余的。如果您执行#myDiv { color: red; } @media only screen and (max-width: 500px) { #myDiv { color: blue; } } ,则与执行@media only screen and (min-width: 501px) { #myDiv { color: red; } } @media only screen and (max-width: 500px) { #myDiv { color: blue; } } 完全相同。它是额外不必要的标记,并且可读性较少,这与您希望在外部文件中包含的内容相反。跨度>
    • 你是对的。我脑子里只有#myDiv { display: inline-block; font-size: 10px; } @media (max-width: 500px) { #myDiv { display: block; font-size: 12px; } }@media (min-width: 501px) { #myDiv { display: inline-block; font-size: 10px; } } @media (max-width: 500px) { #myDiv {font-size: 12px; } } 之类的东西(少了一行,但这加起来了..)。
    • 是的,这相当于if (myVariable &gt; 500) { do this } if (myVariable &lt;= 499) { do this } - 它有效,只是没必要。
    • 我的例子少用了一行。因为它不需要将display 重置为block。你注意到了吗?这将增加我认为更高级的代码,但我仍会使用你的方法,因为 - 正如你已经提到的 - 这是更分离的方式。
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2012-04-19
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    相关资源
    最近更新 更多