Это хороший пример позиционирования CSS. Элементы с position:absolute
расположены относительно их ближайшего позиционированного родителя. Это означает, что мы можем прикрепить ярлыки к верху / левому краю их контейнеров, используя position:relative
на <ol>
и position:absolute
на ярлыке.
Пример здесь: http://jsfiddle.net/YhQYS/1/
HTML
<form action="." method="post">
<ol>
<li class="recent-data">
<strong>Recent data</strong>
<ol>
<li>3 99</li>
<li>5 98</li>
<li>15 97</li>
<li>28 96</li>
</ol>
</li>
<li class="new-data">
<label>New data</label>
<textarea placeholder="30 95" rows="4"></textarea>
</li>
</ol>
</form>
CSS
form > ol {
background: #98c8dc;
font-family: serif;
}
.recent-data > ol,
.new-data > ol {
list-style: none;
padding: 5px 10px 5px 0;
line-height:20px;
}
.recent-data li { padding-left:5px; }
.recent-data,
.new-data {
position:relative;
padding-left:140px;
}
.recent-data strong,
.new-data label {
position:absolute;
left:10px;
line-height:20px;
}
.recent-data strong { bottom:5px; }
.new-data label { top:5px; }
.new-data textarea {
font-family:serif;
font-size:100%;
padding:4px;
}
Это очень простой и надежный кросс-браузер. Обратите внимание, что вы не должны использовать <label>
, который не имеет соответствующего элемента управления формы.
Но эти вещи выглядят как табличные данные ... это ваш выбор, у нас недостаточно контекста, чтобы узнать, какая разметка более подходящая. Итак, вот более семантически правильный подход с использованием таблиц rowspan
и vertical-align
:
HTML
<form action="." method="post">
<table id="results">
<tbody>
<tr>
<th rowspan="4" scope="row" class="recent-label">Recent data</th>
<td>2</td>
<td>47</td>
</tr>
<tr>
<td>3</td>
<td>99</td>
</tr>
<tr>
<td>5</td>
<td>98</td>
</tr>
<tr>
<td>5</td>
<td>98</td>
</tr>
<tr>
<th rowspan="1" scope="row" class="new-label">New data</th>
<td colspan="2" class="new-data">
<textarea>23</textarea>
</td>
</tr>
</tbody>
</table>
</form>
CSS
form {
background: #98c8dc;
font-family: serif;
}
#results th,
#results td {
padding:3px 5px;
}
#results .recent-label {
vertical-align:bottom;
}
#results .new-label {
vertical-align:top;
}
#results .new-data {
padding-left:0px;
}
#results textarea {
padding:4px; // +1px border
font-size:100%;
font-family:serif;
}
Образец в http://jsfiddle.net/quqf8/1/