39 Stimmen

CSS horizontale Tabelle Zellabstand: wie?

Hoffentlich ist das eine einfache Sache, aber ich habe keine Lösung gefunden. Ich möchte in einer Tabelle Leerzeichen zwischen die Spalten setzen.

Beispiel

| Cell |<- space ->| Cell |<- space ->| Cell |

Ein wichtiger Punkt ist, dass ich keinen Abstand an den Rändern haben möchte. Es gibt eine Eigenschaft border-spacing, aber sie wird im IE (6 oder 7) nicht unterstützt, so dass das nicht gut ist. Es setzt auch Raum an den Rändern.

Das Beste, was mir eingefallen ist, ist, padded-right: 10px auf meine Tabellenzellen zu setzen und eine Klasse zur letzten Zelle hinzuzufügen, um das Padding zu entfernen. Dies ist weniger als ideal, weil der zusätzliche Raum ist Teil der Zelle nicht außerhalb davon. Ich schätze, Sie könnten das gleiche mit einem transparenten Rahmen tun?

Ich habe auch versucht, jQuery zu verwenden:

$(function() {
  $("table > tbody > tr:not(:last-child").addClass("right-padding");
});

aber selbst bei Tabellen, die nur ~100 Zeilen groß sind, dauerte dies in einigen Fällen 200-400 ms, was zu langsam ist.

Jede Hilfe ist willkommen.

Gracias

Für diejenigen, die Spalten vorschlagen, funktionieren sie nicht. Versuchen Sie dies:

<html>
<head>
  <title>Layout</title>
  <style type="text/css">
    table { border: 1px solid black; }
    td { background: yellow; }
  </style>
</head>
<body>
<table>
<col style="padding-right: 30px;">
<col style="padding-right: 30px;">
<col>
<tr>
  <td>1</td>
  <td>2</td>
  <td>3</td>
</tr>
<tr>
  <td>4</td>
  <td>5</td>
  <td>6</td>
</tr>
<tr>
  <td>7</td>
  <td>8</td>
  <td>9</td>
</tr>
</table>
</body>
</html>

0 Stimmen

Ihr "Spalten"-Beispiel funktioniert für mich perfekt!

0 Stimmen

Welcher Browser? Auf Firefox für mich Firebug zeigt die Spalten größer als die Tabelle, aber die Tabelle Zellen sind nicht tatsächlich Größe geändert (dh die Spalten nach Firebug über die Tabelle erstrecken).

0 Stimmen

Chrome funktioniert nicht. IE hingegen schon. Seltsam

22voto

Josh Stodola Punkte 79569

Wie wäre es, wenn Sie jedem Tisch Zelle einen transparenten Rand? Ich bin mir ziemlich sicher, dass dies für Sie tun wird...

table td {
  border:solid 5x transparent;
}

Und Sie können es nur anwenden Horizontal etwa so...

table td {
  border-left:solid 10px transparent;
}
table td:first-child {
  border-left:0;
}

Hier ist eine vollständige Arbeitsdemo von dem, was Sie, wie ich glaube, zu erreichen versuchen...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>
  <head>
    <title>Layout</title>
    <style type="text/css">
      table {
        border: 1px solid black;
      }

      table td {
        background: yellow;
        border-left:solid 10px transparent;
      }

     table td:first-child {
       border-left:0;
     }
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
      </tr>
      <tr>
        <td>4</td>
        <td>5</td>
        <td>6</td>
      </tr>
      <tr>
        <td>7</td>
        <td>8</td>
        <td>9</td>
      </tr>
    </table>
  </body>
</html>

Ich glaube nicht, dass der IE6 das CSS :first-child unterstützt, daher hier ein Workaround dafür...

<!–-[if IE 6]>
<style type="text/css">
  table td {
    border-left: expression(this.previousSibling == null ? '0' : 'solid 5px transparent');
  }
</style>
<![endif]-->

0 Stimmen

:first-child ist nicht gerade weit verbreitet in CSS

0 Stimmen

Das ist mir klar. Es geht darum, die beste Lösung für die jeweiligen Anforderungen zu finden.

0 Stimmen

Iirc, IE6 unterstützt keine transparenten Ränder... so, es wird als schwarz gerendert.

12voto

Lukas Punkte 121

Es ist vielleicht das, wonach Sie suchen:

Sie können zwei Werte verwenden: Der erste ist der horizontale, der zweite der vertikale Zellabstand.

<table style="border-spacing: 40px 10px;">

1 Stimmen

Großartig! Zwei Einschränkungen: Marge auf den ersten und letzten Abstand und Quirksmode impliziert möglicherweise nicht für IE7 und darunter funktionieren quirksmode.org/css/tables.html

0 Stimmen

Wenn nach diesem Stil der Abstand der ersten und/oder letzten Spalte ein Problem ist, können Sie die Tabelle in einen Container setzen div mit negativer linker und/oder rechter Seite margins .

0 Stimmen

Dies scheint bei Chrome ein wenig problematisch zu sein. In Firefox sieht es großartig aus.

9voto

Darko Z Punkte 37188

Versuchen Sie es mit col s

Beispiel

<table>
    <col style="padding-right:20px;" />
    <col style="padding-right:30px;" />
    <col />
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</table>

cols unterstützen auch Klassen :)

Ich hoffe, das hilft

Darko

EDIT: Zur Klärung einer col ist ein Element, das am Anfang der Tabelle deklariert wird, um ganze Spalten zu beeinflussen. Das erste col-Element beeinflusst die erste Spalte, das zweite col-Element die zweite Spalte und so weiter. Sie können in Spaltengruppen gruppiert werden, wenn Sie mehreren Spalten denselben Stil zuweisen möchten.

EDIT2: Nach weiteren Recherchen hat sich herausgestellt, dass die einzigen zuverlässigen Stile, die man auf einer col Element sind:

  • Grenze
  • Hintergrund
  • Breite
  • Sichtbarkeit

Kein Rand oder Polsterung. Mist! Könnte das explizite Festlegen der Spaltenbreite Ihr Problem lösen?

2voto

Bayard Randel Punkte 9592

Sie könnten auch eine Reihe von Divs mit fester Breite verwenden, die mit Rändern nach links verschoben werden. Dies könnte Ihnen etwas mehr Kontrolle über das Styling der Elemente geben.

.row div {
     margin-right: 10px;
     float: left;
     width: 50px;
}

    <div class="row">
        <div>Cell One</div>
        <div>Cell Two</div>
        <div>Cell Three</div>
    </div>

0 Stimmen

Errr.. wir befürworten die Verwendung von divs auch für tabellarische Daten jetzt?

0 Stimmen

Nein, aber der Auftraggeber scheint Schwierigkeiten zu haben, das gewünschte Styling mit dem Tabellenelement zu erreichen. Tabellen sind sicherlich am besten für tabellarische Daten geeignet.

2voto

Timo Punkte 21

Joshs Antwort funktioniert nicht, wenn Sie, wie ich, bereits Ränder um Ihre Zellen haben.

Ich habe das Problem gelöst, indem ich die gesamte Tabelle leicht nach links verschoben habe, indem ich "position: relative; left: -10px" verwendet habe. Ich kombinierte dies mit Cellspacing in der Tabelle.

<div id='sandbox'>
    <table cellspacing='10'>
          <tr>
                <td class='smoothBox'>
                    ...
                </td>
                <td class='smoothBox'>
                    ...
                </td>
          </tr>
    </table>
</div>

und das css:

#sandbox {
    float: left;
    position: relative; /* move the whole sandbox */
    left: -11px;        /* slightly to the left */
    width: 950px;
    margin-top: 0px;
    padding: 1px;
    text-align: left;
}
#sandbox table {
    float: left;
    width: 100%;
}
#sandbox td {
    width: 300px;
    vertical-align: top;
}

Das ist es, was bei mir funktioniert, ich hoffe, es hilft auch Ihnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X