Верстка.

S
На сайте с 20.08.2007
Offline
140
908

Имеется таблица с тремя ячейками. В каждой ячейке содержимое состоит из трех частей:

Верх (image)

Центр

Низ (Bottom)

Высота верха и низа фиксированная. Средняя часть может изменять высоту в зависимости от длины текста в ней.

Вот код:

<table border="1">
<tr>
<td style="vertical-align: top; width: 200px; position: relative; padding-bottom: 50px;">
<div style=" height:100px; width:100px; background:#0033CC; margin: 0 auto;">image</div>
<div style="">name</div>
<div style=" position: absolute; bottom: 0; height: 50px; background: #99CC66">bottom</div>
</td>
<td style="vertical-align: top; width: 200px; position: relative; padding-bottom: 50px;">
<div style=" height:100px; width:100px; background:#0033CC; margin: 0 auto;">image</div>
<div style="">name<br />555</div>
<div style=" position: absolute; bottom: 0; height: 50px; background: #99CC66">bottom</div>
</td>
<td style="vertical-align: top; width: 200px; position: relative; padding-bottom: 50px;">
<div style=" height:100px; width:100px; background:#0033CC; margin: 0 auto;">image</div>
<div style="">name</div>
<div style=" position: absolute; bottom: 0; height: 50px; background: #99CC66">bottom</div>
</td>
</tr>
</table>

Чтобы нижняя часть во всех трех ячейках всегда была внизу одинаково расположена у всех трех элементов, я ее спозиционировал абсолютно и прилепил к низу ячейки. Все, теперь текст средней части любой ячейки может растягивать все ячейки по вертикали сколько угодно - верхняя часть всегда будет вверху, а нижняя внизу.

Все хорошо, все работает во всех браузерах. А ведь не должно :)

Я задал position: relative; не блочному элементу, а ячейке таблицы. Это не блочный элемент и по идее ему должно быть безразлично это позиционирование. Однако работает почему-то. И абсолютно спозиционированный блок позиционируется относительно ячейки таблицы, как будто это блочный элемент.

Вопрос вот в чем: такое поведение это теперь норма? Раньше ФФ ругался и не позволял позиционировать элементы в ячейках таблицы, задавая им position: relative; как блочным элементам.

П.С. Извините за не полный заголовок. Хотел добавить после создания поста, но забыл. Теперь не отредактировать :(

дани мапов
На сайте с 06.09.2012
Offline
204
#1

Ну значит новые версии FF по другому работают с ячейками.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
Staid
На сайте с 30.07.2014
Offline
59
#2

somick, помню ещё пару лет назад ФФ не признавала позиционирование в ячейках. В любом случае ваш способ не кроссбраузерный, в старых версиях будут косяки.

Раз уж на таблицах решили (хотя зачем?), то можно ведь проще сделать:


<table>
<tr>
<td>image</td>
<td>image</td>
<td>image</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>bottom</td>
<td>bottom</td>
<td>bottom</td>
</tr>
</table>

Пример: http://jsfiddle.net/q645q/

iqmaker
На сайте с 17.04.2012
Offline
309
#3

Вроде есть вопрос и решение на stackoverflow:

http://stackoverflow.com/questions/5148041/does-firefox-support-position-relative-on-table-elements

Если кратко, то содержимое ячейки сделать div и уже ему задавать это свойство.

Если задать display: block, то такое поведение становится законным.

В противном случае UB, т.е на усмотрение браузера: http://stackoverflow.com/questions/17526370/position-relative-not-working-with-display-table-cell

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий