【问题标题】:Floated items in Susy with even widths, padding and bordersSusy 中具有均匀宽度、填充和边框的浮动项目
【发布时间】:2014-04-26 09:43:27
【问题描述】:

我在尝试浮动三个列表项时遇到问题,因此所有三个列表项的内容区域具有相同的宽度,并且每个垂直边框旁边的左/右填充量均等。第一个 LI 的左边缘需要对接容器的左侧,最后一个 LI 的右边缘需要对接容器。

Gist on Sassmeister

HTML:

<ul>
  <li>
    <img src="http://placehold.it/304x120">
    <p>Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit. Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit. Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit.</p>
  </li>
  <li>
    <img src="http://placehold.it/304x120">
    <p>Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit. Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit. Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit.</p>
  </li>
  <li>
    <img src="http://placehold.it/304x120">
    <p>Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit. Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit. Lorem ipsum dolor sit amet cons ectator adipscing elit commer maladonit.</p>
  </li>
</ul>

SCSS:

// ----
// Sass (v3.3.3)
// Compass (v1.0.0.alpha.18)
// Breakpoint (v2.4.2)
// Susy (v2.1.1)
// ----

@import "breakpoint";
@import "compass";
@import "compass/reset";
@import "susy";

// Settings

$total-columns  : 12;
$c-width        : 64px;
$gutter-width   : 16px;
$grid-padding   : 8px;

$susy: (
  column-width: $c-width,
  columns: $total-columns,
  global-box-sizing: border-box,
  gutter-position: inside,
  gutters: $gutter-width / $c-width,
  debug: (
    image: show,
    output: overlay,
    toggle: top right,
  )
);

$tablet-width: 620px;
$tablet-columns: 8;

$desktop-width: 960px;
$desktop-columns: 12;

body { @include container; }

img {
  height: auto;
  max-width: 100%;
}

@include susy-breakpoint($tablet-width, $tablet-columns) {
  ul { @include clearfix; }

  li {
    @include span(3 of 6);
    border-right: 1px solid black;

    &:first-child { padding-left: 0; }

    &:last-child {
      border: 0;
      padding-right: 0;
    }
  }
}

@include susy-breakpoint($desktop-width, $desktop-columns) {
  li { @include span(4 of 12); }
}

我做错了什么?任何帮助将不胜感激!

【问题讨论】:

    标签: css sass compass-sass susy-compass


    【解决方案1】:

    澄清一下:你不想要相等的外部宽度,你想要相等的 content 宽度(在删除左/右边缘填充之后)?您已经拥有相等的宽度,但删除边缘填充意味着第一个和最后一个元素有额外的空间来容纳它们的内容。

    为此,数学更为复杂,因为您实际上需要稍微打破网格才能获得正确的外观。我认为这会让你接近:

      li {
        @include box-sizing(border-box);
        border-right: 1px solid black;
    
        &:first-child {
          $span: span(2 of 6) - (gutter(6)/3);
          @include span($span of 6 no-gutters);
          padding-right: gutter(6); 
        }
    
        &:nth-child(2) {
          $span: span(2 of 6) + (gutter(6)*2/3);
          @include span($span of 6);
        }
    
        &:last-child {
          $span: span(2 of 6) - (gutter(6)/3);
          @include span($span of 6 last no-gutters);
          border: 0;
          padding-left: gutter(6);
        }
      }
    

    我正在使用 span()gutter() 函数来计算您需要的确切宽度(从外部元素中删除一些间距宽度,并将该宽度添加到内部),然后将结果传递给 @ 987654325@ mixin,它会创建你的布局。

    更新(对于较大的排水沟):

    我不完全确定您已经尝试过什么,但应该这样做:

    @include with-layout((gutters: 20px / $c-width)) {
      // your code here...
    }
    

    您可以将20px / $c-width 替换为您喜欢的任何分数。分数越大,排水沟越大。

    【讨论】:

    • 埃里克,是的,没错。我需要相等的 content 宽度。我终于开始实施这个了。非常感谢。效果很好!
    • 我一直在修改您的代码,并希望将内容和边框之间的填充量加倍。如果我将 gutter(6) 更改为 gutter(3),第一个和最后一个孩子看起来是正确的,但我似乎无法让第二个孩子拥有相同数量的填充。这怎么可能做到?
    • 为了获得更宽的间距,我将保留所有数学,并将您的 gutters 设置更改为相对于列大小更大的分数。 See the docs 了解更多详情。
    • 埃里克,我一直在努力解决这个问题,时间比我想承认的要长。我已经阅读了文档,但实际上找不到任何有关如何执行此操作的示例。我尝试使用 with-layout() mixin 将装订线大小加倍,将装订线 (6) 减少到装订线 (3),使用装订线覆盖等,但没有任何效果。你能给我举个例子吗?我很困惑!
    • 添加了一条注释,但我在这里工作是盲目的,因为我不知道你尝试了什么,或者你得到了什么结果。
    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 2012-04-08
    • 2021-05-14
    • 2016-09-28
    • 2020-12-31
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多