Angenommen, ich habe eine Tabelle mit einigen Zeilen und Spalten, also möchte ich Text in Zellen wie folgt drehen
:
Problem ist, wenn ich Text mit Stil drehen:
#rotate {
-moz-transform: rotate(-90.0deg); /* FF3.5+ */
-o-transform: rotate(-90.0deg); /* Opera 10.5 */
-webkit-transform: rotate(-90.0deg); /* Saf3.1+, Chrome */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083); /* IE6,IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083)"; /* IE8 */
es wird alles so durcheinander gebracht
HTML Quelltext:
<table cellpadding="0" cellspacing="0" align="center">
<tr>
<td id='rotate'>10kg</td>
<td >B</td>
<td >C</td>
<td>D</td>
<td>E</td>
</tr>
<tr>
<td id='rotate'>20kg</td>
<td>G</td>
<td>H</td>
<td>I</td>
<td>J</td>
</tr>
<tr>
<td id='rotate'>30kg</td>
<td>L</td>
<td>M</td>
<td>N</td>
<td>O</td>
</tr>
</table>
CSS:
<style type="text/css">
td {
border-collapse:collapse;
border: 1px black solid;
}
tr:nth-of-type(5) td:nth-of-type(1) {
visibility: hidden;
}
#rotate {
-moz-transform: rotate(-90.0deg); /* FF3.5+ */
-o-transform: rotate(-90.0deg); /* Opera 10.5 */
-webkit-transform: rotate(-90.0deg); /* Saf3.1+, Chrome */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083); /* IE6,IE7 */
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083)"; /* IE8 */
}
</style>
css
html
html-table
lata
quelle
quelle
Antworten:
Sie können dies tun, indem Sie Ihr rotierendes CSS auf ein inneres Element anwenden und dann die Höhe des Elements an seine Breite anpassen, da das Element gedreht wurde, um es in das zu passen
<td>
.Stellen Sie außerdem sicher, dass Sie Ihre
id
#rotate
Klasse ändern , da Sie mehrere haben.$(document).ready(function() { $('.rotate').css('height', $('.rotate').width()); });
td { border-collapse: collapse; border: 1px black solid; } tr:nth-of-type(5) td:nth-of-type(1) { visibility: hidden; } .rotate { /* FF3.5+ */ -moz-transform: rotate(-90.0deg); /* Opera 10.5 */ -o-transform: rotate(-90.0deg); /* Saf3.1+, Chrome */ -webkit-transform: rotate(-90.0deg); /* IE6,IE7 */ filter: progid: DXImageTransform.Microsoft.BasicImage(rotation=0.083); /* IE8 */ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083)"; /* Standard */ transform: rotate(-90.0deg); }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table cellpadding="0" cellspacing="0" align="center"> <tr> <td> <div class='rotate'>10kg</div> </td> <td>B</td> <td>C</td> <td>D</td> <td>E</td> </tr> <tr> <td> <div class='rotate'>20kg</div> </td> <td>G</td> <td>H</td> <td>I</td> <td>J</td> </tr> <tr> <td> <div class='rotate'>30kg</div> </td> <td>L</td> <td>M</td> <td>N</td> <td>O</td> </tr> </table>
JavaScript
Das Äquivalent zu dem oben genannten in reinem JavaScript lautet wie folgt:
jsFiddle
window.addEventListener('load', function () { var rotates = document.getElementsByClassName('rotate'); for (var i = 0; i < rotates.length; i++) { rotates[i].style.height = rotates[i].offsetWidth + 'px'; } });
quelle
td
wird die Breite größer und es gibt keine Möglichkeit, ihn zu verkleinern :( +1 obwohl für den Arbeitsfallmax-width
hilft beispielsweise beim Testenmax-width: 1em
in Chrome - aber die Zellenbreite ist nur eines der Probleme, die bei längerem Text auftreten. Mindestens (1) Wortbruch und (2) Positionierung / Ausrichtung kommen in den Sinn. (1) kann mit nicht unterbrechenden Zeichen und (2) mit relativer Positionierung anstelle von Textausrichtung unterstützt werden. wenn die Tabelle / Zelle etwas statisch ist. Das Drehen ist dennoch alles andere als ideal, kann aber in begrenzten Fällen nützlich sein.Ohne Höhe zu berechnen. Strenges CSS und HTML.
<span/>
Nur für Chrome, da Chrome die Textrichtung für nicht ändern kann<th/>
.th { vertical-align: bottom; text-align: center; } th span { -ms-writing-mode: tb-rl; -webkit-writing-mode: vertical-rl; writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; }
<table> <tr> <th><span>Rotated text by 90 deg.</span></th> </tr> </table>
quelle
th span{display:table; border-spacin:0; margin-left:...}
, um Anzeigeunterschiede zwischen IE11, Firefox und Chrome zu vermeiden.sideways-lr
als würde der rotierende 180-Grad-Hack nicht benötigt, aber nur Firefox unterstützt ihn derzeit .Die Antwort von Daniel Imms ist hervorragend, wenn es darum geht, Ihre CSS-Rotation auf ein inneres Element anzuwenden. Es ist jedoch möglich, das Endziel auf eine Weise zu erreichen, die kein JavaScript erfordert und mit längeren Textzeichenfolgen arbeitet .
Normalerweise besteht der ganze Grund für vertikalen Text in der ersten Tabellenspalte darin, eine lange Textzeile in einen kurzen horizontalen Bereich einzupassen und neben hohen Inhaltszeilen (wie in Ihrem Beispiel) oder mehreren Inhaltszeilen (wie ich es tun werde) zu stehen in diesem Beispiel verwenden).
Durch die Verwendung der Klasse ".rotate" für das übergeordnete TD-Tag können wir nicht nur das innere DIV drehen, sondern auch einige CSS-Eigenschaften für das übergeordnete TD-Tag festlegen, die den gesamten Text dazu zwingen, in einer Zeile und zu bleiben Halten Sie die Breite auf 1,5 em. Dann können wir einige negative Ränder auf dem inneren DIV verwenden, um sicherzustellen, dass es gut zentriert ist.
td { border: 1px black solid; padding: 5px; } .rotate { text-align: center; white-space: nowrap; vertical-align: middle; width: 1.5em; } .rotate div { -moz-transform: rotate(-90.0deg); /* FF3.5+ */ -o-transform: rotate(-90.0deg); /* Opera 10.5 */ -webkit-transform: rotate(-90.0deg); /* Saf3.1+, Chrome */ filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083); /* IE6,IE7 */ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083)"; /* IE8 */ margin-left: -10em; margin-right: -10em; }
<table cellpadding="0" cellspacing="0" align="center"> <tr> <td class='rotate' rowspan="4"><div>10 kilograms</div></td> <td>B</td> <td>C</td> <td>D</td> <td>E</td> </tr> <tr> <td>G</td> <td>H</td> <td>I</td> <td>J</td> </tr> <tr> <td>L</td> <td>M</td> <td>N</td> <td>O</td> </tr> <tr> <td>Q</td> <td>R</td> <td>S</td> <td>T</td> </tr> <tr> <td class='rotate' rowspan="4"><div>20 kilograms</div></td> <td>B</td> <td>C</td> <td>D</td> <td>E</td> </tr> <tr> <td>G</td> <td>H</td> <td>I</td> <td>J</td> </tr> <tr> <td>L</td> <td>M</td> <td>N</td> <td>O</td> </tr> <tr> <td>Q</td> <td>R</td> <td>S</td> <td>T</td> </tr> <tr> <td class='rotate' rowspan="4"><div>30 kilograms</div></td> <td>B</td> <td>C</td> <td>D</td> <td>E</td> </tr> <tr> <td>G</td> <td>H</td> <td>I</td> <td>J</td> </tr> <tr> <td>L</td> <td>M</td> <td>N</td> <td>O</td> </tr> <tr> <td>Q</td> <td>R</td> <td>S</td> <td>T</td> </tr> </table>
Bei dieser Lösung ist zu beachten, dass sie nicht gut funktioniert, wenn die Höhe der Zeile (oder der übergreifenden Zeilen) kürzer als der vertikale Text in der ersten Spalte ist . Dies funktioniert am besten, wenn Sie mehrere Zeilen umfassen oder wenn Sie viel Inhalt haben, um große Zeilen zu erstellen.
Viel Spaß beim Herumspielen auf jsFiddle .
quelle
margin-left
undmargin-right
-Werte von-10em
auf-100em
erhöht, um auf der sicheren Seite zu sein. Wenn Ihre nicht gedrehte Textbreite überschreitet20em
, beginnt sich das Layout zu ändern. OTOH, die Textbreite200em
ist viel zu groß, um sie um -90 Grad gedreht zu lesen. Daher sollte dies ausreichen, um zu vermeiden, dass dieses Problem auftritt.overflow: hidden
die gedrehte hinzugefügttd
.Obwohl ich dachte, dass diese Antworten für mich funktioniert haben könnten, hatte ich leider Probleme mit einer Lösung, da ich Tabellen in reaktionsfähigen Tabellen verwende - mit denen das Überlauf-x gespielt wird.
Schauen Sie sich in diesem Sinne diesen Link an, um einen saubereren Weg zu finden, der keine seltsamen Probleme mit dem Breitenüberlauf aufweist. Am Ende hat es bei mir funktioniert und war sehr einfach zu implementieren.
https://css-tricks.com/rotated-table-column-headers/
quelle