Supposons que j'ai un tableau avec quelques lignes et colonnes, donc je veux faire pivoter le texte dans des cellules quelque chose comme ça
:
le problème est quand je tourne le texte en utilisant le style:
#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 */
tout se foiré comme ça
code html:
<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>
Vous pouvez le faire en appliquant votre CSS CSS de rotation à un élément interne, puis en ajustant la hauteur de l'élément pour l'adapter à sa largeur car l'élément a été pivoté pour l'ajuster dans le <td>
.
Assurez-vous également de changer votre id
#rotate
en une classe puisque vous en avez plusieurs.
$(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
L'équivalent de ce qui précède en JavaScript pur est le suivant:
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';
}
});
Daniel Imms La réponse est excellente pour appliquer votre rotation CSS à un élément interne. Cependant, il est possible d'atteindre l'objectif final d'une manière qui ne nécessite pas JavaScript et fonctionne avec des chaînes de texte plus longues .
Généralement, la première colonne de tableau contient du texte vertical dans la première colonne de texte. Elle consiste à insérer une longue ligne de texte dans un espace horizontal court et à se placer à côté de lignes hautes de contenu (comme dans votre exemple) ou de plusieurs lignes de contenu utiliser dans cet exemple).
En utilisant la classe ".rotate" sur la balise parent TD, nous pouvons non seulement faire pivoter la DIV interne, mais également définir quelques propriétés CSS sur la balise parent TD forcera tout le texte à rester sur une ligne et à garder la largeur à 1.5em. Ensuite, nous pouvons utiliser des marges négatives sur la division interne pour s’assurer qu’elle se centre bien.
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>
Une chose à garder à l’esprit avec cette solution est qu’elle ne fonctionne pas bien si la hauteur de la ligne (ou des lignes fractionnées) est plus courte que le texte vertical de la première colonne . Cela fonctionne mieux si vous étendez plusieurs lignes ou si vous avez beaucoup de contenu créant des lignes hautes.
Amusez-vous à jouer avec cela sur jsFiddle .
Sans calculer la hauteur. CSS et HTML stricts. <span/>
uniquement pour Chrome, car chrome ne peut pas modifier l'orientation du texte pour <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>
Malheureusement, alors que je pensais que ces réponses avaient peut-être fonctionné pour moi, j'ai eu du mal à trouver une solution, car j'utilise des tables à l'intérieur de tables responsive - dans lesquelles le débordement-x est joué.
Alors, gardez cela à l’esprit, jetez un coup d’œil à ce lien pour trouver une façon plus propre, qui n’a pas les problèmes étranges de débordement de largeur. Cela a fonctionné pour moi à la fin et était très facile à mettre en œuvre.