CSS对象中心点对齐与旋转

先看html代码

<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
    height: 500px;
    width: 300px;
    border: 1px solid black;
}

#div2
{
    border: 1px solid black;
    background-color: yellow;
    opacity:0.5;
    height:200px;
    width:300px;
}
</style>

</head>
<body>
    <div id="div1">
      <div id="div2">HELLO</div>
    </div>
</body>
</html>

通常做法是使用绝对定位position: absolute,用top=50%、left=50%将div2移动到div1的中心点,再用transform: translate(-50%, -50%)后移自己的中心点就可以了,代码:

<style>
#div1
{
    position: absolute;
    height: 500px;
    width: 300px;
    border: 1px solid black;
}

#div2
{
    
    border: 1px solid black;
    background-color: yellow;
    opacity:0.5;
    height:100px;
    width:200px;
    
    position: absolute;
    left:50%;
    top:50%;
    transform: translate(-50%, -50%);
    
}
</style>

效果如下:

但是加入旋转就不行了

#div2
{
    border: 1px solid black;
    background-color: yellow;
    opacity:0.5;
    height:100px;
    width:200px;
    
    position: absolute;
    left:50%;
    top:50%;
    transform: translate(-50%, -50%);
    transform:rotateZ(90deg);  
}

 可以看出,并没有按照中心点旋转

 为此,只能选择使用弹性盒子方案

<style>
#div1
{
    display: flex;
    align-items: center;
    justify-content: center; 
    height: 500px;
    width: 300px;
    border: 1px solid black;
}

#div2
{
    border: 1px solid black;
    background-color: yellow;
    opacity:0.5;
    height:100px;
    width:200px;
}
</style>

旋转前

旋转后

transform:rotateZ(90deg);

 

完整代码:

<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
    display: flex;
    align-items: center;
    justify-content: center; 
    height: 500px;
    width: 300px;
    border: 1px solid black;
}

#div2
{
    border: 1px solid black;
    background-color: yellow;
    opacity:0.5;
    height:100px;
    width:200px;

    transform:rotateZ(90deg);
}
</style>

</head>
<body>
    <div id="div1">
      <div id="div2">HELLO</div>
    </div>
</body>
</html>

 使用弹性盒子对齐实现方便,旋转也以自己中心为轴,可以依旧保持中心对齐,这是优点。

此外注意:

1.如果div2的宽度超过div1的宽度,div2会自动缩小到div1宽度以内。

2.旋转后,虽然视觉上的长宽发生了变化,但对于对象旋转前后的长宽还是没变化的,对长宽进行调整,还要使用旋转之前的长与宽。

3.由于以上两点,导致如果旋转后设置新高度(旋转前宽度)如果超过div1的宽度,会导致看不到效果,这是因为被div1宽度弹性限制了。这是可以使用margin:属性,给其赋小于0的负数进行调整。计算方法如下:

margin = (新高度-原宽度)÷2×-1

以上是我反复调试的结果,虽然问题解决,但是总是觉得不理想。如果哪位朋友有更好的方案,请留言,感谢!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值