如何将90度旋转的div的内容居中

时间:2015-10-07 13:26:46

标签: css css3

有一个页面,其中包含具有不同状态的产品条目列表。我希望每个产品能够使用少量色带,这表明产品的当前状态。

带有功能区的此类列表的示例位于:http://jsfiddle.net/19ren646/

HTML:

<div class="list-group-item">
    <h4>Short item</h4>
    <p>I don't have that much content really</p>

    <div class="ribbon">
        <span>Ribbon</span>
    </div>
</div>
<div class="list-group-item">
    <h4>A much longer item</h4>
    <p>I have a lot of content, because I have a Lorem ipsum in me</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos amet, minus maiores adipisci. Neque possimus, iusto odio explicabo. Libero, fugiat.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam, aliquid.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos amet, minus maiores adipisci. Neque possimus, iusto odio explicabo. Libero, fugiat.</p>

    <div class="ribbon">
        <span>Ribbon</span>
    </div>
</div>

CSS:

.list-group-item {
    position:relative;
    padding:20px;
    padding-left:60px;
    border:1px solid #ccc;
}
.ribbon {
    position:absolute;
    top:0;
    left:0;
    width:40px;
    height:100%;
    background:blue;
    color:white;
}
.ribbon span {
    display:block;
    transform:rotate(90deg);
}

为节省水平空间,色带旋转90度。但我的问题是,我可以在中间垂直显示色带的文字吗?

我知道我可以按用户position:relativemargins向下推送文字,但只有当所有条目的高度都是常数时才能正常工作,但这并不是。那么我可以将文本推送到中间,以适用于.list-group-item元素的任何高度的方式吗?

3 个答案:

答案 0 :(得分:1)

您可以在css中使用绝对定位+翻译功能:

http://jsfiddle.net/19ren646/1/

.ribbon span {
    position: absolute;
    top:50%;
    display:block;
    transform:rotate(90deg) translate(-50%);
}

修改

为了与safari兼容,可以使用webkit前缀来定义

.ribbon span {
    position: absolute;
    top:50%;
    display:block;
    -webkit-transform: rotate(90deg) translate(-50%);
    transform: rotate(90deg) translate(-50%);
}

答案 1 :(得分:0)

试试这个:

.ribbon span {
    display:block;
    position: relative;
    top:50%;
    transform:rotate(90deg) translateX(-50%);
    text-align:center;
}

<强> fiddle

这在定位_

时应该非常准确

答案 2 :(得分:0)

嗨,你可以通过这个来实现。

.ribbon span {
    display:block;
    transform:rotate(90deg);
    top: calc(50% - 1.5em);
    position: relative;
}

即使你可以这样做以获得更好的外观

.ribbon span {
    display:block;
    top:20%;
    left:0.6em;
    position: relative;
    -ms-writing-mode: tb-rl; /* old syntax. IE */
    -webkit-writing-mode: vertical-rl;
    -moz-writing-mode: vertical-rl;
    -ms-writing-mode: vertical-rl;
    writing-mode: vertical-rl; /* new syntax */
    -webkit-text-orientation: upright;
    -moz-text-orientation: upright;
    -ms-text-orientation: upright;
    text-orientation: upright;
}

这是最后一个的工作演示

<强> Demo code you can Try like this