Bir TD içinde Konum Göreceli / Mutlak Kullanılıyor mu?


108

Takip koduna sahibim:

<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>

Bu hiç çalışmıyor. Bazı nedenlerden dolayı, konum: göreli komutu TD'de okunmuyor ve DIV bildirimi sayfamın altındaki içerik kabının dışına yerleştiriliyor. TD'nin tüm içeriğini aşağıdaki gibi bir DIV'ye koymaya çalıştım:

<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>

Ancak bu yeni bir sorun yaratır. Tablo hücresinin içeriğinin yüksekliği değişken olduğundan, DIV uyarısı her zaman hücrenin altında değildir. Bir tablo hücresi 60 piksel işaretleyicinin ötesine uzanırsa, ancak diğer hücrelerin hiçbiri yapmazsa, diğer hücrelerde DIV bildirimi alt yerine 60 piksel aşağıdadır.


Masayı kullanmanın bir nedeni var mı? Tablo içeriğinin geri kalanının bu hücrenin içeriğini değiştireceğini varsayıyorum. Tablo gerekliyse üstte iki satır kullanabilirsiniz: valign = üst ve alt ile valign = bottom
Wayne

Tabloları düzen amacıyla kullanıyorsanız, buna karşı tavsiye ederim. Verileri göstermek için tablo kullanmak iyidir, ancak düzen için en iyisi değildir.
Kyle

5
Bu bir takvim için ... bu yüzden bir masa ızgarası gereklidir: 8wayrun.com/events/monthly/1.2011
Jason Axelrod

Yanıtlar:


189

Bunun nedeni, CSS 2.1'e göre position: relative, tablo öğeleri üzerindeki etkisinin tanımsız olmasıdır. Bunu açıklayan bir örnek position: relative, Chrome 13 üzerinde istenen etkiye sahip, ancak Firefox 4'te değil. Buradaki çözümünüz div, içeriğinizin çevresine bir eklemek ve position: relativebunun divyerine td. Aşağıda position: relative(1) ile bir diviyi), (2) bir td(iyi değil) ve son olarak (3) bir diviç a td(yine iyi) ile elde ettiğiniz sonuçları göstermektedir .

Firefox 4'te

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


29
Div yüksekliği% 100 olmayacağından, tabana göre konumlandırmanın: 0'ın hiçbir etkisi yoktur.
Softlion

1
Bu örnekteki "Mutlak aralık" ın td yüksekliğini etkilemeyeceğine ve bu da tablonun kullanımını temelde işe yaramaz hale getireceğine dikkat edin.
Dror

@Softlion: Nasıl tüm içeriğini kaydırma hakkında tdbir iç diviçin, sette width: 100%ve height: 100%, div td den ne olursa olsun dolguyu uygulamak ve ayarlayın relative? Buradaki fikir, kendisi tdgibi davranan, hemen üzerinde ince bir kapsayıcı katman oluşturmaktır td, ancak bu bir div. Benim için çalıştı.
CamilB

1
HTML kaynağı bağlantısı kesildi. Güncelleyebilir / yenileyebilir misiniz?
Peter VARGA

1
Bu cevabı 2019'da veya daha sonra bulanlar için: CSS2.1 gerçekten position:relativeiç tablo bölümleri üzerindeki etkisinin tanımsız olduğunu söylerken , tablo bölümlerinin kendilerinin davranışları anlamına geliyordu (örneğin, sınırların nasıl tddavranması gerektiği açık değildi. Bu yoluyla kayması durumunda position:relativedurumunda border-collapse:collapse). Onları , mutlak olarak konumlandırılmış torunların olası içeren bloklarından hariç tutmadı . Dolayısıyla, Firefox'un davranışının sadece bir hata olduğu ortaya çıktı ve 2014'te düzeltildi.
Ilya Streltsyn

5

Bu numara da uygundur, ancak bu durumda hizalama özellikleri (orta, alt vb.) Çalışmayacaktır.

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

2

Tablo hücresinin içeriği, değişken yükseklik, 60 pikselden fazla olabilir;

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


1

İkinci denemenizle ilgili olarak, dikey hizalama kullanmayı denediniz mi? ya

<td valign="bottom">

veya css ile

vertical-align:bottom

Bu işe yaramaz ... eğer bunu yaparsam, tablo hücresinin içeriği alttan 60 piksel aralıkla yerleştirilirdi; üstte değil.
Jason Axelrod

-2

"display: block;" yaparsanız da çalışır. td üzerinde, td kimliğini yok ediyor, ancak işe yarıyor!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.