0
我有一個水平的label: <input>
樣式表格。標籤需要具有相同的寬度,但是是動態的 - 基於表單中最長的標籤。通常情況下,我會用一系列display: table/row/cell
元素來解決這個問題,但是我們還需要一個將這些行分開的水平規則。具有任意水平尺寸的等寬表格標籤
display: table
與其中的非行/單元格元素不能很好地發揮作用。
核心形式結構:
<form>
<div class="group">
<span>test</span>
<div class="field">
<input type="text">
</div>
</div>
<hr>
<div class="group">
<span>test long</span>
<div class="field">
<input type="text">
</div>
</div>
<div class="group">
<span>test</span>
<div class="field">
<input type="text">
</div>
</div>
</form>
的CSS:
* { box-sizing: border-box; }
html, body { width: 100%; }
form {
display: table;
border-collapse: collapse;
border-spacing: 0;
width: 100%;
border: 1px solid red;
}
.group {
display: table-row;
}
span {
display: table-cell;
background: #ddd;
padding: 0 10px 0 0;
white-space: nowrap;
width: 1px;
}
input, hr {
width: 100%;
}
標籤寬度工作,我所期待的,但該hr
不能填補100%的寬度。我可以通過將其設置爲position: absolute
來獲得正確的寬度,但是隨後我失去了行之間的間距。我可以使它成爲display: table-row
,但不再控制間距。
爲什麼不使用'border-bottom'而不是'hr'? –
因爲這不允許我們對分隔符之前/之後的空格進行任何控制,這是必不可少的,而且我們的應用程序已經在類似的粘性情況下使用hrs。我看到的唯一選擇是在分隔符之前的元素*上使用新的類,並使用相鄰的同級分隔符來控制以下元素的填充頂部。使醜陋的設置變得更加難看,但可能是唯一的方法。 – helion3