旋转文本并将其容器缩小到新的宽度
Rotate text and shrink its container to the new width
我想旋转一些垂直显示的文本(y 轴图表标签)。文本可以是任意可变长度(但始终在一行上)。
我已尝试使用 CSS3 变换进行旋转 (参见 JSFiddle):
.rotate {
transform: rotate(270deg);
}
然而,元素的原始宽度和高度即使在旋转后仍会保留,如 described in the spec:
In the HTML namespace, the transform property does not affect the flow of the content surrounding the transformed element.
这意味着元素的容器宽度根据标签文本长度扩展,影响相邻图表的位置。
如何旋转文本并将其容器缩小到新的宽度?任何解决方案都会有所帮助,包括 JavaScript/jQuery 解决方案或替代方法。
我找到了使用绝对定位的解决方法。旋转后的文字可以绝对定位"relative to the border of its closest positioned ancestor"。解释:
position: relative
在容器上使其成为 "closest positioned ancestor"
position: absolute
在旋转文本上,设置为容器底部(减去行高)
- 从左上角开始旋转文本
.container {
position: relative; /*make container the closest positioned ancestor*/
border: 1px solid red;
display: inline-block;
height: 400px;
min-width: 30px; /*same as line-height of rotated text*/
}
.rotate {
text-align: center;
overflow: hidden;
height: 30px;
line-height: 30px;
width: 400px; /*matches the height of the container*/
position: absolute;
bottom: -32px; /*0 = bottom of container, then subtract (line-height+border)*/
border: 1px solid blue;
transform: rotate(-90deg);
transform-origin: top left;
}
假设:
- 文本宽度可以设置为合理的值(例如容器的高度)
- 文本中没有换行符(单行解决方案)
我想旋转一些垂直显示的文本(y 轴图表标签)。文本可以是任意可变长度(但始终在一行上)。
我已尝试使用 CSS3 变换进行旋转 (参见 JSFiddle):
.rotate {
transform: rotate(270deg);
}
然而,元素的原始宽度和高度即使在旋转后仍会保留,如 described in the spec:
In the HTML namespace, the transform property does not affect the flow of the content surrounding the transformed element.
这意味着元素的容器宽度根据标签文本长度扩展,影响相邻图表的位置。
如何旋转文本并将其容器缩小到新的宽度?任何解决方案都会有所帮助,包括 JavaScript/jQuery 解决方案或替代方法。
我找到了使用绝对定位的解决方法。旋转后的文字可以绝对定位"relative to the border of its closest positioned ancestor"。解释:
position: relative
在容器上使其成为 "closest positioned ancestor"position: absolute
在旋转文本上,设置为容器底部(减去行高)- 从左上角开始旋转文本
.container {
position: relative; /*make container the closest positioned ancestor*/
border: 1px solid red;
display: inline-block;
height: 400px;
min-width: 30px; /*same as line-height of rotated text*/
}
.rotate {
text-align: center;
overflow: hidden;
height: 30px;
line-height: 30px;
width: 400px; /*matches the height of the container*/
position: absolute;
bottom: -32px; /*0 = bottom of container, then subtract (line-height+border)*/
border: 1px solid blue;
transform: rotate(-90deg);
transform-origin: top left;
}
假设:
- 文本宽度可以设置为合理的值(例如容器的高度)
- 文本中没有换行符(单行解决方案)