下面是带有align-items: center
属性的眼睛。它们对于单行文本是OK,对于多行文本是FAIL:
的数据
下面是align-items: baseline
(或flex-start
)的眼睛。它们对多行文本更好,但不适合所有文本,因为我想将眼睛对齐到文本第一行的中心:
的
我想做的是:
的
看到眼睛图像是如何在文本的第一行居中的吗?
有没有可能用flexbox属性来优雅地做这件事,而不使用padding或margin?
(This是一个简化的例子。在真实的问题中,我不想引入填充,因为它会影响其他项目。)
下面是jsfiddle:http://jsfiddle.net/sqp1wdap/
7条答案
按热度按时间oipij1gg1#
解决方案:http://jsfiddle.net/sqp1wdap/3/
1.将眼睛和文本对齐到
flex-start
1.使
line-height
的文本相同的眼睛高度下面是编辑后的代码:
字符串
它看起来是这样的:
的数据
wfveoks02#
当然,如果图标的高度等于行的高度,它将与第一行对齐。
通常情况下,这两件事是不同的。你不能在不影响视觉设计的情况下改变行高或图标高度。
所以解决这个问题的方法是用一个高度等于文本行高度的flex容器来 Package 图标。这个容器将垂直居中图标。如果图标比容器大,那么它将从顶部和底部溢出。
所以在你的例子中(我只是为了清楚起见夸大了高度,你也可以尝试使用非常小的值,比如8px,看看它在两种情况下是如何工作的)
字符串
请注意,您实际上不需要更改文本行高,只需将眼睛容器高度设置为该值。
Fiddle适用于行高大于图标的情况:http://jsfiddle.net/ofdwemva/
Fiddle适用于行高小于icon的情况:http://jsfiddle.net/ofdwemva/1/
2ekbmq323#
我找到了不改变文本
line-height
属性的解决方案。1.与之前的oluckyman's answer相同,将Eye和Text对齐到
flex-start
。1.在Eye上添加隐藏的伪元素,它类似于文本的高度。
1.对Eye使用
center
对齐,这将对齐Eye本身和我们创建的伪元素。以下是JSFiddle的链接和我所做的总结:
字符串
它看起来像this。
w8rqjzmb4#
这里的很多答案将取决于你的情况-目前(和错误)接受的答案只会工作,如果你的设计师不介意你屠夫的线高度,这是没有好处的大多数。
如果你想这样做,你的最终目标是让图标容器与一行文本的高度相同,然后在这个容器中对齐图标。
这样做的一个体面的方法是通过复制一点文本与相同的css作为文本你想对中心然后隐藏它,这将确保容器现在是相同的高度作为文本.现在你只需中心对齐图标.
这里有一个react中的例子(css是一样的)
字符串
qxgroojn5#
字符串
这应该是你所需要的一切。Demo.
mccptt676#
您可以使用transform属性沿着,并根据存储的图标高度和可自由选择的无单位文本行高进行计算。
字符串
translateY()
中的计算通过从图标高度减去文本实际高度(当前font-size
与em
单位和line-height
的组合)并将其除以2来确保正确对齐。使用这种方法,您还可以更改
--text-line-height
属性或调整文本font-size
,而不会影响垂直对齐。请记住,这会将文本元素稍微移动到其父元素之外。
uqdfh47h7#
我不知道是否有一个优雅的方式来做它与
flex
,但我可以为您提供一个裂缝相同,这将不会影响任何其他元素,据我猜测:你可以为font-awesome.css添加自定义样式
字符串
对于您的自定义样式,您可以这样做:
型
我知道这不是正确的解决方案,但你可以给予这个尝试,除非它损害其他元素。:)
jSFiddle