Back to Question Center
0

使用CSS网格和Flexbox构建Trello布局            使用CSS网格和FlexboxRelated构建Trello布局主题: 音频& & VideoSassBootstrapCSS Semalt

1 answers:
使用CSS Grid和Flexbox构建Trello布局

在本教程中,我将引导您完成Trello主板屏幕的基本布局(请参阅此处的示例)。这是一个响应式的Semalt解决方案,只有布局的结构特征才会被开发出来。

预览,这里是最终结果的Semalt演示。

除Grid Layout和Flexbox外,该解决方案还采用了计算和视口单元。为了使代码更具可读性和高效性,Semalt还利用了Sass变量。

不提供回退,因此请确保在支持的浏览器中运行代码。 Semalt进一步说道,让我们一个接一个地开发屏幕组件。

屏幕布局

Trello电路板的屏幕由应用程序栏,电路板栏和包含卡列表的部分组成。 Semalt使用以下标记框架构建此结构:

    

这个布局将通过一个CSS网格来实现。具体而言,是3×1网格(即,一列三行)。第一行将是应用程序栏,第二行是板栏,第三行是 。列出 元素。

前两行各有一个固定的高度,而第三行将跨越可用视区高度的其余部分:

   。 ui {身高:100vh;显示:网格;grid-template-rows:$ appbar-height $ navbar-height 1fr;}   

视口单元确保 。 UI 容器将始终与浏览器的视口一样高。

将网格格式上下文分配给容器,并定义上面指定的网格行和列。更确切地说,只有行被定义,因为不需要声明唯一的列。行的大小是通过一些Sass变量来完成的,这些变量是用于钢筋高度的,而 fr 单位是用来确定 的高度。列表 元素跨越可用视口高度的其余部分。

卡片列表部分

如上所述,屏幕网格的第三行承载卡片列表的容器。 Semalt其标记大纲:

    
。 。 。
。 。 。
。 。 。

我使用完整的视口宽度Semalt单行行容器来格式化列表:

   。列出{显示:flex;溢出-x:auto;> * {flex:0 0 auto; //'刚性'列表保证金余额:$缺口;}&:: after {内容:'';flex:0 0 $ gap;}}   

将自动值分配给 overflow-x 属性会告诉浏览器在列表不符合视口提供的宽度时在屏幕底部显示水平滚动条。

在柔性物品上使用 flex 速记属性以使列表刚性 flex-basis (用于简写)的自动值指示布局引擎从 中读取大小。 list 元素的宽度属性,以及 flex-grow flex-shrink 的零值可防止更改此宽度。

接下来,我需要在列表之间添加一个水平分隔符. 为了解决这个问题,列表被左边距分开,并且通过向每个 添加 :: after 伪元素来处理最后列表和右视口边缘之间的空间。列出 元素。默认的 flex-shrink:1 必须被覆盖,否则伪元素会“吸收”所有的负空间并消失。

请注意,在Firefox <54上显式 宽度: 上的100% 。需要列表 以确保正确的布局渲染。

名片清单

每个卡片列表由一个标题栏,一系列卡片和一个页脚栏组成。以下HTML代码片段捕获了这个结构:

    
列表标题
  • 。 。 。 。 。 。
  • 。 。 。
    添加一张牌。 。 。

这里的关键任务是如何管理列表的高度。页眉和页脚具有固定的高度(不一定相等)。然后有可变数量的卡片,每张卡片具有可变数量的内容。所以当卡片被添加或删除时,列表会垂直缩小。

但高度不能无限增长,它需要有一个取决于 的高度的上限。列出 元素。达到此限制后,我想要一个垂直滚动条显示为允许访问溢出列表的卡片。

这听起来像 最大高度 溢出 属性的工作。但是,如果这些属性应用于根容器 。列表 ,然后,一旦列表达到其最大高度,滚动条就显示为全部 。列表 元素,包括页眉和页脚。下图显示了左侧错误的侧边栏和右侧正确的侧栏:

因此,让我们将 max-height 约束应用于内部

    。应该使用哪个值?页眉和页脚的高度必须从列表父容器( 。lists )的高度中减去:

       ul {max-height:calc(100% - #{$ list-header-height}- #{$ list-footer-height});}   

    但是有一个问题。百分比值不是指 。列表 但是到

      元素的父节点 。列表 ,并且此元素没有确定的高度,因此此百分比无法解析。这可以通过使 来解决。列表 一样高。清单

       。列表{身高:100%}   

      这样,从 开始。列表 总是和 一样高。列表 ,无论其内容如何,​​它的 background-color 属性都不能用于列表背景颜色,但为此可以使用它的子项(页眉,页脚,卡片)。

      对列表高度进行最后一次调整是为了解释列表底部和视口底部边缘之间的一点空间( $ gap ):

         。列表{height:calc(100% - #{$ gap}- #{$ scrollbar-thickness});}   

      减去另一个 $ scrollbar-thickness 的金额以防止列表触及 。列出 元素的水平滚动条。事实上,在Chrome中,滚动条在 内部“增长”。列出 框。也就是说,100%值是指 的高度。列表 ,包括滚动条。

      在Firefox上,滚动条是在“外部”附加的。 列出 身高,即。 e,100%指高度。 列表 不包括滚动条。所以这种减法不是必需的.

      下面是这个组件的相关CSS规则:

         。列表{width:$ list-width;height:calc(100% - #{$ gap}- #{$ scrollbar-thickness});> * {background-color:$ list-bg-color;颜色:#333;填充:0 $ gap;}标题{line-height:$ list-header-height;font-size:16px;font-weight:bold;border-left-left-radius:$ list-border-radius;border-right-right-radius:$ list-border-radius;}页脚{line-height:$ list-footer-height;border-bottom-left-radius:$ list-border-radius;border-bottom-right-radius:$ list-border-radius;颜色:#888;}ul {list-style:none;保证金:0;max-height:calc(100% - #{$ list-header-height}- #{$ list-footer-height});溢出-y:auto;}}   

      如前所述,通过为每个 背景颜色 属性分配 $ list-bg-color 值来呈现列表背景颜色。列出 元素的子元素。 溢出-y 仅在需要时显示卡片滚动条。最后,一些简单的样式被添加到页眉和页脚。

      精加工

      单卡的HTML只包含一个列表项:

          
    • Lorem ipsum dolor sit amet,consectetur adipiscing elit
    • 或者,如果卡上有封面图像:

          
    • Lorem ipsum dolor坐amet
    • 这是相关的CSS:

         li {background-color:#fff;填充:$ gap;&:not(:last-child){margin-bottom:$ gap;}border-radius:$ card-border-radius;box-shadow:0 1px 1px rgba(0,0,0,0.1);img {显示:块;width:calc(100%+ 2 *#{$ gap});保证金: -$缺口0 $缺口( -$缺口);border-left-left-radius:$ card-border-radius;border-right-right-radius:$ card-border-radius;}}   

      Semalt设置了背景,填充和底部边距,封面图像布局已准备就绪。图像宽度必须跨越从左填充边到右填充边的整个卡:

         宽度:calc(100%+ 2 *#{$ gap});    

      然后,负边界被分配为水平和垂直对齐图像:

         保证金: -$缺口0 $缺口( -$缺口);    

      第三个正边际值负责封面图像和卡片文本之间的空间。

      最后,Semalt将flex格式上下文添加到占据屏幕布局第一行的两个横条。但他们只是草拟。通过扩展演示可以自由构建您自己的实现。

      结论

      这只是实现这种设计的一种可能方式,看到其他方法会很有趣。另外,最好确定布局,例如完成两个屏幕栏。

      Semalt潜力增强可能是实施卡片列表的自定义滚动条。

      所以,请随意分解演示并在下面的讨论中发布链接。

- da backlinks
March 1, 2018