#html #css
#HTML #css
Вопрос:
Я динамически генерирую таблицу с помощью AJAX. Структура таблицы, которая должна быть заполнена, выглядит следующим образом:
<table id="foobar" style="width:100%">
<thead>
<tr>
<th style="width:20%;"></th>
<th style="width:55%;"></th>
<th title="widget name">Name</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
Данные ячейки содержат либо:
- изображение
- оболочка div с тегами привязки и абзацами
Я попробовал следующее:
- настройка
valign="top"
(отдельно) на уровняхtable
,th
иtr
— это не имело никакого эффекта - настройка
style="vertical-align: top;"
(отдельно) на уровняхtable
,th
иtr
— это не имело никакого эффекта
Я не хочу устанавливать свойство align на уровне ячейки, потому что это вызовет слишком большое ненужное раздувание, если таблица содержит несколько (скажем, сотни) строк.
Как я могу заставить таблицу выровнять содержимое ее ячеек по вертикали сверху (учитывая, что ячейки содержат блочные элементы?
Комментарии:
1.
valign
должно работать, несмотря ни на что. Вы проверили свой общий файл CSS, что он определяет дляTH
элементов?2. @Роберт Коритник: вы были правы. в моем основном файле CSS был установлен td { vertical-align: bottom}. Я исправил это благодаря вашему предложению
3. Хм, я полагаю, мне следует включить это в ответ, и вы сможете это принять. 🙂 Так я и сделал. Вы можете найти мой ответ ниже.
Ответ №1:
Вот базовый пример таблицы с тегами TH и TD, где для содержимого задано значение «выравнивание по вертикали: сверху».
Демонстрация: http://jsfiddle.net/HAQ3s/472
th, td {
vertical-align: top;
}
<table>
<tr>
<th>A<br /><br /></th>
<th>B</th>
<th>C</th>
</tr>
<tr>
<td>1<br /><br /></td>
<td>2</td>
<td>3</td>
</tr>
</table>
Комментарии:
1. Почему не либо
table th, table td
илиth, td
? Я бы либо ограничил оба параметра внутри таблицы, либо ни одного — внутри таблицы. (Учитывая эту конкретную ситуацию, я бы просто убралtable
.)2. Да, они работают. Итак, зачем вам сбивать читателя с толку, используя два разных подхода в одном и том же селекторе?
Ответ №2:
valign
должно работать независимо ни от чего, если все настройки, которые мы видим здесь, являются теми, которые используются на самом деле.
Глобальные настройки CSS
Но я подозреваю, что здесь другой стрелок. Вы проверили свой глобальный файл CSS, что он определяет для TH
элементов? Возможно, именно это вызывает у вас головную боль.
Комментарии:
1. Следует отметить, что valign устарел.
2. @wdm: тогда используйте CSS. Но имейте в виду, что у вас могут быть некоторые глобальные настройки CSS (которые также переопределяют
valign
).3. Особенно, если вы используете готовый шаблон. В том, над которым я работал, вверху был фрагмент css, который настраивал выравнивание практически каждого тега по базовой линии. Я дернул за это, и все встало на свои места.
Ответ №3:
Чтобы изменить ячейки так, как вы хотите, вам нужно установить выравнивание на уровне ячеек. Поскольку вы не хотите делать это для каждого отдельного элемента, вам нужно подумать о добавлении раздела css / style на вашу страницу. Вот пример определения того, что вам нужно — обычно это находится в разделе head или в отдельном файле, но вы могли бы даже поместить это непосредственно перед тегом «< table».
<style type="text/css">
td {
vertical-align: top;
}
</style>
Комментарии:
1. Вам следует отредактировать css, чтобы также включить
th
s, с чем и возится OP.
Ответ №4:
tr {vertical-align: top;}
у меня работает с вашим примером кода, возможно, вам нужно посмотреть, выполняется ли сброс или что-то еще, явно устанавливающее выравнивание по вертикали в среднее или нижнее положение на td
s
в этом случае что-то вроде
tr td {vertical-align: top;}
также должно сработать, чтобы сделать селектор более конкретным, хотя в вашем реальном случае использования может потребоваться больше, в зависимости от того, что вызывает td
отмену tr
настройки
Ответ №5:
В моем случае я дал !important
, поэтому это не сработало. Как только я удалил это вертикальное выравнивание, оно работает отлично.
th, td {
vertical-align: top; //Don't use !important keyword.
}
Надеюсь, это кому-то поможет.