【问题标题】:How to centralize cells in Material Components Web (MDC)?如何在 Material Components Web (MDC) 中集中单元格?
【发布时间】:2017-12-07 12:04:04
【问题描述】:

我想要一个集中的网格单元格,例如,桌面上有 6 列。在docs 中,它说:

网格默认居中对齐。您可以添加 mdc-layout-grid--align-left 或 mdc-layout-grid--align-right 修饰符类来更改此行为。

然后我输入:

<div class="mdc-layout-grid">
  <div class="mdc-layout-grid__inner">
    <div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-3-desktop">first</div>
    <div class="mdc-layout-grid__cell mdc-layout-grid__cell--span-3-desktop">second</div>
  </div>
</div>

期待在桌面上:

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|----|----|----|
| ~ | ~ | ~ |   first   |  second   | ~  |  ~ | ~  |

而不是真正的输出:

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|----|----|----|
|   first   |  second   | ~ | ~ | ~ | ~  |  ~ |  ~ |

如何让cell保持中心化?

【问题讨论】:

    标签: css material-components material-components-web


    【解决方案1】:

    使用 CSS Grid,您可以使用 grid-column-start property 指定网格单元格的起始位置。

    因此,在您的示例中,您希望将第一个单元格放置在第 4 列:

    // MDC Web's default desktop breakpoint is 840px.
    @media (min-width: 840px) {
      .mdc-layout-grid__cell:first-child {
        grid-column-start: 4;
      }
    }
    

    如果mdc-layout-grid__inner 中有超过 2 个单元格,则需要为每个奇数单元格指定起始位置:

    // Specify start position for odd cells.
    // :nth-child(2n+1) is more flexible than :nth-child(odd)
    // as you can use this pattern for 3, 4, etc. cells in a row (3n+1, 4n+1, etc.).
    @media (min-width: 840px) {
      .mdc-layout-grid__cell:nth-child(2n+1) {
        grid-column-start: 4;
      }
    }
    

    此外,您可以为弹性盒后备指定网格对齐方式:

    @media (min-width: 840px) {
      .mdc-layout-grid__inner {
        justify-content: center;
      }
    }
    

    您可以查看the demo on Codepen

    【讨论】:

      【解决方案2】:

      网格居中对齐,网格单元格间距未与网格中心对齐(您似乎假设)。因此,如果您将网格相对于其容器的宽度设置为 50%,并使单元格的跨度宽度为 6,这将在桌面上产生所需的效果。或者,您可以在第一个单元格之前添加一个跨度宽度为 3 的空单元格。但这有点难以针对其他屏幕尺寸进行调整(在平板电脑和手机上,网格默认使用 8 和 4 单元格宽度)。

      由于列跨度在平板电脑上为 8,在手机上为 4,并且您没有指定您希望单元格在此类设备上的播放方式

      【讨论】:

        【解决方案3】:

        这可以通过将每种类型的设备的网格单元跨度指定为每个网格单元上特定设备的总和的一半并将第一个单元格向右对齐,第二个向左对齐来实现。

        所以对于您的具体情况,这意味着:

        <div class="mdc-layout-grid">
          <div class="mdc-layout-grid__inner">
            <div class="mdc-layout-grid__cell mdc-layout-grid--align-right
              mdc-layout-grid__cell--span-6-desktop
              mdc-layout-grid__cell--span-4-tablet
              mdc-layout-grid__cell--span-2-phone">first</div>
            <div class="mdc-layout-grid__cell mdc-layout-grid--align-left
              mdc-layout-grid__cell--span-6-desktop
              mdc-layout-grid__cell--span-4-tablet
              mdc-layout-grid__cell--span-2-phone">second</div>
          </div>
        </div>
        

        【讨论】:

        • mdc-layout-grid--align-right 不应该继续mdc-layout-grid__cell。它是mdc-layout-grid 的修饰符类。请参阅 BEM (getbem.com)。
        猜你喜欢
        • 2017-09-30
        • 2018-02-26
        • 2018-09-03
        • 2021-11-29
        • 1970-01-01
        • 2018-06-20
        • 2017-12-21
        • 2020-12-29
        • 2018-09-25
        相关资源
        最近更新 更多