我正在开发一个项目,其中有一行控件,每个控件都是一个按钮元素。按钮内部有内容,它们与flexbox排成一行。按钮元素将其内容垂直居中,我无法弄清楚如何覆盖它以在按钮顶部垂直对齐它。控件都必须具有相同的高度和相同的宽度,并且单击边框中的任何位置都必须计为单击按钮。
此Codepen清楚地显示了问题:http://codepen.io/anon/pen/RPpqdz
.wrapper {
display: flex;
flex-direction: row;
width: 80%;
}
button,
.object {
font-family: sans-serif;
font-size: 1em;
padding: 1em;
background: #fff;
flex: 1;
border: 1px solid red;
text-align: left;
}
<h1>What it looks like</h1>
<div class="wrapper">
<button>I am Content</button>
<button>I am Much Longer Content That Goes Here and Here</button>
<button>I am Content</button>
</div>
<h1>What I want it to look like</h1>
<div class="wrapper">
<div class="object">I am Content</div>
<div class="object">I am Much Longer Content That Goes Here and Here</div>
<div class="object">I am Content</div>
</div>
我意识到这个问题可以通过不使用按钮元素来解决,但我也觉得我应该能够覆盖按钮元素的这种行为。我想为自己的理智做好准备!
答案 0 :(得分:0)
首先,h2
内的p
和button
无效HTML。
其次,没有简单的方法来控制按钮中元素的位置,尤其是垂直方向。
但是如果你真的必须使用这个 BROKEN HTML,并且只有顶部对齐很重要,你可以强制元素占据固定的高度,以便按钮将它们对齐在顶部,像这样:
button > h2 {
height: 48px;
}
button > p {
height: 16px;
}
我必须说这仍然与使用<div>
完全相同,所以我不知道这是否足够。
在任何情况下,都要认真地试图说服那些负责该项目的更大背景的人。使用适当的有效HTML。
修改强>
如果按钮内仅使用内联元素,则问题变得更易于管理。唯一需要注意的是:您需要事先知道按钮的高度。然后,您可以使用填充来模拟上下流。
button {
padding-top: 1em;
padding-right: 1em;
padding-bottom: 5em; /* make sure bottom + top padding == height */
padding-left: 1em;
height: 6em;
}
仍然可能不理想 - 感觉就像一个厚重的黑客解决方案。
答案 1 :(得分:0)
.wrapper {
display: inline-flex;
display: -moz-inline-box;
width: 90%;
}
button, .object {
font-family: sans-serif;
font-size: 1em;
padding: 1em;
background: #fff;
border: 1px solid red;
text-align: left;
margin: 0em 0.3em 0em 0em;
}