使用垂直文本作为表头创建HTML表格

9

我想创建一个HTML表格,其中标题文本为垂直书写(即标题文本旋转90度)。我正在使用以下样式:

<th style="-webkit-transform:rotate(90deg); writing-mode:tb-rl; -moz-transform:rotate(90deg); -o-transform: rotate(90deg); white-space:nowrap; display:blocking; padding-left:1px;padding-right:1px;padding-top:10px;padding-bottom:10px; " align="left"  id="#COLUMN_HEADER_NAME#">#COLUMN_HEADER#</th>

在MS IE 9.x中显示正常。在Firefox和Chrome中,标题似乎浮动在表格的顶部,与下面的表格行重叠。请问有人能帮忙吗?我真的不知道为什么会出现这种情况。我最初是按照这个教程开始的:http://scottgale.com/blog/css-vertical-text/2010/03/01/ 谢谢,Tamas
4个回答

16

我不相信你可以仅使用CSS就改变<th>元素的高度,当你旋转它的内容时。下面是我借助jQuery实现这个效果的代码。

http://jsfiddle.net/tsYRQ/1004/


无法在Safari上使用,我无法使列变窄。 - gamov
1
这个fiddle fork适用于Firefox (-moz-transform),并且可以将标题的宽度减小到合适的大小。 - David J
自从第一次回答这个问题以来,已经发生了很多事情。看起来writing-mode样式现在被FF支持,并且与transform产生冲突。 - deefour

6

http://blog.petermares.com/2010/10/27/vertical-text-in-html-table-headers-for-webkitmozilla-browsers-without-using-images/

使用CSS将元素(例如<div>)在<td>元素内旋转会导致列宽缩小以适应旋转文本,但是行高不会相应增加。

在Mac上的Chrome和Safari中有效(至少对我来说如此)。

<html>
    <head>
        <style>
            th
            {
                background-color: grey;
                color: white;
                text-align: center;
                vertical-align: bottom;
                height: 150px;
                padding-bottom: 3px;
                padding-left: 5px;
                padding-right: 5px;
            }

            .verticalText
            {
                text-align: center;
                vertical-align: middle;
                width: 20px;
                margin: 0px;
                padding: 0px;
                padding-left: 3px;
                padding-right: 3px;
                padding-top: 10px;
                white-space: nowrap;
                -webkit-transform: rotate(-90deg); 
                -moz-transform: rotate(-90deg);                 
            };
        </style>
    </head>
    <body>

        <table>
            <tr>
                <th>Column 1</th>
                <th><div class="verticalText">Column 2</div></th>
                <th>Column 3</th>
                <th><div class="verticalText">Column 4</div></th>
                <th>Column 5</th>
                <th><div class="verticalText">Column 6</div></th>
                <th>Column 7</th>
                <th><div class="verticalText">Column 8</div></th>
                <th>Column 9</th>
            </tr>
            <tr>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
                <td>Data 1</td>
            </tr>
            <tr>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
                <td>Data 2</td>
            </tr>
        </table>

    </body>
</html>

2
问题在于您正在th样式上设置静态高度为150px。看看所有额外的空白,甚至在您的垂直文本列上方:http://jsfiddle.net/2xP5C/ 这就是为什么我更喜欢使用jQuery,因为它将把高度设置为只有足够容纳最长文本位所需的高度。 - deefour
你说得对 - 我错误地认为行高正在调整,但我只是粗心大意了!看起来两个答案的混合可能会得到最好的结果...? - SimonD

2

我认为在表格单元格中获取垂直文本的更简便方法是:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <style>
        td {
        text-align: center;
        }
        /*Creation of vertical text in cell*/
        .vertical_Text {

                display: block;
                color: #f00;

                -webkit-transform: rotate(-90deg); 
                -moz-transform: rotate(-90deg);                 
            };
    </style>
</head>
<body>
<table border="1" cellspacing="10" cellpadding="20">
    <thead>
        <tr>
            <!-- vertical cell -->
            <td rowspan="2"><span class="vertical_Text" title="vertical text">HEAD</span></td>
            <td>header1-2</td>
            <td colspan="3">header1-2</td>
        </tr>

        <tr>
            <td>header2-1</td>
            <td>header2-2</td>
            <td>header2-3</td>
            <td>header2-4</td>
        </tr>

    </thead>
    <tbody>

        <!-- tr*5>td{data-$/$$}*5 -->
        <tr>
            <!-- vertical cell -->
            <td rowspan="5"><span  class="vertical_Text" title="vertical text">DATA</span></td>
            <td>data</td>
            <td>data</td>
            <td>data</td>
            <td>data</td>
        </tr>
        <tr>
            <td>data</td>
            <td>data</td>
            <td>data</td>
            <td>data</td>
        </tr>
        <tr>
            <td>data</td>
            <td>data</td>
            <td>data</td>
            <td>data</td>
        </tr>
        <tr>
            <td>data</td>
            <td>data</td>
            <td>data</td>
            <td>data</td>
        </tr>
        <tr>
            <td>data</td>
            <td>data</td>
            <td>data</td>
            <td>data</td>
        </tr>
    </tbody>
</table>
</body>
</html>

仅适用于示例数据,但较长的标题替代HEAD会破坏表格,使其崩溃。 - Ludus H

0

你可以简单地使用CSS来完成它

table th {
    writing-mode: vertical-rl;
    text-orientation: mixed;
    text-align: right;
}

<!DOCTYPE html>
<html>
<head>
<style>
table {
  font-family: arial, sans-serif;
  border-collapse: collapse;
  width: 100%;
}
table th {
    font-size: .85em;
    letter-spacing: .1em;
    text-transform: uppercase;
    writing-mode: vertical-rl;
    text-orientation: mixed;
    text-align: right;
}
td, th {
  border: 1px solid #dddddd;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {
  background-color: #dddddd;
}
</style>
</head>
<body>

<h2>HTML Table</h2>

<table>
  <tr>
    <th>Company</th>
    <th>Contact</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>Maria Anders</td>
    <td>Germany</td>
  </tr>
  <tr>
    <td>Centro comercial Moctezuma</td>
    <td>Francisco Chang</td>
    <td>Mexico</td>
  </tr>
  <tr>
    <td>Ernst Handel</td>
    <td>Roland Mendel</td>
    <td>Austria</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>Helen Bennett</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Laughing Bacchus Winecellars</td>
    <td>Yoshi Tannamuri</td>
    <td>Canada</td>
  </tr>
  <tr>
    <td>Magazzini Alimentari Riuniti</td>
    <td>Giovanni Rovelli</td>
    <td>Italy</td>
  </tr>
</table>

</body>
</html>


3
很不幸,这在Safari(桌面版和iOS版)上无法工作。 - BornReady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接