我正在尝试创建一个文本旋转-90度的表。到目前为止,我一直在使用文本的图像,但我希望将其更改为文本。
我似乎无法解决一些问题。
这是一个jsFiddle of it in action
http://jsfiddle.net/CoryMathews/ZWBHS/
我需要它才能工作,并且已经在IE7 +,Chrome,FF和Opera中达到了同样的目的。
有关如何改进此方法以使其实际可用的任何想法?我的一些想法是:
我可以在页面加载时使用一些javascript计算宽度,高度等,这可以解决上面的问题2和3但不是1.但是我讨厌依赖javascript进行显示。
也许我误用了可以让我更好地控制的变换起源。我目前使用的数字为“0 0”,这使我可以轻松计算出所需的尺寸。
答案 0 :(得分:7)
此解决方案可以解决您的一些问题,但并不完美:
whitespace: nowrap
禁用流向下一行的文字。width: 1em
的容器中。列总是足够宽,可以显示1行垂直文本。您可以自由调整字体大小。手动设置表格的高度以完全显示旋转的内容(-90度)。硬编码高度不是很好,但有一些优点:不需要固定宽度和负边距来抵消固定宽度/变换原点/相对定位/ JavaScript;文本会自动捕捉到列的底部。
见2.
适用于Firefox,Chrome,Opera,IE9 +。垂直文本在IE8及更早版本中不起作用。我尝试使用以下方式旋转表格:
filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)
结果看起来很糟糕,所以我添加了后备样式来显示一个简单的水平表。
body {
font-family: sans-serif;
padding: 10px;
font-size: 12px;
}
td, tr, th, table { border: 1px solid #333; }
td:nth-child(odd) { background: #eee; }
td {
overflow: hidden;
white-space: nowrap; /* text on one line only */
vertical-align: bottom;
height: 300px; /* to be adjusted: column is not always tall enough for text */
}
td > div {
padding: 10px;
width: 1em; /* column is always wide enough for text */
}
td > div > div {
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-webkit-transform: rotate(-90deg);
-ms-transform: rotate(-90deg) !important;
transform: rotate(-90deg);
}
<!--[if LT IE 9]>
<style>
table { width: 100px; }
td {
white-space: normal;
vertical-align: baseline;
height: auto;
}
td > div {
width: auto;
}
</style>
<![endif]-->
<table>
<tr>
<th>01</th>
<th>02</th>
<th>03</th>
<th>04</th>
<th>05</th>
<th>06</th>
<th>07</th>
<th>08</th>
<th>09</th>
<th>10</th>
<th>11</th>
<th>12</th>
</tr>
<tr>
<td><div><div>Report Results 1</div></div></td>
<td><div><div>Shinanigans</div></div></td>
<td><div><div>CSS Transforms Suck</div></div></td>
<td><div><div>Lorem Ipsum</div></div></td>
<td><div><div>So Damn Pixelated</div></div></td>
<td><div><div>This font looks Terrible</div></div></td>
<td><div><div>Too Long to read on 1 line Set dimensions suck</div></div></td>
<td><div><div>Grumble Grumble.</div></div></td>
<td><div><div>Homebrew!</div></div></td>
<td><div><div>Spotify Commercial Suck</div></div></td>
<td><div><div>Grooveshark FTW!</div></div></td>
<td><div><div>Beer time yet?</div></div></td>
</tr>
</table>
答案 1 :(得分:3)
在表上应用转换会使所有浏览器变得疯狂。我也遇到了多线问题,我发现的唯一解决方法是更改表格标记,使其不是旋转的div,而是整个表格。
然后使用反向转换“解旋”表标题:
我不知道这是否适用于IE7-8过滤器。
答案 2 :(得分:1)
作为Duopixel,(unrotate)
<style>
body { font-family: "Times New Roman", Times, serif; padding:10px; }
td, tr, th, table { border:1px solid #333; }
td:nth-child(odd) { background:#eee; } /* No IE, No Cares */
td.title { width:200px; }
table {
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-webkit-transform: rotate(-90deg);
-ms-transform: rotate(-90deg) !important;
transform: rotate(-90deg);
-webkit-transform-origin:0 0;
-moz-transform-origin:0 0;
-ms-transform-origin:0 0;
-o-transform-origin:0 0;
transform-origin:0 0;
background-color:transparent;
width:250px;
position:relative;
top:250px;
}
td > div {
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg) !important;
transform: rotate(90deg);
-webkit-transform-origin:0 0;
-moz-transform-origin:0 0;
-ms-transform-origin:0 0;
-o-transform-origin:0 0;
transform-origin:0 0;
background-color:transparent;
position:relative; /*Needed to position in the correct columns*/
height:20px; /* Need to not set this, needed for columns to fill*/
left:20px; /*Needed to line up, .5 of width - padding*/
}
</style>
<!--[if LT IE 9]>
<style>
table {
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
top:0px;
}
td div { /* ah..? didn't action of filter..? by td > div..? */
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
overflow:hidden;
width:20px; /* fix to number.. */
height:20px; /* fix to number.. */
}
</style>
<![endif]-->
<table>
<tr>
<td class=title >Report Results 1</td>
<td><div>01</div></td>
</tr>
<tr>
<td class=title >Shinanigans</td>
<td><div>02</div></td>
</tr>
<tr>
<td class=title >CSS Transforms Suck</td>
<td><div>03</div></td>
</tr>
<tr>
<td class=title >Lorem Ipsum</td>
<td><div>04</div></td>
</tr>
<tr>
<td class=title >So Damn Pixelated</td>
<td><div>05</div></td>
</tr>
<tr>
<td class=title >This font looks Terrible</td>
<td><div>06</div></td>
</tr>
<tr>
<td class=title >Too Long to read on 1 line Set dimensions suck</td>
<td><div>07</div></td>
</tr>
<tr>
<td class=title >Grumble Grumble.</td>
<td><div>08</div></td>
</tr>
<tr>
<td class=title >Homebrew!</td>
<td><div>09</div></td>
</tr>
<tr>
<td class=title >Spotify Commercial Suck</td>
<td><div>10</div></td>
</tr>
<tr>
<td class=title >Grooveshark FTW!</td>
<td><div>11</div></td>
</tr>
<tr>
<td class=title >Beer time yet?</td>
<td><div>12</div></td>
</tr>
</table>
答案 3 :(得分:1)
首先让我们修复重叠文本: TD {空白:NOWRAP;}
CSS转换在某种程度上类似于“position:relative”,它们修改对象的渲染而不是它在流中的位置。这意味着目前无法根据div宽度动态调整单元格高度(至少在css表达式开始实现之前)。
考虑到这一发现,我们现在可以自由地将div从流程中取出。我要把它绝对设置在父细胞的左上角。作为一名训练有素的专业人士,我被允许这样做: TD {位置:相对;} TD&GT; DIV {位置:绝对的;顶部:0;左:0;}
好吧,看看这个,现在整个细胞的内容已经向上移动了。我们不能只调整块的位置,因为它会影响块的转换方式;相反,我们将调整块位移: 保证金:100%0 -100%;
我们已经从上面的流程中取出了元素(并且也是有充分理由的),现在我们只是将高度应用于父单元格,我们很高兴:
<强>更新强>
您始终可以添加文本溢出属性并修复文本和单元格大小,以便最小化工作需要http://jsfiddle.net/ZWBHS/3/
这样截断的文本不会丢失,可能会抛出一个复制它的title属性吗?