Susy:为给定的屏幕宽度(断点 px 值)创建网格,并且不知道单列的宽度(非内容优先方法)

2024-02-28

我在用着Susy http://susy.oddbird.net/.

我未能利用内容优先的方法,并决定采用 window-px-widths-first

起初我尝试了内容优先的方法 http://adactio.com/journal/4523/到网格,但很快我发现我的网站在不同设备上的行为异常。它将显示一个移动布局,我想要一个平板电脑布局等。我最终调整了 Susy 设置的 em 值,以匹配某些屏幕宽度(px 值)。代码变得丑陋,我意识到我实际上不再使用内容优先的方法。

这是一个主页静态快照 http://files.alfamb.ru/stackoverflow_384y6ht/Stackoverflow%20Susy%20px%20values/1/我使用这种错误方法创建的网站及其快照code https://github.com/lolmaus/ruscup_aurora/tree/44120c5009074f3ccbc554c5817716aeef03d1e6.

所以我决定完全放弃内容优先的方法并首先使用 px 值。

在编写代码之前,我为网格制定了要求

首先,我根据屏幕尺寸对不同的设备进行分组。然后我想出了最适合这些设备组的断点 px 值:

Break-    Layout   Number of            Common
points     name     columns             usage
(px)               (sample)

    0  ┬
       │
       │     S        1       Smartphones-portrait, old phones
       │
   400 ┼
       │     M        2       Smartphones-landscape
   600 ┼
       │     L        3       Tablets-portrait
   800 ┼
       │     XL       4       Tablets-landscape, netbooks
  1000 ┼
       │    XXL       5       Laptops, desktop computers
  1200 ┼
       ↓

我认为有以下假设/要求:

  1. window-px-widths-first 方法(如上所述)。

  2. $container-style 是流动的。当屏幕宽度位于两个断点之间时,容器的宽度会自动调整以匹配较大的断点。布局中的列数未更改并对应于下部断点。

  3. 最后一个断点是容器的最大宽度。该网站不会进一步延伸,而是会有额外的排水沟。

  4. 移动优先。从“S”布局开始,随着屏幕变宽,用其他布局覆盖它。

经过深思熟虑,我的方法演变为以下代码

(此代码是一个综合示例。我从实际代码中摘录并进行了一些调整,因此它可能会遗漏某些内容或不一致。)

<div id="header-wrapper">
  <header id="header">
    ...
  </header>
</div>

<div id="main-wrapper">
  <div id="main">

    <article id="content">...</article>
    <aside id="sidebar">...</aside>

  </div>
</div>

<div id="footer-wrapper">
  <footer id="footer">
    ...
  </footer>
</div>
/////////////
// Variables
/////////////

$development: true // This enables susy-grid-backgrounds and outlines

// Breakpoints
$bp-s-m:    400px
$bp-m-l:    600px
$bp-l-xl:   800px
$bp-xl-xxl: 1000px
$max-width: 1200px

// Columns
$cols-s:   1
$cols-m:   2
$cols-l:   3
$cols-xl:  4
$cols-xxl: 5

// Layouts
// $layout-s is not necessary due to a mobile-first approach
$layout-m:    $bp-s-m     $cols-m
$layout-l:    $bp-m-l     $cols-l
$layout-xl:   $bp-l-xl    $cols-xl
$layout-xxl:  $bp-xl-xxl  $cols-xxl

// Default grid settings
$total-columns:   $cols-s
$column-width:    85%
$gutter-width:    100% - $column-width
$grid-padding:    1em
$container-width: 100%
$container-style: fluid
+border-box-sizing


/////////////
// Mixins
/////////////

// A couple of mixins to open the developer's third eye
=dev-outline
  @if $development
    outline: 1px solid red
=dev-grid-bg
  +dev-outline
  @if $development
    +susy-grid-background

// A custom container declaration
=standard-container
  +container // ← An actual line of Susy code, yay! :D
             //  This whole post is actualy an attempt to make use of it.
  max-width: $max-width
  +dev-grid-bg

  +at-breakpoint($layout-m)
    +set-container-width
    +dev-grid-bg

  +at-breakpoint($layout-l)
    +set-container-width
    +dev-grid-bg

  +at-breakpoint($layout-xl)
    +set-container-width
    +dev-grid-bg

  +at-breakpoint($layout-xxl)
    +set-container-width
    +dev-grid-bg


/////////////
// Backgrounds
/////////////

// The wrapper divs are necessary for screen-wide backgrounds
html
  background: url('../images/main-background.png') // also repeat, color, this kind of stuff

#header-wrapper
  background: url('../images/header-background.png') 

#footer-wrapper
  background: url('../images/footer-background.png')


/////////////
// Containers
/////////////

// Actually declared in separate SASS files
#header, #main, #footer
  +my-container


/////////////
// Columns
/////////////

// An example of declaring columns
$cols-sidebar: 1
#sidebar-first
  +dev-outline
  +at-breakpoint($layout-l)
    +span-columns($cols-sidebar, $cols-l)

  +at-breakpoint($layout-xl)
    +span-columns($cols-sidebar, $cols-xl)

  +at-breakpoint($layout-xxl)
    +span-columns($cols-sidebar, $cols-xxl)
#content
  +dev-outline
  +at-breakpoint($layout-l)
    +span-columns($cols-l - $cols-sidebar omega, $cols-l)

  +at-breakpoint($layout-xl)
    +span-columns($cols-xl - $cols-sidebar omega, $cols-xl)

  +at-breakpoint($layout-xxl)
    +span-columns($cols-xxl - $cols-sidebar omega, $cols-xxl)

这里有一个主页静态快照 http://files.alfamb.ru/stackoverflow_384y6ht/Stackoverflow%20Susy%20px%20values/2/我使用这种方法创建的网站的其代码快照 https://github.com/lolmaus/amt_boron/tree/ed384b0954a819b04463ab1228754c3671bf6275.

问题

  1. 遵循 window-px-widths-first 方法是我经过深思熟虑的决定,并且是针对以下问题的。我很欣赏您关于内容优先的论点,但请不要仅限于声明我错了,请回答以下特定于 window-px-widths-first 的问题。

  2. 我的方法是用 Susy 执行 window-px-widths-first 的优雅方法还是一段丑陋的代码?

  3. 如何让我的代码更加优雅?

    我不喜欢那些必须对每个容器和每个列重复的大量断点声明。我只能想到使用记录很少的可能性来指定多个布局+container。但只要+set-container-width不是我在每个媒体查询中执行的唯一代码,即使这个想法不是一个选项。 :(

  4. 使用 Susy 进行 window-px-widths-first 的推荐方法是什么(并满足我上面描述的要求)?

  5. 请透露您发现的我的代码的任何缺点。我是 SASS 新手,我相信你可以建议更有效的方法来完成同样的事情。


还不错,但是有一些东西你可以清理一下。

首先是设置。将 Susy 用于单个列是没有意义的,因此您可以完全放弃小网格,手动创建它(仅填充),并拥有更清晰的代码。一旦添加了多个列,您当前的设置就没有多大意义。 2 列占 85%,有 15% 的装订线?宽度加起来为 185%。它有效,因为苏西实际上对数字之间的比率比数字本身更感兴趣,但这有点难看。我会将其更改为例如85px and 15px or 8.5em and 1.5em。既然你无论如何都要重写容器,那不应该改变任何东西——只是更明智一点。

我要做的另一个主要更改是删除所有 set-column-width 调用,因为无论如何您的宽度都是 100% 流体覆盖。它所做的只是每次将宽度设置为 100%。何必呢?有了这个,我想您可以通过断点的简单循环来自动化开发后台调用。

$layouts: $layout-m $layout-l $layout-xl $layout-xxl
@each $layout in $layouts
  +at-breakpoint($layout)
    +dev-grid-bg

创建一个快捷方式来更改不同断点处的列跨度对您或我们来说都是很困难的,并且会增加相当多的输出膨胀,除非那确实是only您对每个尺寸所做的更改。您目前拥有的看起来不错。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Susy:为给定的屏幕宽度(断点 px 值)创建网格,并且不知道单列的宽度(非内容优先方法) 的相关文章

随机推荐

  • 如何从 YouTube 视频中删除黑条

    YouTube 视频中出现了黑条 视频播放时看起来没什么奇怪的 我们可以删除视频中的黑色空间吗 我想删除那个黑色空间 并以我们为播放器尺寸选择的所需宽高比显示视频 目前我正在使用stander google YT 播放器API 这有意义吗
  • 如何在FabricJs中设置相对位置(oCoords)?

    我在fabricJs中有一个文本 我设置了顶部和左侧 这会将 aCoords 正确设置为这些值 但是 oCoords 不匹配 并且文本未显示在正确的位置 我怀疑我需要以某种方式设置为 oCoords 以便文本显示在画布上的右侧像素坐标 顶部
  • 如何动态更改 Jekyll _config.yml 中的变量?

    您好 我正在开发一个 Jekyll 项目 我需要在 config yml 中放置一个变量 我想从模板代码中动态更改该变量 这就是我想做的 但我无法让它发挥作用 是否有可能做到这一点 在 config yml中 my var value 在模
  • 友好 ID slug 不包含 id

    我想要这样的网址 http domain com products 454 table lamp 所以我像这样使用Friendly id extend FriendlyId friendly id slug candidates use h
  • 配置执行器端点安全

    Spring Boot Actuator 端点默认受基本 http 安全保护 可以更改为使用 Spring Security 吗 我已成功设置 Spring Security 并使用它来保护我的其他页面 I tried security b
  • 如何从nodejs中的process.environment中提取环境变量

    我已成功将条纹支付集成到我的虚拟 Nodejs 项目中 但我仍然面临一个问题 它不允许我继续前进 因为我必须将代码推送到我的 github 存储库 因此 我通过 npm 安装了 dotenv 包 并创建了一个 env 文件来存储我的条带密钥
  • 如何获取 Woocommerce 产品中的变体 ID

    我正在尝试进入一个插件 我正在编写产品的变体 ID 这是我写的 class mass public function construct add action woocommerce product after variable attri
  • Android minLines 和 maxLines 不能在同一个 TextView 中一起工作

    这里我只有 1 件商品ListView我展示了两个不同的TextViews末尾有不同颜色的ListView item 但问题是我想显示每个最多 3 行TextView但如果长度为TextView是小 但如果文本很大 它效果很好 当我添加an
  • 如何确保我的 django 项目正在使用我为其创建的虚拟环境?

    我知道已经有一个与此类似的问题 但我认为我想要的答案不存在 我是 django 的新手 我已经使用 virtualenv 和 django 项目创建了一个虚拟环境 但是我们如何知道我的项目正在使用虚拟环境的包而不是使用全局包 请给我一些详细
  • 在 Episerver 中截断 Xhtmlstring

    我需要获得截断的 Xhtmlstring 的 html 友好版本 因为截断时标签结尾可能会被截断 关于如何实现这一目标有什么想法吗 我想过先删除所有标签 然后进行剪切 但是 Episerver 内部是否有解决方案 或者这只是使用正则表达式进
  • Matplotlib 中的像素化动画

    我一直在使用 Matplotlib 的动画工具来制作动画人物 我注意到一个问题 对于具有大量帧的动画来说尤其明显 即图形的质量很快就会恶化 导致输出看起来像素化 模糊 例子 Messy grid lines pixelated output
  • 将 HTMLDocument 转换为可打印字符串

    我想将 Javascript DOM HTMLDcument 转换为可以写入文件的字符串 但是如何将 HTMLDocument 的字符串转换为 xml Update如果可能的话 我希望看到应用任何动态 JavaScript 渲染后生成的 h
  • Python从文件中删除一行或多行而不修改现有内容

    我必须根据文件中的用户输入删除字符串或字符串列表 我参考了下面的链接 一切正常 删除文件中的特定行 python https stackoverflow com questions 4710067 deleting a specific l
  • Jenkinsfile 中的 Jenkins 全局环境变量

    如何在 Jenkinsfile 中调用全局环境变量 例如 如果我有一个变量 name credentialsId value xxxx xxxx xxxxx xxxxxxxxx 如何在 groovy 脚本中使用它 I tried crede
  • 视差效果使元素延迟滚动

    我正在尝试复制此网站 www adidas co uk climazone 这些元素似乎只在用户滚动后轻微移动 我怎样才能实现这个目标 谢谢你 Here s DEMO http s codepen io CY5 debug vKkELx它实
  • 正则表达式匹配任何单词 - 没有非贪婪运算符

    我想将任何内容匹配到特定单词 例如 C 中的结束评论 但是 由于性能原因 我不想使用非贪婪运算符 例如 要匹配 C 注释 对于我的文件来说太慢了 有没有可能提高性能 当然可以 使用展开循环技术 http www softec lu site
  • 通过 Vagrant 在 Docker 中共享卷

    我有一个 Vagrant virtualbox 它托管一个 Docker 容器 主机有一个需要在虚拟机和容器中访问的文件夹 Host host path gt VM vagrant path gt Container docker path
  • 名称和尺寸来自 NSFont

    我试图在互联网上找到一些东西 但现在我没有答案 所以如果你能帮助我那就太好了 到目前为止 我有一个 NSFont 对象 但我想要字体的名称 如 NSString 和大小 这样我就可以输出它 就像是 NSFont fontWithName M
  • 在 NLTK 中使用斯坦福 NER Tagger 提取人员和组织列表

    我正在尝试使用 Python NLTK 中的斯坦福命名实体识别器 NER 提取人员和组织的列表 当我跑步时 from nltk tag stanford import NERTagger st NERTagger usr share sta
  • Susy:为给定的屏幕宽度(断点 px 值)创建网格,并且不知道单列的宽度(非内容优先方法)

    我在用着Susy http susy oddbird net 我未能利用内容优先的方法 并决定采用 window px widths first 起初我尝试了内容优先的方法 http adactio com journal 4523 到网格