将旋转div放在容器内居中

时间:2018-07-31 22:53:49

标签: html css css3 css-transforms

我正在尝试制作一个90deg价格标签,但是我不确定为什么它没有按照我的意愿去做,我希望该标签与顶部和右侧(顶部:0:右:0)。

不是那样做的, 代码

<div class='box'>
  <div class='price-tag'>
    $23.12
  </div>
</div>
.box{
  margin:10em;
  height:100px;
  width:100px;
  position:relative;
  background:red;
}

.box .price-tag{
  background:yellow;
  position:absolute;
  top:0;
  right:0;
  display:inline-block;
  transform:rotate(90deg) translate(50%, 0%);
}

JSFiddle

3 个答案:

答案 0 :(得分:2)

另一种方法是通过调整writing-mode

来更改文本方向

.box {
  height: 100px;
  width: 100px;
  position: relative;
  background: red;
}

.box .price-tag {
  background: yellow;
  position: absolute;
  top: 0;
  right: 0;
  writing-mode: vertical-rl; /* tb-rl if you want old browser support*/
}
<div class='box'>
  <div class='price-tag'>
    $23.12
  </div>
</div>

答案 1 :(得分:1)

将任何元素旋转90度时,您需要的是:

transform: rotate(90deg) translate(calc(50% - (height/ 2)), calc(50% - (width/ 2)))

或更具体的情况:

transform: rotate(90deg) translate(calc(50% - (18px / 2)), calc(50% - (44px / 2)))

这是因为旋转时,您希望水平轴和垂直轴上的translate偏离50%,以便将其定位到以前的位置。但是,这只会将角落放置在先前位置。

要纠正此问题,您还需要从新的水平偏移量中减去height一半,并从{{1}中减去一半 },然后使用 calc() 函数。

这可以在以下方法中看到:

width
.box {
  /*margin: 10em;*/ /* -- Removed for demo fiddle */
  height: 100px;
  width: 100px;
  position: relative;
  background: red;
}

.box .price-tag {
  background: yellow;
  position: absolute;
  top: 0;
  right: 0;
  display: inline-block;
  transform: rotate(90deg) translate(calc(50% - (18px / 2)), calc(50% - (44px / 2)))
}

答案 2 :(得分:1)

问题出在您的transform-origin上,您需要将其设置为top right

.box {
  margin: 10em;
  height: 100px;
  width: 100px;
  position: relative;
  background: red;
}

.box .price-tag {
  background: yellow;
  position: absolute;
  top: 0;
  right: 0;
  display: inline-block;
  transform-origin: top right;
  transform: rotate(90deg) translateX(100%);
}
<div class='box'>
  <div class='price-tag'>
    $23.12
  </div>
</div>