CSS Zell Margin
-
23-08-2019 - |
Frage
In meinem HTML-Dokument, habe ich eine Tabelle mit zwei Spalten und mehr Zeilen. Wie kann ich den Raum zwischen der ersten und der zweiten Spalte mit CSS erhöhen? Ich habe versucht, die Anwendung "margin-right: 10px;" zu jedem der Zellen auf der linken Seite, aber ohne Wirkung.
Lösung
Wenden Sie diese auf Ihrem ersten <td>
:
padding-right:10px;
HTML-Beispiel:
<table>
<tr>
<td style="padding-right:10px">data</td>
<td>more data</td>
</tr>
</table>
Andere Tipps
Ein Wort der Warnung: wenn padding-right
könnte Ihr spezielles (visuell) Problem lösen, ist es nicht der richtige Weg, zwischen Tabellenzellen hinzufügen Abstand. Was padding-right
tut für eine Zelle ist ähnlich zu dem, was es tut, für die meisten anderen Elemente: es Raum fügt innerhalb der Zelle. Wenn die Zellen nicht über eine Grenze oder Hintergrundfarbe oder etwas anderes haben, dass das Spiel verschenkt, kann dies den Effekt der Einstellung der Raum zwischen den Zellen nachahmen, aber sonst nicht.
Als jemand erwähnt, Randspezifikationen ignoriert werden für Tabellenzellen:
CSS 2.1 Spezifikation - Tabellen - Visuelle Gestaltung von Tabelleninhalten
Interne Tabellenelemente erzeugen rechteckige Kästen mit Inhalt und Grenzen. Die Zellen haben auch Polsterung. Interne Tabellenelemente haben keine Margen.
Was ist die „richtige“ Art und Weise dann? Wenn Sie schauen, um das cellspacing
Attribut der Tabelle zu ersetzen, dann border-spacing
(mit border-collapse
deaktiviert) ist ein Ersatz. wenn pro-Zelle „Ränder“ sind jedoch erforderlich, bin ich nicht sicher, wie das korrekt mit CSS erreicht werden. Der einzige Hack, den ich denken kann, ist padding
zu verwenden, wie oben, vermeiden Sie jedes Styling der Zellen (Hintergrundfarben, Ränder, etc.) und stattdessen Behälter DIVs innerhalb der Zellen verwenden, um solches Styling zu implementieren.
Ich bin kein CSS-Experte, so konnte ich gut in der oben falsch sein (was wäre toll zu wissen! Ich würde auch eine Tabellenzelle Marge CSS-Lösung wie).
Cheers!
Wenn Sie nicht padding verwenden können (zB Sie Grenzen in td haben) versuchen, diese
table {
border-collapse: separate;
border-spacing: 2px;
}
Ich weiß, das ziemlich spät, aber der Ordnung halber können Sie auch CSS-Selektoren, dies zu tun (die Notwendigkeit für Inline-Styles zu eliminieren.) Diese CSS padding auf die erste Spalte jeder Zeile gilt:
table > tr > td:first-child { padding-right:10px }
Und dies würde Ihr HTML, CSS sans sein:
<table><tr><td>data</td><td>more data</td></tr></table>
Dies ermöglicht eine viel elegantere Markup, vor allem in Fällen, in denen Sie benötigen viele spezifische Formatierung mit CSS zu tun.
Marge leider nicht auf einzelne Zellen nicht funktioniert, aber Sie zusätzliche Spalten zwischen den beiden Zellen hinzufügen, könnten Sie ein Leerzeichen setzen wollen zwischen ... weitere Option ist eine gemeinsame Grenze mit der gleichen Farbe wie der Hintergrund zu verwenden ...
Sie können einfach tun:
<html>
<table>
<tr>
<td>one</td>
<td width="10px"></td>
<td>two</td>
</tr>
</table>
</html>
No CSS erforderlich ist :) Diese 10px Ihr Platz ist.
Versuchen padding-right
. Sie sind nicht zu setzen margin
die zwischen den Zellen erlaubt.
<table>
<tr>
<td style="padding-right: 10px;">one</td>
<td>two</td>
</tr>
</table>
Mit border-collapse:. Getrennt; hat für mich nicht, weil ich nur eine Marge in-zwischen den Tabellenzellen nicht auf den Seiten des Tisches müssen
Ich kam mit der nächsten Lösung:
- CSS
.tableDiv{
display: table;
}
.cellSeperator {
display: table-cell;
width: 20px;
}
.cell1 {
display: table-cell;
width: 200px;
}
.cell2 {
display: table-cell;
width: 50px;
}
- HTML
<div class="tableDiv">
<div class="cell1"></div>
<div class="cellSeperator"></div>
<div class="cell2"></div>
</div>
Diese Lösung Arbeit für td
ist, die sowohl border
und padding
für Styling brauchen.
(Getestet auf Chrome 32, IE 11, Firefox 25)
CSS:
table {border-collapse: separate; border-spacing:0; } /* separate needed */
td { display: inline-block; width: 33% } /* Firefox need inline-block + width */
td { position: relative } /* needed to make td move */
td { left: 10px; } /* push all 10px */
td:first-child { left: 0px; } /* move back first 10px */
td:nth-child(3) { left: 20px; } /* push 3:rd another extra 10px */
/* to support older browsers we need a class on the td's we want to push
td.col1 { left: 0px; }
td.col2 { left: 10px; }
td.col3 { left: 20px; }
*/
HTML:
<table>
<tr>
<td class='col1'>Player</td>
<td class='col2'>Result</td>
<td class='col3'>Average</td>
</tr>
</table>
Aktualisiert 2016
Firefox unterstützt jetzt ohne inline-block
und einen Satz width
table {border-collapse: separate; border-spacing:0; }
td { position: relative; padding: 5px; }
td { left: 10px; }
td:first-child { left: 0px; }
td:nth-child(3) { left: 20px; }
td { border: 1px solid gray; }
/* CSS table */
.table {display: table; }
.tr { display: table-row; }
.td { display: table-cell; }
.table { border-collapse: separate; border-spacing:0; }
.td { position: relative; padding: 5px; }
.td { left: 10px; }
.td:first-child { left: 0px; }
.td:nth-child(3) { left: 20px; }
.td { border: 1px solid gray; }
<table>
<tr>
<td>Player</td>
<td>Result</td>
<td>Average</td>
</tr>
</table>
<div class="table">
<div class="tr">
<div class="td">Player</div>
<div class="td">Result</div>
<div class="td">Average</div>
</div>
</div>
Sie können keine einzelnen Spalten in einer Zelle auf diese Weise heraus. Meiner Meinung nach ist die beste Wahl ist eine style='padding-left:10px'
auf der zweiten Spalte zu addieren und die Stile auf einem internen div oder Element anwenden. Auf diese Weise kann die Illusion eines größeren Raumes erreichen kann.
Wenn Sie die Kontrolle über die Breite des Tisches haben, legen Sie ein padding-left auf allen Tabellenzellen und legen Sie eine negative margin-left auf die gesamte Tabelle.
table {
margin-left: -20px;
width: 720px;
}
table td {
padding-left: 20px;
}
Beachten Sie, muss die Breite der Tabelle, die die Polsterung / Randbreite erweitert. Unter Verwendung des oben als Beispiel die visuelle Breite der Tabelle wird 700px.
Dies ist nicht die beste Lösung, wenn Sie Grenzen auf Tabellenzellen verwenden.
SOLUTION
Ich fand den besten Weg zur Lösung dieses Problems eine Kombination von Versuch und Irrtum war und zu lesen, was vor mir geschrieben:
Wie man sehen kann ich einige ziemlich knifflige Sachen passiert haben ... aber die Haupt Kicker dieses gut zu suchen bekommen sind:
Übergeordnetes Element (UL): border-collapse: getrennt; Grenzabstand: .25em; margin-left: -.25em;
Child-Elemente (LI): display: table-Zelle; vertical-align: middle;
HTML
<ul>
<li><span class="large">3</span>yr</li>
<li>in<br>stall</li>
<li><span class="large">9</span>x<span class="large">5</span></li>
<li>on<br>site</li>
<li>globe</li>
<li>back<br>to hp</li>
</ul>
CSS
ul { border: none !important; border-collapse: separate; border-spacing: .25em; margin: 0 0 0 -.25em; }
li { background: #767676 !important; display: table-cell; vertical-align: middle; position: relative; border-radius: 5px 0; text-align: center; color: white; padding: 0 !important; font-size: .65em; width: 4em; height: 3em; padding: .25em !important; line-height: .9; text-transform: uppercase; }
Nach Cians Lösung, die eine Grenze anstelle einer Marge von Einstellung, entdeckte ich Sie Grenze Farbe transparent einstellen können mit der Farbe entsprechen dem Hintergrund zu vermeiden. Arbeitet in FF17, IE9, Chrome v23. Scheint wie eine anständige Lösung zur Verfügung gestellt Sie auch nicht eine tatsächliche Grenze müssen.
<!DOCTYPE html>
<html>
<head>
<style>
table{
border-spacing: 16px 4px;
}
td {
border: 1px solid black;
}
</style>
</head>
<body>
<table style="width:100%">
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Eve</td>
<td>Jackson</td>
<td>94</td>
</tr>
<tr>
<td>John</td>
<td>Doe</td>
<td>80</td>
</tr>
</table>
</body>
</html>
padding Verwendung ist nicht korrekt Art und Weise tun, kann es das Aussehen ändern, aber es ist nicht das, was Sie wollten. Dies kann Ihr Problem lösen.
Sie können beide verwenden:
padding-right:10px;
padding-right:10%;
Aber es ist besser zu verwenden, um mit % .
Wenn Polsterung ist nicht für Sie arbeiten, um eine andere Arbeit zusätzliche Spalten hinzufügen und eine Marge über Breite mit <colgroup>
eingestellt. Keine der Polsterung Lösungen, die oben waren für mich arbeiten, wie ich versuche, der Zelle Grenze selbst einen Spielraum zu geben, und das ist, was das Problem am Ende gelöst:
<table>
<colgroup>
<col>
<col width="20px">
<col>
</colgroup>
<tr>
<td>data</td>
<td></td>
<td>more data</td>
</tr>
</table>
Style der Grenzen der Tabellenzellen. N-te-Kind, so dass die zweite und dritte Spalte erscheint eine einzelne Spalte sein
table tr td:nth-child(2) { border: 1px solid black; border-right:0; }
table tr td:nth-child(3) { border: 1px solid black; border-left:0; }