CSS 变换/旋转动态宽度的文本,上面有线
CSS transform / rotate text of dynamic width with line above
我正在尝试用 CSS 实现一些简单但不知何故复杂的东西,我想旋转一些需要与顶部边框顶部对齐的标签,沿着以下行等宽:
有几个问题导致了相互冲突的问题(修复一个会破坏另一个):
- 文本的宽度为 varying/dynamic
- 标签需要保持等宽 - 32px(不更宽)
- 它们需要沿 'top' 对齐,沿其他元素浮动
见jsbin:
html:
<div class="label">
<span class="label-text">Hello</span>
</div>
css:
.label {
border-top: 10px solid black;
width: 120px;
float: left;
margin-right: 12px;
}
.label-text {
display: block;
transform: rotate(-90deg);
text-align: right;
margin-top: 64px;
}
这导致:
这很接近,但我无法在不影响其中文本的情况下缩小栏。一旦我开始玩宽度,旋转似乎会导致各种问题。
这是可能的,但它涉及定位和了解一些高度。
* {
box-sizing: border-box;
}
body {
text-align: center;
}
.label {
width: 32px;
margin: 1em;
height: 150px;
/* you need to know the max height or you get overflow */
background: rgba(255, 0, 0, .5);
white-space: nowrap;
display: inline-block;
position: relative;
}
.label-text {
border: 1px solid green;
border-right: 10px solid black;
position: absolute;
top: 0;
left: 0;
height: 32px;
line-height: 32px;
padding: 0 1em;
transform-origin: top left;
transform: rotate(-90deg) translateX(-100%);
}
<div class="label">
<span class="label-text">I'm short and OK</span>
</div>
<div class="label">
<span class="label-text">I'm waaay too long to be contained in this area.</span>
</div>
我正在尝试用 CSS 实现一些简单但不知何故复杂的东西,我想旋转一些需要与顶部边框顶部对齐的标签,沿着以下行等宽:
有几个问题导致了相互冲突的问题(修复一个会破坏另一个):
- 文本的宽度为 varying/dynamic
- 标签需要保持等宽 - 32px(不更宽)
- 它们需要沿 'top' 对齐,沿其他元素浮动
见jsbin:
html:
<div class="label">
<span class="label-text">Hello</span>
</div>
css:
.label {
border-top: 10px solid black;
width: 120px;
float: left;
margin-right: 12px;
}
.label-text {
display: block;
transform: rotate(-90deg);
text-align: right;
margin-top: 64px;
}
这导致:
这很接近,但我无法在不影响其中文本的情况下缩小栏。一旦我开始玩宽度,旋转似乎会导致各种问题。
这是可能的,但它涉及定位和了解一些高度。
* {
box-sizing: border-box;
}
body {
text-align: center;
}
.label {
width: 32px;
margin: 1em;
height: 150px;
/* you need to know the max height or you get overflow */
background: rgba(255, 0, 0, .5);
white-space: nowrap;
display: inline-block;
position: relative;
}
.label-text {
border: 1px solid green;
border-right: 10px solid black;
position: absolute;
top: 0;
left: 0;
height: 32px;
line-height: 32px;
padding: 0 1em;
transform-origin: top left;
transform: rotate(-90deg) translateX(-100%);
}
<div class="label">
<span class="label-text">I'm short and OK</span>
</div>
<div class="label">
<span class="label-text">I'm waaay too long to be contained in this area.</span>
</div>