lebar td, tidak berfungsi?


96

Jadi saya punya kode ini di sini:

<table>
    <tr>
        <td width="200px" valign="top">
            <div class="left_menu">
                <div class="menu_item">
                    <a href="#">Home</a>
                </div>
            </div>
        </td>
        <td width="1000px" valign="top">Content</td>
    </tr>
</table>

dengan CSS

.left_menu {
    background: none repeat scroll 0 0 #333333;
    border-radius: 5px 5px 5px 5px;
    font-family: Arial,Helvetica,sans-serif;
    font-size: 12px;
    font-weight: bold;
    padding: 5px;
}

.menu_item {
    background: none repeat scroll 0 0 #CCCCCC;
    border-bottom: 1px solid #999999;
    border-radius: 5px 5px 5px 5px;
    border-top: 1px solid #FFFFCC;
    cursor: pointer;
    padding: 5px;
}

Ini berfungsi dengan baik di browser saya dan saya telah mengujinya di setiap browser baik mac dan PC, tetapi seseorang mengeluh bahwa tddengan width200 terus berubah lebar. Saya tidak tahu apa yang dia bicarakan. Adakah yang tahu mengapa dia melihat perubahan lebar di td?


Jadi, bagaimana kami dapat membantu ketika kami kurang tahu tentang apa keluhan itu? Kami bahkan tidak dapat menguji halaman asli, dan kami tidak memiliki informasi tentang seseorang dan lingkungan penjelajahannya.
Jukka K. Korpela

Jawaban:


125

Harus:

<td width="200">

atau

<td style="width: 200px">

Perhatikan bahwa jika sel Anda berisi beberapa konten yang tidak sesuai dengan 200px (seperti somelongwordwithoutanyspaces), sel akan meregang, kecuali jika CSS Anda berisi table-layout: fixeduntuk tabel.

EDIT

Seperti yang dicatat oleh anak kristina pada jawabannya, Anda harus menghindari widthatribut dan menggunakan CSS sebaris (dengan styleatribut). Merupakan praktik yang baik untuk memisahkan gaya dan struktur sebanyak mungkin.


Terima kasih bfavaretto ... mencobanya sekarang
user979331

47
harus tabel<table style="table-layout:fixed;">
user979331

3
@ user1193385, Ya, itu saja. Tetapi hindari menggunakan css sebaris jika memungkinkan.
bfavaretto

4
css sebaris adalah ide yang buruk kecuali jika Anda benar-benar hanya membutuhkannya di satu tempat. juga, lebar td telah disusutkan untuk beberapa waktu. lihat jawaban di bawah
kristina childs

2
@ Kristinachilds Saya setuju. Saya menggunakan inline css pada contoh saya jadi saya tidak perlu membagi menjadi dua blok kode untuk HTML dan CSS. Menambahkan komentar di atas yang memberi tahu OP untuk menghindari CSS sebaris. Tentang atribut width, secara teknis itu tidak berlaku lagi (karena spesifikasi HTML5 masih draft yang berfungsi), tetapi Anda benar, itu harus dihindari. Saya akan mengedit jawaban saya dengan catatan tentang itu.
bfavaretto

31

Lebar dan / atau tinggi tabel sudah tidak standar lagi; seperti yang dikatakan Ianzz, mereka tidak digunakan lagi. Alih-alih, cara terbaik untuk melakukannya adalah dengan memiliki elemen blok di dalam sel tabel Anda yang akan menahan sel terbuka ke ukuran yang Anda inginkan:

<table>
    <tr>
        <td valign="top">
            <div class="left_menu">
                <div class="menu_item">
                    <a href="#">Home</a>
                </div>
            </div>
        </td>
        <td valign="top" class="content">Content</td>
    </tr>
</table>

CSS

.content {
    width: 1000px;
}

.left_menu {
    background: none repeat scroll 0 0 #333333;
    border-radius: 5px 5px 5px 5px;
    font-family: Arial,Helvetica,sans-serif;
    font-size: 12px;
    font-weight: bold;
    padding: 5px;
    width: 200px;
}

.menu_item {
    background: none repeat scroll 0 0 #CCCCCC;
    border-bottom: 1px solid #999999;
    border-radius: 5px 5px 5px 5px;
    border-top: 1px solid #FFFFCC;
    cursor: pointer;
    padding: 5px;
}

10
Sayangnya, teknologi email jauh di belakang spesifikasi HTML saat ini, dan dalam hal ini, tabel dan css sebaris sayangnya, tidak dapat dihindari.
MikeTheLiar

2
Tidak ada yang berbicara tentang email html, ini untuk penjelajahan web desktop dasar. Tapi ya, untuk tabel email dan css inline adalah satu-satunya cara untuk membuatnya. Terima kasih, Microsoft ...
kristina childs

3
Saya hanya membuka email karena itulah yang membawa saya ke sini; Saya mengalami masalah yang sama dengan email.
MikeTheLiar

22
 <table style="table-layout:fixed;">

Ini akan memaksa lebar gaya <td>. Jika teks terlalu mengisinya, teks itu akan tumpang tindih dengan <td>teks lainnya . Jadi coba gunakan kueri media.


1
Dalam kasus penggunaan saya, ini sama pentingnya dengan jawaban
bfavaretto

Dalam kasus saya (Firefox 70.0), table-layout:fixedlebar tetap ditetapkan ke kolom, jadi saya tidak dapat mengubahnya widthlagi (dengan jquery).
Jose Manuel Abarca RodrĂ­guez

7

Anda tidak dapat menentukan unit di width/ heightatribut tabel; ini selalu dalam piksel, tetapi Anda tidak boleh menggunakannya sama sekali karena sudah usang.



7

Anda dapat menggunakan dalam <td>tag css:display:inline-block

Suka: <td style="display:inline-block">





0

Perhatikan bahwa menyesuaikan lebar kolom di thead akan mempengaruhi seluruh tabel

<table>
    <thead>
        <tr width="25">
            <th>Name</th>
            <th>Email</th>
        </tr>
    </thead>
    <tr>
        <td>Joe</td>
        <td>joe@email.com</td>
    </tr>
</table>

Dalam kasus saya, lebar pada thead> tr menimpa lebar pada tabel> tr> td secara langsung.


0

Menggunakan

<table style="table-layout:fixed;">

Ini akan memaksa tabel untuk mengatur lebar 100%. Kemudian gunakan kode ini

$('#dataTable').dataTable( {
        bAutoWidth: false, 
        aoColumns : [
          { sWidth: '45%' },
          { sWidth: '45%' },
          { sWidth: '10%' },
              ]
      });

(ID tabel adalah dataTable dan memiliki 3 kolom) untuk menentukan panjang setiap sel


0

Saya mencoba dengan banyak solusi tetapi tidak berhasil untuk saya, jadi saya mencoba fleksibel dengan tabel dan berfungsi dengan baik untuk saya dengan semua fungsi tabel seperti border-collapse dan seterusnya hanya perubahan adalah properti tampilan

Ini adalah persyaratan HTML saya

<table>
  <thead>
    <tr>
      <th>1</th>
      <th colspan="3">2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td colspan="3">2</td>
    </tr>
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
      <td>4</td>
    </tr>
    <tr>
      <td>1</td>
      <td>2</td>
      <td colspan="2">3</td>
    </tr>
  </tbody>
</table>

CSS saya

table{
    display: flex;
  flex-direction: column;
}
table tr{
    display: flex;
  width: 100%;
}
table > thead > tr > th:first-child{
    width: 20%;
}
table > thead > tr > th:last-child{
    width: 80%;
}
table > tbody tr > td:first-child{
    width: 10%;
}
table > tbody tr > td{
    width: 30%;
}
table > tbody tr > td[colspan="2"]{
    width: 60%;
}
table > tbody tr > td[colspan="3"]{
    width: 90%;
}
/*This is to remove border making 1px space on right*/
table > tbody tr > td:last-child{
    border-right: 0;
}

0

Masalah ini cukup mudah diselesaikan dengan menggunakan min-widthdan max-widthdalam aturan css.

HTML

<table>
  <tr>
    <td class="name">Peter</td>
    <td class="hobby">Photography</td>
    <td class="comment">A long comment about something...</td>
  </td>
</table>

CSS

.name {
  max-width: 80px;
  min-width: 80px;
}

Ini akan memaksa kolom pertama menjadi lebar 80px. Biasanya saya hanya menggunakan max-width tanpa min-width untuk mengatur teks yang terkadang terlalu panjang dari pembuatan tabel yang memiliki kolom super lebar yang sebagian besar kosong. Pertanyaan OP adalah tentang mengatur ke lebar tetap, karenanya kedua aturan itu bersama-sama. Di banyak browserwidth:80px; di CSS diabaikan untuk kolom tabel. Menyetel lebar di dalam HTML memang berhasil, tetapi bukan cara yang harus Anda lakukan.

Saya akan merekomendasikan menggunakan aturan lebar min dan maks, dan tidak menyetelnya sama melainkan menetapkan rentang. Dengan cara ini tabel dapat melakukan tugasnya, tetapi Anda dapat memberikan beberapa petunjuk tentang apa yang harus dilakukan dengan konten yang terlalu panjang.

Jika saya ingin menjaga teks agar tidak membungkus dan meningkatkan tinggi baris - tetapi masih memungkinkan pengguna untuk melihat teks lengkap, saya gunakan white-space: nowrap;pada aturan utama, lalu terapkan aturan hover yang menghapus aturan lebar dan sekarang sehingga pengguna dapat melihat konten lengkap saat mereka mengarahkan mouse ke atasnya. Sesuatu seperti ini:

CSS

.name {
  max-width: 80px;
  white-space: nowrap;
  overflow: hidden;
}
.name:hover {
  max-width: none;
  white-space: normal;
  overflow:auto;
}

Itu hanya tergantung pada apa yang ingin Anda capai. Saya harap ini membantu seseorang. PS Sebagai tambahan, untuk iOS ada perbaikan untuk hover tidak berfungsi - lihat CSS Hover Tidak Berfungsi di iOS Safari dan Chrome

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.