我有一个标题。在这个标题中有一个标题和一个选择器。选择器是一个简单的标签,下面有一个选择。我希望将标题的基线与选择内的文本对齐。如果我使用align-items: baseline
,则标题的基线与标签的基线对齐,而不是与选择中的文本对齐。
如何将标题的基线与选择的基线对齐,而不是标签?
再现代码是
<div style="display:flex;align-items:baseline">
<span style="font-size:23px;padding-top:16px">A title</span>
<div>
<div><span>A label</span></div>
<div><select><option>An option</option></select></div>
</div>
</div>
答案 0 :(得分:2)
如何将标题的基线与基线对齐 选择,而不是标签?
根据您的标记,您的标题margin-top:auto
上需要span
。
div.wrap > span { margin-top: auto; }
然而,这可能并不是一个确切的基线,因为这很大程度上取决于font-size
,line-height
,padding
等,而不仅仅取决于您的标题span
但也在select
本身。
下面的代码段有助于将红线显示基线显示:
<强>段:强>
* { box-sizing: border-box; padding: 0; margin: 0; }
div.wrap { display: flex; margin: 8px; position: relative; }
div.wrap > span { margin-top: auto; margin-right: 4px; font-size: 1.5em; }
div.wrap select { padding: 2px; }
div.wrap::after {
content: ''; display: block;
position: absolute; left: -4px; bottom: 4px;
width: 240px; height: 1px;
background-color: #f00;
}
&#13;
<div class='wrap'>
<span>A title</span>
<div>
<div><span>A label</span></div>
<div><select><option>An option</option></select></div>
</div>
</div>
&#13;
陪伴小提琴:http://jsfiddle.net/abhitalks/n4z98wvn/
现在为什么baseline
没有与基线对齐?它确实如此。如果将标签分成多行,则会看到它与第一行的基线对齐。您可以通过将其与flex-start
进行比较来清楚地看到。
正如@Paulie_D指出的那样,您也可以使用flex-end
获得预期的结果。然而,我的第一个解决方案中提到的问题仍然存在。您可以通过将其与标题上的缩减line-height
进行比较来清楚地看到它。
以下是所有比较。
比较代码段
* { box-sizing: border-box; padding: 0; margin: 0; }
div.wrap { display: flex; align-items: baseline; margin: 16px; }
div.wrap > span { font-size: 23px; border: 1px solid #ddd; }
div.wrap:nth-of-type(2) { align-items: flex-start; }
div.wrap:nth-of-type(3) { align-items: flex-end; }
div.wrap:nth-of-type(4) { align-items: flex-end; }
div.wrap:nth-of-type(4) > span { line-height: 20px; }
&#13;
<div class="wrap">
<span>A title</span>
<div>
<div>
<span>
A label<br/>which breaks into<br/>lines,
is aligned at baseline with the title.
</span>
</div>
<div><select><option>An option</option></select></div>
</div>
</div>
<div class="wrap">
<span>A title</span>
<div>
<div>
<span>
A label<br/>which breaks into<br/>lines,
is aligned at flex-start with the title.
</span>
</div>
<div><select><option>An option</option></select></div>
</div>
</div>
<div class="wrap">
<span>A title</span>
<div>
<div>
<span>
A label<br/>which breaks into<br/>lines.
The select is mis-aligned with the title.
</span>
</div>
<div><select><option>An option</option></select></div>
</div>
</div>
<div class="wrap">
<span>A title</span>
<div>
<div>
<span>
A label<br/>which breaks into<br/>lines.
The select is aligned neatly with the title.
</span>
</div>
<div><select><option>An option</option></select></div>
</div>
</div>
&#13;
答案 1 :(得分:1)
试试这个:
HTML(没有更改;除了删除了一些内联样式并添加了id
)
CSS
#container {
display: flex;
}
#container > div {
display: flex;
flex-direction: column;
}