单行左右布局
.line-flex-start-end {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
}
dom结构示例:
<div className="line-flex-start-end">// 父元素
<div>// 子元素
// 左侧显示内容
</div>
<div>// 子元素
// 右侧显示内容
// 子元素中的元素表现与没有样式的div中表现一致
// 块级元素占据子元素的一整行,行内元素不换行
</div>
</div>
单行等分布局
强制等分,超出宽度的元素强制隐藏,如果某个元素需要的宽度更大,添加类名修改flex的值。
.line-flex-equal-divide {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-evenly;
text-align: center;
// >a是为了使Link标签和NavLink标签生效
> div, > a {
flex: 1;
overflow: hidden;
}
}
dom结构示例
<div className="line-flex-equal-divide">// 父元素
<div>// 子元素
// 内容1
// 子元素中的元素表现与没有样式的div中表现一致
// 块级元素占据子元素的一整行,行内元素不换行
// 元素内容超出子元素宽度的部分将强制隐藏,且没有省略号
// 使用省略号的样式不生效,未找到原因
</div>
<div>
// 内容2
</div>
<div>
// 内容3
</div>
...
</div>
这两种布局的第一层子元素div是相对于父级(line-flex-start-end/line-flex-equal-divide)元素上下居中显示的,但是div的高度等于内容的高度,而不是父级元素的高度,所以如果有事件绑定在左右div上的话,可能会有事件触发区域较小的情况。
这两种布局可以混合嵌套使用。
<div className="line-flex-equal-divide">// 父元素
<div className="line-flex-start-end">
// 内容1和内容2左右排列且相对于父元素上下居中
<div> // 内容1
<svg className="icon" aria-hidden="true">
<use xlinkHref="#icon-up" />
</svg>
</div>
<div> // 内容2
<div>EUR/USD</div>
<div>0.00169</div>
<div>0.23%</div>
</div>
</div>
<div>
<div>卖出价</div>
<div>1.1345</div>
</div>
<div>
<div>买出价</div>
<div>1.1366</div>
</div>
</div>
属性解读:
center: 元素在侧轴居中。如果元素在侧轴上的高度高于其容器,那么在两个方向上溢出距离相同。用于控制元素上下居中对齐。
这里提供一种样式,可以使子元素拉伸至父元素的高度,且子元素内的元素上下居中对齐:
.line-flex-start-end.line-flex-children-stretch,
.line-flex-equal-divide.line-flex-children-stretch {
align-items: stretch; // 弹性元素被在侧轴方向被拉伸到与容器相同的高度或宽度
> div {
display: flex;
flex-direction: column;
justify-content: center;
}
}
需要注意的是,使用了该样式后,子元素中需要一行显示的多个元素,需要在外层嵌套一个div,且line-flex-children-stretch的子元素不能再直接嵌套这两种布局,比如
<div className="line-flex-equal-divide">
<div>
<div>新元/美元</div>
<div>flex-grow:1.5</div>
</div>
<div>
<span>436.82</span>
<svg className="icon" aria-hidden="true">
<use xlinkHref="#icon-close" />
</svg>
</div>
</div>
需要变为
<div className="line-flex-equal-divide line-flex-children-stretch">
<div>
<div>新元/美元</div>
<div>flex-grow:1.5</div>
</div>
<div>
<div>// 这里多嵌套了一层
<span>436.82</span>
<svg className="icon" aria-hidden="true">
<use xlinkHref="#icon-close" />
</svg>
</div>
</div>
</div>