Bir HTML tablo satırına bir sınır verme, <tr>


92

O, bir tablo satırını sınır mümkün mü <tr>biri yerine, tek tek hücrelere kenarlık verme gitmek de <td>olduğu gibi,

<table cellpadding="0" cellspacing="0" width="100%" style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>

Bu, verilenin etrafında bir sınır verir, <tr>ancak tek tek hücrelerin etrafında bir sınır gerektirir.

<tr>Sadece tek seferde sınır verebilir miyiz ?

→ jsFiddle

Yanıtlar:


124

borderBir tröğe üzerinde özellikler ayarlayabilirsiniz , ancak CSS 2.1 spesifikasyonuna göre, bu tür özelliklerin tarayıcılarda varsayılan olma eğiliminde olan ayrılmış kenarlık modelinde hiçbir etkisi yoktur. Ref .: 17.6.1 Ayrılmış sınırlar modeli . ( Başlangıç değeri border-collapseolan separateCSS 2.1 göre ve bazı tarayıcılar da olarak ayarlamak varsayılan değer için table. Neyse net etkisi size sürece açıkça specifi neredeyse tüm tarayıcılarda sınır ayrılırsak olmasıdır collapse.)

Bu nedenle, daralan sınırları kullanmanız gerekir. Misal:

<style>
table { border-collapse: collapse; }
tr:nth-child(3) { border: solid thin; }
</style>

1
@Robert Siemer Bunun satırların etrafına bir sınır koyduğu doğru olsa da, aynı zamanda "border-collapse: collapse" gerektirir. Bu şekilde cellpadding özelliği kullanılarak sütunlar aralanamaz. Csmckelvey'in aşağıdaki yanıtında kullanılan anahat özelliği, tablonun görünümü üzerinde daha fazla kontrol sağlar ve tam olarak aynı amaca ulaşır. Hedefe ulaşmak için işlevselliği gereksiz yere sınırlandırdığı için bu kabul edilen cevap olmamalıdır.
me_

70

Kesinlikle! Sadece kullan

<tr style="outline: thin solid">

hangi sırayı seversin. İşte bir keman .

Tabii ki, insanların bahsettiği gibi, bunu bir kimlik, sınıf veya dilerseniz başka bir yolla yapabilirsiniz.


2
<tr> bir öğe değil bir kap olmalıdır, bu nedenle çocuğunu kendi stili aracılığıyla biçimlendirmek, işe yarasa bile anlambilim açısından doğru değildir.
Itay Gal

1
Google Chrome ve Internet Explorer, bir kenarlığın etrafında bir kenarlık gösterir <tr>ancak Mozilla Fire Fox bir kenarlık göstermez.
Minik

outlineBunun yerine kullanmayı deneyin border. Bu uyumluluğu düzeltmelidir. Yalnızca Chrome atm kullanıyorum, bu yüzden test edemiyorum.
takendarkk

4
Anahat sınır değildir.
Jukka K. Korpela

2
Tamamen anlaşılır. Bu site insanlara en iyi cevapları vermekle ilgili, temsilcimi değil :)
takendarkk

16

Evet. Cevabımı güncelledimDEMO

table td {
    border-top: thin solid; 
    border-bottom: thin solid;
}

table td:first-child {
     border-left: thin solid;
}

table td:last-child {
     border-right: thin solid;
}

Yalnızca bir tanesini biçimlendirmek <tr>istiyorsanız, bunu bir sınıfla yapabilirsiniz: İkinci DEMO


Görünüşe göre Internet Explorer beğenmiyor last-child(Desteklemiyor gibi görünüyor).
Minik

@Tiny Hangi IE sürümünü desteklemek istiyorsunuz? Sürüm 9+ ilk çocuğu ve son çocuğu destekler.
Itay Gal

Bu Internet Explorer 8, ancak endişelenmenize gerek yok :)
Minik

<tr> stilini değil, <td> stilini şekillendiriyorsunuz.
Robert Siemer

5

CSS sınıflarından yararlanın:

tr.border{
    outline: thin solid;
}

ve şu şekilde kullanın:

<tr class="border">...</tr>

2

Bir tr öğesindeki box-shadow özelliğini sınır için bir alt başlık olarak kullanabilirsiniz. Bir artı olarak, aynı öğe üzerindeki herhangi bir border-radius özelliği kutu gölgesine de uygulanacaktır.

box-shadow: 0px 0px 0px 1px rgb(0, 0, 0);

Bu, stil üzerinde olduğundan çok daha fazla kontrol sağlar outline. Daha yüksek bir cevap olmalı.
Jacob Stamm

1

Sol hücre:

style="border-style:solid;border-width: 1px 0px 1px 1px;"

orta hücre (ler):

style="border-style:solid;border-width: 1px 0px 1px 0px;"

sağ hücre:

style="border-style:solid;border-width: 1px 1px 1px 0px;"

1

<table cellpadding="0" cellspacing="0" width="100%" style="border: 1px;" rules="none">
    <tbody>
        <tr>
            <th style="width: 96px;">Column 1</th>
            <th style="width: 96px;">Column 2</th>
            <th style="width: 96px;">Column 3</th>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>

        <tr>
            <td style="border-left: thin solid; border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid;">&nbsp;</td>
            <td style="border-top: thin solid; border-bottom: thin solid; border-right: thin solid;">&nbsp;</td>
        </tr>

        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>


Cevabınıza yorum ekleyip neyi değiştirdiğinizi açıklar mısınız?
franiis

0

sınır aralığı ekleme: 0rem 0.5rem; hücreler arasında boşluk bırakmadan, altındaki her hücre (td, th) öğeleri için bir boşluk oluşturur

    table.app-table{
        border-collapse: separate;
        border-spacing: 0rem 0.5rem;
    }
    table.app-table thead tr.border-row the,
    table.app-table tbody tr.border-row td,
    table.app-table tbody tr.border-row th{
        border-top: 1px solid #EAEAEA;
        border-bottom: 1px solid #EAEAEA;
        vertical-align: middle;
        white-space: nowrap;
        font-size: 0.875rem;
    }

    table.app-table thead tr.border-row th:first-child,
    table.app-table tbody tr.border-row td:first-child{
        border-left: 1px solid #EAEAEA;
    }

    table.app-table thead tr.border-row th:last-child,
    table.app-table tbody tr.border-row td:last-child{
        border-right: 1px solid #EAEAEA;
    }

-2

Bununla uzun bir süre mücadele ettikten sonra, şaşırtıcı derecede basit cevabın, tablonun her satırını aynı sayıda hücreye doldurmak için tabloyu boş hücrelerle doldurmak olduğu sonucuna vardım (Colspan hesaba katılarak). Bilgisayar tarafından oluşturulan HTML ile bunu düzenlemek çok basittir ve karmaşık geçici çözümlerle mücadele etmeyi önler. Çizim aşağıdaki gibidir:

<h3>Table borders belong to cells, and aren't present if there is no cell</h3>
<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>


<h3>Simple solution, artificially insert empty cells</h3>

<table style="border:1px solid red; width:100%; border-collapse:collapse;">
    <tr style="border-top:1px solid darkblue;">
        <th>Col 1<th>Col 2<th>Col 3
    <tr style="border-top:1px solid darkblue;">
        <td>Col 1 only<td><td>
    <tr style="border-top:1px solid darkblue;">
        <td colspan=2>Col 1 2 only<td>
    <tr style="border-top:1px solid darkblue;">
        <td>1<td>2<td>3

</table>
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.