Angular Material: 如何指定布局中两列之间的间距?
Angular Material: How do you specify spacing between two columns in a layout?
假设我在 Angular Material 布局中的一行中有两列:
<div layout="row" flex>
<div layout="column" flex="50">
Content 1...
</div>
<div layout="column" flex="50">
Content 2...
</div>
</div>
现在,假设我想在列之间设置任意数量的 space(例如 "gutter",10 像素)。我可以创建第三个空的 div,设置一个小的 "flex" 值并将 "flex" 值从 50 修改为更小的值,但这看起来像是 hack 并且会创建基于百分比的装订线宽度。似乎应该有一种更简洁的方法来获得精确的装订线而不创建空的 divs。我是否必须将 类 放在我的列 div 上并设置 CSS 边距值(并处理左与右等)?任何人有任何指示以 Angular Material 方式执行此操作吗?
我不确定这是否是 "Angular Material" 做事的方式。但是我感觉到你的痛苦。
目前,我正在将一些 Bootstrap 代码迁移到 Angular Material 并且确实需要一种方法。
这是我所做的。
由于 Angular Material 的 layout
指令仅影响直系子级,我相信这是一种 Angular Material 操作方式。因此,在 layout
div 上,我添加了一个 class、gutter
,这里是 SASS(更漂亮的 CSS,带有变量)伴随着 class:
.gutter {
(greater-than) * {
padding-right: $layout-gutter-width;
~ * {
padding-left: $layout-gutter-width;
}
&:last-of-type {
padding-right: 0;
}
}
}
注意 - 我不确定如何将 >
放在里面,所以用它代替“(大于)”
说明
$layout-gutter-width
实际上是由 Angular Material 附带的 angular-material.scss
定义的(我在我的项目中使用 SASS)但是你可以随意设置它,CSS或 SASS、10px、16px、50px 等等。
对于那些不完全熟悉SASS中发生的事情的人:
> *
这里的意思是"Any immediate descendant of..."
~ *
这里表示"Any immediate sibling of..."
&:last-of-type
这里表示"The very last of these immediate descendants..."
因此,对于 class gutter
元素的每个直接后代,我们添加 padding-right
。对于每个后续的兄弟元素,我们添加 padding-left
,对于最后一个元素,我们删除 padding-right
。第一个元素不会有 padding-left
,最后一个元素不会有 padding-right
.
最终这得到了我们想要的填充。
<div layout="row" class="gutter" layout-align="center center">
<div flex="50">
...
</div>
<div flex="50">
...
</div>
</div>
你可以用 'layout-margin' 做很多事情
https://material.angularjs.org/latest/layout/options
示例:
<div layout="row" layout-margin>
<div flex>Parent layout and this element have margins.</div>
</div>
<div layout="row" layout-padding>
<div flex>Parent layout and this element have padding.</div>
</div>
<div layout="row" layout-fill style="min-height: 224px;">
<div flex>Parent layout is set to fill available space.</div>
</div>
<div layout="row" layout-padding layout-margin layout-fill style="min-height: 224px;">
<div flex>I am using all three at once.</div>
</div>
您可以使用 layout-align with spaces between 选项。
我相信你的样本 'Material way' 至少在现在 space 之间是这样的:
<div fxLayout="row" flex fxLayoutGap="10px">
<div fxLayout="column" flex="50">
Content 1...
</div>
<div fxLayout="column" flex="50">
Content 2...
</div>
</div>
假设我在 Angular Material 布局中的一行中有两列:
<div layout="row" flex>
<div layout="column" flex="50">
Content 1...
</div>
<div layout="column" flex="50">
Content 2...
</div>
</div>
现在,假设我想在列之间设置任意数量的 space(例如 "gutter",10 像素)。我可以创建第三个空的 div,设置一个小的 "flex" 值并将 "flex" 值从 50 修改为更小的值,但这看起来像是 hack 并且会创建基于百分比的装订线宽度。似乎应该有一种更简洁的方法来获得精确的装订线而不创建空的 divs。我是否必须将 类 放在我的列 div 上并设置 CSS 边距值(并处理左与右等)?任何人有任何指示以 Angular Material 方式执行此操作吗?
我不确定这是否是 "Angular Material" 做事的方式。但是我感觉到你的痛苦。
目前,我正在将一些 Bootstrap 代码迁移到 Angular Material 并且确实需要一种方法。
这是我所做的。
由于 Angular Material 的 layout
指令仅影响直系子级,我相信这是一种 Angular Material 操作方式。因此,在 layout
div 上,我添加了一个 class、gutter
,这里是 SASS(更漂亮的 CSS,带有变量)伴随着 class:
.gutter {
(greater-than) * {
padding-right: $layout-gutter-width;
~ * {
padding-left: $layout-gutter-width;
}
&:last-of-type {
padding-right: 0;
}
}
}
注意 - 我不确定如何将 >
放在里面,所以用它代替“(大于)”
说明
$layout-gutter-width
实际上是由 Angular Material 附带的 angular-material.scss
定义的(我在我的项目中使用 SASS)但是你可以随意设置它,CSS或 SASS、10px、16px、50px 等等。
对于那些不完全熟悉SASS中发生的事情的人:
> *
这里的意思是"Any immediate descendant of..."
~ *
这里表示"Any immediate sibling of..."
&:last-of-type
这里表示"The very last of these immediate descendants..."
因此,对于 class gutter
元素的每个直接后代,我们添加 padding-right
。对于每个后续的兄弟元素,我们添加 padding-left
,对于最后一个元素,我们删除 padding-right
。第一个元素不会有 padding-left
,最后一个元素不会有 padding-right
.
最终这得到了我们想要的填充。
<div layout="row" class="gutter" layout-align="center center">
<div flex="50">
...
</div>
<div flex="50">
...
</div>
</div>
你可以用 'layout-margin' 做很多事情 https://material.angularjs.org/latest/layout/options 示例:
<div layout="row" layout-margin>
<div flex>Parent layout and this element have margins.</div>
</div>
<div layout="row" layout-padding>
<div flex>Parent layout and this element have padding.</div>
</div>
<div layout="row" layout-fill style="min-height: 224px;">
<div flex>Parent layout is set to fill available space.</div>
</div>
<div layout="row" layout-padding layout-margin layout-fill style="min-height: 224px;">
<div flex>I am using all three at once.</div>
</div>
您可以使用 layout-align with spaces between 选项。
我相信你的样本 'Material way' 至少在现在 space 之间是这样的:
<div fxLayout="row" flex fxLayoutGap="10px">
<div fxLayout="column" flex="50">
Content 1...
</div>
<div fxLayout="column" flex="50">
Content 2...
</div>
</div>