Bessere Möglichkeit, Text in einer HTML-Tabelle rechtsbündig auszurichten

Lesezeit: 9 Minuten

Palanis Benutzeravatar
Palani

Ich habe eine HTML-Tabelle mit einer großen Anzahl von Zeilen und muss eine Spalte rechtsbündig ausrichten.

Ich kenne folgende Wege,

<tr><td>..</td><td>..</td><td align='right'>10.00</td><tr>

Und

<tr><td>..</td><td>..</td><td class="right-align-class">10.00</td><tr>

Bei beiden Methoden muss ich den Parameter align oder class bei jedem wiederholen <tr> Schild. (Wenn es 1000 Zeilen gibt, muss ich setzen ausrichten=’richtig’ oder class=”right-align-class” 1000 mal.)

Gibt es eine effiziente Möglichkeit, dies zu tun? *Gibt es eine direkte Möglichkeit zu sagen, die dritte Spalte in allen Zeilen rechts ausrichten?

  • Ich schlage vor, was auch immer das HTML generiert, sollte der Ausgabe die richtige Ausrichtung hinzufügen, damit Sie es nicht 1000 Mal eingeben müssen. Wenn Sie tausend Zeilen in einer Tabelle haben, sollte sie zunächst programmgesteuert generiert werden. Das bedeutet, dass Sie nur einmal die Ausrichtung in der Vorlage oder im Code, der das HTML generiert, ändern müssen. Das ist nicht gerade eine Antwort auf deine Frage. Aber ich weiß, dass ich oft feststelle, dass ich etwas mache, das nicht ganz so ist wie andere, was mich dazu bringt, Fragen zu stellen, die ich nicht einmal hätte, wenn ich die Dinge eine Schicht tiefer anders machen würde. Schauen Sie eine Schicht tiefer

    – Jason

    22. Januar 2019 um 18:55 Uhr

Benutzeravatar von Matt Howell
Matt Howell

Aktualisiert (nach über 10 Jahren!): Ja! Mit der weit verbreiteten praktischen Browserunterstützung ist dies jetzt effizienter möglich, wenn Sie die verwenden nth-child Wähler.

HTML:

<table>
<tr>
<td>foo 1</td>
<td>bar 1</td>
<td>baz 1</td>
<td>bap 1</td>
</tr>
<tr>
<td>foo 2</td>
<td>bar 2</td>
<td>baz 2</td>
<td>bap 2</td>
</tr>
</table>

CSS:

table td { width: 20em; border: 1px solid black; }
table td:nth-child(3) { text-align: end; }

https://jsfiddle.net/mv83qszL/

Bisher war dies nicht möglich, da die Browserunterstützung insbesondere im Hinblick auf neuere CSS-Features inkonsistent und hit-or-miss war. Dies machte es unmöglich, elegantere, effizientere Lösungen zu verwenden – und erforderte viele sich wiederholende Markup- und Klassendefinitionen, um im gesamten Browserbereich der Zielgruppe konsistente Ergebnisse zu erzielen.

Sehen Sie sich den Bearbeitungsverlauf für die vorherige Version dieser Antwort an.

  • Warum wird das positiv bewertet? Er wiederholte einfach dieselbe Methode, von der das OP bereits wusste.

    – cdmckay

    26. August 2009 um 18:44 Uhr

  • Aber effizienter geht es nicht. Man muss jedem eine Klasse hinzufügen td ist der kompatibelste Weg, aber nicht der effizienteste. Der effizienteste Weg wäre die Verwendung von nth-child(3) Wähler.

    – cdmckay

    27. August 2009 um 3:11 Uhr

  • Es gibt auch die Sibling-Selector-Lösung, für die Sie nur eine Klasse zur Tabelle hinzufügen müssen und die von allen Browsern außer IE6 unterstützt wird. Das ist auch eine effizientere Lösung (insbesondere wenn der Code von Hand gepflegt wird).

    – cdmckay

    27. August 2009 um 15:32 Uhr

  • Wo sind all diese 10 % der Bevölkerung, die IE6 verwenden? Ich glaube nicht, dass ich jemals einen von ihnen getroffen habe.

    Benutzer1950164

    16. Januar 2014 um 23:37 Uhr

  • @MattHowell: Diese großartige Antwort sieht zeitkritisch und veraltet aus (Ihre Links widerlegen Ihren Text, die 40%-Zahl, die ein wichtiger Punkt in Ihrer Argumentation ist), könnten Sie sie aktualisieren?

    – Nikana Reklawyks

    21. Dezember 2015 um 12:19 Uhr


Benutzeravatar von cdmckay
cdmckay

Du könntest die verwenden nth-child Pseudoselektor. Zum Beispiel:

table.align-right-3rd-column td:nth-child(3)
{
  text-align: right;
}

Dann tun Sie in Ihrer Tabelle:

<table class="align-right-3rd-column">
  <tr>
    <td></td><td></td><td></td>
    ...
  </tr>
</table>

Leider funktioniert dies nur in Firefox 3.5. Wenn Ihre Tabelle jedoch nur drei Spalten hat, können Sie den Sibling-Selektor verwenden, der eine viel bessere Browserunterstützung bietet. So würde das Stylesheet aussehen:

table.align-right-3rd-column td + td + td
{
  text-align: right;
}

Dies stimmt mit jeder Spalte überein, der zwei andere Spalten vorangehen.

  • Leider keine sehr kompatible Lösung.

    – verzeihen

    26. August 2009 um 5:21 Uhr

  • @cdmckay: Eigentlich sollte es in den neuesten Versionen von Firefox, Opera, Chrome und Safari funktionieren. Keine IE-Unterstützung.

    – Verärgerte Ziege

    26. August 2009 um 12:08 Uhr

  • Würde einer der Downvoter sagen, was an dieser Antwort falsch ist?

    – cdmckay

    27. August 2009 um 3:14 Uhr

Benutzeravatar von DisgruntledGoat
Verärgerte Ziege

Wenn es immer die dritte Spalte ist, können Sie diese verwenden (vorausgesetzt, die Tabellenklasse “Produkte”). Es ist jedoch etwas hacky und nicht robust, wenn Sie eine neue Spalte hinzufügen.

table.products td+td+td {
  text-align: right;
}
table.products td,
table.products td+td+td+td {
  text-align: left;
}

Aber ehrlich gesagt ist die beste Idee, eine Klasse für jede Zelle zu verwenden. Du kannst den … benutzen col -Element, um die Breite, den Rand, den Hintergrund oder die Sichtbarkeit einer Spalte festzulegen, aber keine anderen Eigenschaften. Gründe werden hier diskutiert.

  • funktioniert auch nicht, wenn Sie die Variable colspan (oder eine beliebige rowspan) für einige der vorhergehenden Spalten verwenden

    – Benutzer340140

    27. August 2013 um 2:28 Uhr

Benutzeravatar von John Gietzen
Johannes Gietzen

Blick durch Ihre genau Frage an Ihre impliziert Problem:

Schritt 1: Verwenden Sie die Klasse wie beschrieben (oder verwenden Sie ggf. Inline-Stile).

Schritt 2: Aktivieren Sie die GZIP-Komprimierung.

Das wirkt Wunder 😉

Auf diese Weise entfernt GZIP die Redundanz für Sie (jedenfalls über das Kabel) und Ihre Quelle bleibt standardkonform.

Benutzeravatar von Jan Zich
Jan Zich

Vor einigen Jahren (im IE nur wenige Tage) benutzte ich die <col align="right"> Tag, aber ich habe es gerade getestet und es scheint eine reine IE-Funktion zu sein:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Test</title>
</head>
<body>
    <table width="100%" border="1">
        <col align="left" />
        <col align="left" />
        <col align="right" />
        <tr>
            <th>ISBN</th>
            <th>Title</th>
            <th>Price</th>
        </tr>
        <tr>
            <td>3476896</td>
            <td>My first HTML</td>
            <td>$53</td>
        </tr>
    </table>
</body>
</html>

Der Ausschnitt ist entnommen www.w3schools.com. Natürlich sollte es nicht verwendet werden (es sei denn, Sie zielen aus irgendeinem Grund wirklich nur auf die IE-Rendering-Engine ab), aber ich dachte, es wäre interessant, es zu erwähnen.

Bearbeiten:

Insgesamt verstehe ich die Gründe für die Aufgabe dieses Tags nicht. Es scheint sehr nützlich zu sein (zumindest für manuelles HTML-Publishing).

  • Liest überhaupt jemand meine Antwort? Ich habe nicht gesagt, dass es im wirklichen Leben für eine echte Website verwendet werden sollte. Es war eine historische Bemerkung, und ich schlug vor, dies nur zu verwenden, wenn es auf die IE-Rendering-Engine abzielt (nicht unbedingt für Webseiten).

    – Jan Zich

    26. August 2009 um 15:03 Uhr

  • Firefox hat die Unterstützung in 3.5 nicht eingestellt; es hatte nie Unterstützung dafür.

    Ken

    26. August 2009 um 15:47 Uhr

  • Ich lese dies 12 Jahre später 🙂 Lebst du noch? Ich finde Ihre historische Anmerkung sehr wichtig, da heutzutage Standards die Semantik von Tabellenspalten nicht unterstützen, was Webdesigner dazu zwingt, das Design zu bastardisieren, also habe ich meiner Antwort weitere Anmerkungen zur Vergangenheit (und hoffentlich zur Zukunft) hinzugefügt.

    – Jan Turoň

    2. März 2021 um 22:48 Uhr


  • Jan Turoň: Wahrscheinlich nicht: “Zuletzt gesehen vor mehr als 7 Jahren”. Das bedeutet normalerweise ein aufgegebenes oder verlorenes Konto.

    – Peter Mortensen

    vor 9 Stunden


HTML5 hat die Col-Attribut-Funktionalität durcheinander gebracht …

Es ist wirklich uncool, dass HTML5 größtenteils veraltet ist col Attribute und fügte die Unterstützung für die nicht hinzu style Und class Attribute. Moderne Browser noch hält Unterstützung für seine width Attribut, aber nicht für andere. Die Breitenstütze wird wahrscheinlich so halten, wie sie verwendet wird Tabellenlayout Renderalgorithmus.

… was durch die Definition von CSS-Klassenreihen behoben werden kann …

Um eine ähnliche Funktionalität zu erreichen, ohne jede Zeile bearbeiten zu müssen, kann dies durch Definieren erreicht werden

.right-1 td:nth-child(1),
.right-2 td:nth-child(2),
.right-3 td:nth-child(3),
.right-4 td:nth-child(4),
.right-5 td:nth-child(5), ...
  { text-align: right; }

Dies kann mit Hilfe eines CSS-Präprozessors / -Generators eine einzelne Zeile sein, ist aber auch ohne CSS akzeptabel, da die meisten Webtabellen eine angemessene Anzahl von Spalten haben. Dann können Sie die dritte Spalte rechtsbündig ausrichten

<table class="right-3">
...
</table>

…aber es ist nur ein schlechter Hack 🙁

CSS-Klassen sollten die Semantik enthalten. Wenn sie bestimmte Stile implizieren (wie im obigen Beispiel), wird dies semantisch nur inline legalisiert style -Attribut, das HTML mit dem Design zusammenführt (CSS sollte es trennen). Das ist es, was Bootstrap-Stile tun, und das sollten Sie nach Möglichkeit vermeiden.

  • Liest überhaupt jemand meine Antwort? Ich habe nicht gesagt, dass es im wirklichen Leben für eine echte Website verwendet werden sollte. Es war eine historische Bemerkung, und ich schlug vor, dies nur zu verwenden, wenn es auf die IE-Rendering-Engine abzielt (nicht unbedingt für Webseiten).

    – Jan Zich

    26. August 2009 um 15:03 Uhr

  • Firefox hat die Unterstützung in 3.5 nicht eingestellt; es hatte nie Unterstützung dafür.

    Ken

    26. August 2009 um 15:47 Uhr

  • Ich lese dies 12 Jahre später 🙂 Lebst du noch? Ich finde Ihre historische Anmerkung sehr wichtig, da heutzutage Standards die Semantik von Tabellenspalten nicht unterstützen, was Webdesigner dazu zwingt, das Design zu bastardisieren, also habe ich meiner Antwort weitere Anmerkungen zur Vergangenheit (und hoffentlich zur Zukunft) hinzugefügt.

    – Jan Turoň

    2. März 2021 um 22:48 Uhr


  • Jan Turoň: Wahrscheinlich nicht: “Zuletzt gesehen vor mehr als 7 Jahren”. Das bedeutet normalerweise ein aufgegebenes oder verlorenes Konto.

    – Peter Mortensen

    vor 9 Stunden


Benutzeravatar von Chris
Chris

Der aktuelle Entwurf v CSS-Selektoren Level 4 gibt strukturelle Selektoren für Raster an. Wenn es implementiert ist, werden wir in der Lage sein, Dinge zu tun wie:

th.price,
th.price || td {
    text-align: right;
}

Natürlich hilft uns das heute nicht weiter – die anderen Antworten hier bieten dafür genügend praktische Ratschläge.

  • Wurde es umgesetzt?

    – Peter Mortensen

    vor 9 Stunden

1446020cookie-checkBessere Möglichkeit, Text in einer HTML-Tabelle rechtsbündig auszurichten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy