表格单元格中旋转文本的垂直对齐方式

Posted

技术标签:

【中文标题】表格单元格中旋转文本的垂直对齐方式【英文标题】:Vertical alignment of rotated text in a table cell 【发布时间】:2014-05-25 00:45:39 【问题描述】:

我已旋转表格标题中的文本,并尝试将其与单元格底部对齐。垂直对齐不会改变任何东西,所以我将每个元素包装在一个 div 中,并试图让它以这种方式工作,但没有成功。

http://jsfiddle.net/pelagic/faLVN/有一个例子

html

<div id="galley">

<table >
<thead><tr>
  <th  rowspan="2" class="vertical-label"><div class="vheader">One</div></th>
  <th  rowspan="2" class="vertical-label"><div class="vheader">One</div></th>
  <th  rowspan="2" class="vertical-label"><div class="vheader">One</div></th>
  <th colspan="11">Regions</th>
  <th  rowspan="2" class="vertical-label"><div class="vheader">References</div></th>
</tr>
  <tr>
    <th   class="vertical-label"><div class="vheader">Antarctic</div></th>
    <th   class="vertical-label"><div class="vheader">Arctic</div></th>
    <th   class="vertical-label"><div class="vheader">Baltic Sea</div></th>
    <th   class="vertical-label"><div class="vheader">Black Sea</div></th>
    <th   class="vertical-label"><div class="vheader">Caspian Sea</div></th>
    <th   class="vertical-label"><div class="vheader">Indo Pacific</div></th>
    <th   class="vertical-label"><div class="vheader">Mediterranean Sea</div></th>
    <th   class="vertical-label"><div class="vheader">North Atlantic</div></th>
    <th   class="vertical-label"><div class="vheader">North Pacific</div></th>
    <th   class="vertical-label"><div class="vheader">South Atlantic</div></th>
    <th   class="vertical-label"><div class="vheader">South Pacific</div></th>
  </tr>
</thead>
<tfoot></tfoot>
<tbody><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr class="alt"><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</tbody>
</table>
</div>

CSS

#galley 
    width: 738px;
    height: auto;
    border: 1px #CCCCCC;
    float:none


#galley table, th, td 
    border: 1px solid black;
    border-collapse:collapse;


#galley th.vertical-label
    -webkit-transform: rotate(270deg) ;
    -moz-transform: rotate(270deg);
    -o-transform: rotate(270deg);
    writing-mode: lr-tb;


#galley th, th.vertical-label
    font-family: "myriad Pro";
    font-decoration: bold;


#galley .vheader
    display:table-cell; 
    vertical-align:bottom

【问题讨论】:

注意:height="130px" 是错误的。它要么是 HTML 中的 height="130",要么最好将其移动到您的 CSS 中,它是 height: 130px 【参考方案1】:

这是 [终于!] 在类似任务中为我工作的方法,同时还对齐文本下方的图像图标。

我将&lt;td&gt; 的内容包装在&lt;div&gt; 容器中,定位并使用transform: translateX(-50%)

参见示例 sn-p(如下)或 this pen。

.text  writing-mode: vertical-rl;
        height: 85px;
        overflow: hidden;
        word-wrap: break-word;
        line-height: 0.95;
        text-align: right;
        left: 50%;
        transform: translateX(-50%);
        position: relative; 

th  font-weight: normal;
     padding: 0 5px;
     background: #282828;
     color: snow;
     border-left: 1px dotted #888; 

.text  writing-mode: vertical-rl;
        height: 85px;
        font-size: 13px;
        overflow: hidden;
        word-wrap: break-word;
        line-height: 0.95;
        text-align: right;
        left: 50%;
        transform: translateX(-50%);
        position: relative; 

td  border: 1px dotted #ccc;
     text-align: center;
     padding: 1px 4px;
     font-size: 11px;

body  font-family: verdana; 

table  border-collapse: collapse;
        border: 3px solid black; 
<table>
  <tr>
    <th>
      <div class='text'>Isle of Man</div>
      <img src='//i.stack.imgur.com/jbxgw.png'>
    </th>
    <th>
      <div class='text'>United Kingdom of Great Britain and Northern Ireland</div>
      <img src='//i.stack.imgur.com/a23pe.png'>
    </th>
    <th>
      <div class='text'>Fiji</div>
      <img src='//i.stack.imgur.com/oM6gP.png'>
    </th>
    <th>
      <div class='text'>Liechtenstein</div>
      <img src='//i.stack.imgur.com/94k6N.png'>
    </th>
  </tr>

  <tr>
    <td>4,330,455</td>
    <td>324,407</td>
    <td>-</td>
    <td>39</td>
  </tr>
  <tr>
    <td>4,315,687</td>
    <td>323,720</td>
    <td>-</td>
    <td>27</td>
  </tr>
  <tr>
    <td>4,282,164</td>
    <td>323,442</td>
    <td>-</td>
    <td>9</td>
  </tr>
</table>

【讨论】:

我在transform 中添加了一个rotate(180deg) 以使文本以另一种方式阅读。【参考方案2】:

使用transform-origin

#galley th.vertical-label      
    -webkit-transform: rotate(270deg) translateX(100%) translateY(33%);
    -moz-transform: rotate(270deg) translateX(100%) translateY(33%);
    -o-transform: rotate(270deg) translateX(100%) translateY(33%);
     -webkit-transform-origin: 100% 100%;
     -moz-transform-origin: 100% 100%;
     -o-transform-origin: 100% 100%;
    writing-mode: lr-tb;

DEMO

【讨论】:

细胞有什么样的对齐方式?看看前三个单元格,我们很难说是middle 还是top?而下一个单元格似乎与bottom 对齐,但实际上并非如此。这只是一个可接受的解决方案(对于 OP)。虽然我认为如果我们不能让他们全部bottom ,最好让他们全部middle 像在OP 的小提琴中一样。 最好将它们放在中间,但在这里我尝试将 transform-origin 属性与 CSS 变换结合使用,以更改变换的原点。是否有其他替代方案?

以上是关于表格单元格中旋转文本的垂直对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

如何垂直对齐表格单元格中的图像和文本?

excel中表格文字水平居中及垂直对齐方式居中怎么设置?选项具体在哪里?如下图:

JTabel 单个单元格文本对齐

如何在表格单元格的垂直中心对齐 CSS 箭头?

为啥不垂直对齐:中间与表格单元格中的输入元素一起使用?

PdfPCell对齐方式,边框,边框颜色的使用 (转)