CSS 垂直对齐:表格、表单和 div 的基线
我正在尝试构建一个包含输入、文本区域和块元素的表单,每个元素都有一个标签。为了获得灵活的网格,我使用了表格。为了使标签和输入/文本区域匹配垂直对齐,我设置了 vertical-align: benchmark;
这对于输入和文本区域效果很好。但不适用于 div(请参阅此 jsFiddle)。因此,div 的标签在单元格的底部对齐,但我希望它在顶部,即基线应该在顶部。
如何在不更改 div 内容或不必区分输入/文本区域和 div 标签的情况下实现此目的?有什么方法可以强制不可见的基线位于表格单元格的顶部吗?
也许我没有从正确的角度处理这个问题,任何见解都会受到赞赏。
I'm trying to build a form that contains inputs, textareas and block elements, each with a label. In order to get a flexible grid, I'm using a table. For a matching vertical alignment of the labels and the inputs/textarea I set vertical-align: baseline;
which works fine for inputs and textareas. But not for divs (see this jsFiddle). The label for the div is consequently aligned at the bottom of the cell, but I want it on the top, i.e. the baseline should be on the top.
How can I achieve this without changing the contents of the div or having to differ between labels for inputs/textareas and divs? Is there any way to force an invisible baseline to be at the top of a table cell?
Maybe I'm not approaching the problem from the right side, any insight is appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用下面的代码来解决您的问题:
Use the code below for your problem:
您的 div 必须至少有一个字符(例如 )。
对于文本区域,“垂直对齐:基线;”仅适用于壁虎。
正如 developer.mozilla.org 所说,
我找到了解决方法,但它改变了 HTML。
我将vertical-align: text-top设置为textarea,并且为了修复由border-top和textarea的padding顶部的高度引起的间隙,我将其设置为负margin-top。为了避免文本区域与其上方的所有元素重叠,我在文本区域周围放置了一个 div,并使用 padding-top 来平衡间隙。
HTML:
CSS:
我更新了您的 jsFiddle。
Your div must have at least one character (for example a ).
For textareas, "vertical-align: baseline;" only works for Gecko.
As developer.mozilla.org said,
I found a workaround for that, but it changes the HTML.
I set vertical-align: text-top to the textarea, and to fix the gap caused by the height of the border-top and the padding top of the textarea, I set it a negative margin-top. And to avoid having the textarea overlapping all elements above it, I put a div around the textarea with a padding-top to counterbalance the gap.
HTML:
CSS:
I updated your jsFiddle.