如何将文本旋转90度,并根据html中的文本调整单元格大小

lat*_*ata 70 html css html5 html-table

假设我有一些行和列的表,所以我想在单元格中旋转文本,如下所示
: 在此输入图像描述

问题是当我使用样式旋转文本时:

#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 */
Run Code Online (Sandbox Code Playgroud)

这一切都搞砸了

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Dan*_*mms 60

你可以通过将旋转CSS应用于内部元素,然后调整元素的高度以匹配其宽度,因为元素被旋转以适应它<td>.

还要确保将您更改id #rotate为班级,因为您有多个班级.

一个4x3表,第一列中的标题旋转90度

$(document).ready(function() {
  $('.rotate').css('height', $('.rotate').width());
});
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

纯JavaScript中的上述内容如下:

的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';
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这适用于短文本,但是当输入更长的文本时,`td`将在宽度上增长,并且无法缩小它:(尽管对于工作案例而言 (11认同)
  • 现在尝试使列更大,并使文本居中 - 并且booom - 布局在你的脸上爆炸!即使在2015年,您仍然必须通过为垂直文本编写通用图像处理程序来做到这一点......这很荒谬.这不应该那么难.它应该像<span style ="text-direction:upside-down; font-weight:bold; font-size:10px;"一样简单 > lalala </ span>,它不是,因为任何愚蠢的原因. (6认同)

小智 36

Daniel Imms的答案在将CSS旋转应用于内部元素方面非常出色.但是,可以以不需要JavaScript并使用更长文本字符串的方式完成最终目标.

通常,在第一个表格列中包含垂直文本的完整原因是在一个较短的水平空间中放置一长行文本,并与高行内容(如您的示例中)或多行内容(我将使用在这个例子中使用).

在此输入图像描述

通过在父TD标签上使用".rotate"类,我们不仅可以旋转内部DIV,还可以在父TD标签上设置一些CSS属性,这将强制所有文本保留在一行上,保持宽度为1.5em.然后我们可以在内部DIV上使用一些负边距,以确保它很好地居中.

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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

使用此解决方案时要记住的一件事是,如果行(或跨越的行)的高度比第一列中的垂直文本短,则它无法正常工作.如果您跨越多行或者您有很多内容创建高行,则效果最佳.

jsFiddle玩这个玩得开心.


18C*_*18C 35

没有计算高度.严格的CSS和HTML.<span/>仅适用于Chrome,因为Chrome无法更改文字方向<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;
}
Run Code Online (Sandbox Code Playgroud)
<table>
  <tr>
    <th><span>Rotated text by 90 deg.</span></th>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

  • 这是非常狡猾和非常健壮的。好主意,应该是公认的答案 - 没有 JS,没有特殊的宽度、高度、边距等技巧 - 真的很好。 (4认同)
  • 看起来 `sideways-lr` 不需要旋转 180 度 hack,但目前只有 *Firefox* 支持它。 (3认同)