Використання відносної / абсолютної позиції в TD?


108

У мене є такий код:

<td style="position: relative; min-height: 60px; vertical-align: top;">
    Contents of table cell, variable height, could be more than 60px;

    <div style="position: absolute; bottom: 0px;">
        Notice
    </div>
</td>

Це зовсім не працює. Чомусь позиція: відносна команда не читається в TD, а повідомлення DIV розміщується поза контейнером вмісту внизу моєї сторінки. Я намагався вмістити весь вміст TD в DIV, наприклад:

<td>
    <div style="position: relative; min-height: 60px; vertical-align: top;">
        Contents of table cell, variable height, could be more than 60px;

        <div style="position: absolute; bottom: 0px;">
            Notice
        </div>
    </div>
</td>

Однак це створює нову проблему. Оскільки висота вмісту комірки таблиці є змінною, повідомлення DIV не завжди знаходиться внизу комірки. Якщо комірка таблиці виходить за межі маркера 60 пікселів, але жодна інша клітина не робить, то в інших клітинках повідомлення DIV знаходиться внизу на 60 пікселів, а не внизу.


Чи є причина використання таблиці? Я припускаю, що решта вмісту таблиці змістить вміст цієї комірки. Якщо потрібна таблиця, ви можете використовувати два ряди вгорі з valign = верх і низ з valign = знизу
Wayne

Якщо ви використовуєте таблиці для цілей компонування, я б радив цього. Використання таблиць для відображення даних добре, але вони не найкращі для компонування.
Кайл

5
Її для календаря ... так що сітка таблиці є найважливішою: 8wayrun.com/events/monthly/1.2011
Jason Axelrod

Відповіді:


189

Це тому, що згідно CSS 2.1 , вплив елементів position: relativeна таблиці не визначено. Ілюстрацією цього, position: relativeмає бажаний ефект на Chrome 13, але не на Firefox 4. Ваше рішення тут , щоб додати divнавколо змісту і поставити position: relativeна те , що divзамість td. Далі проілюстровано результати, які ви отримуєте з position: relative(1) на divдобро), (2) на td(не добре) і, нарешті, (3) на divвнутрішній частині td(знову добре).

На Firefox 4

<table>
  <tr>
    <td>
      <div style="position:relative;">
        <span style="position:absolute; left:150px;">
          Absolute span
        </span>
        Relative div
      </div>
    </td>
  </tr>
</table>


29
Висота Div не буде 100%, тому відносне розташування до низу: 0 не впливає.
Softlion

1
Зауважте, що "Абсолютний проміжок" у цьому прикладі не вплине на висоту td, що в основному робить таблицю марною.
Dror

@Softlion: Як щодо обгортання всього вмісту tdвсередині a div, встановленого до width: 100%та height: 100%, застосувати будь-яку підкладку з td до div та встановити його relative? Ідея полягає у створенні тонкого утримуючого шару трохи вище td, що діє як tdсам по собі, але це div. Це працювало для мене.
CamilB

1
Посилання на джерело HTML недійсне. Ви можете оновити / оновити?
Пітер ВАРГА

1
Для тих, хто знайде цю відповідь у 2019 році чи пізніше: хоча CSS2.1 справді говорив, що вплив position:relativeна внутрішні частини таблиці не визначено, це означало поведінку самих частин таблиці (наприклад, було незрозуміло, як повинні tdповодитися кордони якщо він зміщений на position:relativeна випадок border-collapse:collapse). Це не виключало їх з можливих, що містять блоки абсолютно розташованих нащадків. Тож поведінка Firefox виявилася просто помилкою, яку було виправлено у 2014 році.
Ілля

5

Цей трюк також підходить, але в цьому випадку властивості вирівнювання (середина, низ тощо) не спрацюють.

<td style="display: block; position: relative;">
</td>

2

Зміст комірки таблиці, змінна висота, може бути більше 60 пікселів;

<div style="position: absolute; bottom: 0px;">
    Notice
</div>


1

Що стосується вашої другої спроби, ви намагалися використовувати вертикальне вирівнювання? Або

<td valign="bottom">

або з css

vertical-align:bottom

Це не спрацювало ... якби я це зробив, то вміст комірки таблиці буде розташований на відстані 60 пікселів знизу; а не вгорі.
Джейсон Аксельрод

-2

також працює, якщо ви робите "display: block;" на td, знищуючи ідентичність td, але працює!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.