css旋转45度_每天一个CSS小技巧 - 折角效果

把元素的一个角(通常是右上角或右下角)处理成类似折角的形状,再配上或多或少的拟物样式,已经成为一种非常流行的装饰手法。

45度折角的解决方案

这是原代码即原效果图:

  Title
b7f92a3a2115f9d0800fd2dde5d54f4c.png

首先我们从一个右上角具有斜面切角的元素开始,这个切角是由渐变方案实现的,代码及效果如下:

  
f65cc7da64671b3c3f0537701518ec7f.png

接下来我们增加一个暗色的三角形来实现翻折效果,实现方法是增加另一层渐变来生成这个三角形,并将其定位在右上角。这可以通过background-size来控制角的大小。

    .box{      width: 400px;      height: 300px;      background:        linear-gradient(to left bottom,          transparent 50%, rgba(0,0,0,.4) 0)          no-repeat ;      background-position: 100% 0;      background-size: 3em 3em;      border: 1px solid black;    }
01f1fa782e94c24ec4eaf73e31635cba.png

把这两个合并后,如下:

      background:        linear-gradient(to left bottom,          transparent 50%, rgba(0,0,0,.4) 0)          no-repeat 100% 0/3em 3em,        linear-gradient(-135deg, transparent 3em, #58a 0);
91606e205b1d7282ad034fe4bf498ee7.png

我们发现它们并不贴合,原因是第二层渐变中的3em折角尺寸是写在色标中的,它是沿着渐变轴进行衡量的,是对角线尺寸。另一方面,在background-size中的3em长度是背景贴片的宽度和高度,是在水平和垂直方向上进行度量的。

为了将这两者对齐,我们只要该其中一项就行:

  • 如果保留对角线的3em长度,那么就要把background-size乘以根号2
  • 如果要保留水平和垂直方向上的3em长度,那么就要要在切角渐变的角标位置除以根号2。

这里我们选用第二种方案,因为绝大多数CSS的度量不是在对角线上进行的,因为我们这里把色标的位置改成3/√2 = 2.121320344,这里取2.2em,效果如下:

      background:        linear-gradient(to left bottom,          transparent 50%, rgba(0,0,0,.4) 0)          no-repeat 100% 0/3em 3em,        linear-gradient(-135deg, transparent 2.2em, #58a 0);
f5f45c7f5a442353ea8c8bbb3c78a473.png

这样我们就得到了一个想要的折角效果。

其他角度的解决方案

现实生活中,折角往往不是精确的45度。比如-150deg会产生30度的切角。效果如下:

      background:        linear-gradient(to left bottom,          transparent 50%, rgba(0,0,0,.4) 0)          no-repeat 100% 0/3em 3em,        linear-gradient(-150deg, transparent 2.2em, #58a 0);
6a76ed1191eb5efba366d34ca7fd19dd.png

这时我们就需要通过三角函数来计算得到我们想要的暗色三角形的长度和宽度:

0e637a7289ec213f4e6f3938b70515f3.png

因此计算得到sin30度 = 2.2/x 所以 x = 4.4, cos30度 = 2.2/y 所以y = 2.540341184

所以我们修改得到:

      background:        linear-gradient(to left bottom,          transparent 50%, rgba(0,0,0,.4) 0)          no-repeat 100% 0/4.4em 2.55em,        linear-gradient(-150deg, transparent 2.2em, #58a 0);
12fb993c2ca63e48d25b5a8b8b39f5a9.png

但是这里虽然对上了,但是看起来不是很真实。如果你拿出一张纸的话,做一下试验,你会发现折页三角形是微微旋转的。因为我们是无法旋转背景的,所以这里我们用到伪元素。

  

这里你会发现我们只是把上述的效果又实现了一遍。

接下来,我们就把暗色三角的长度和宽度对掉,并且逆时针旋转30度:

      width: 2.55em;      height: 4.4em;      transform: rotate(-30deg);
loading.gif

到这里我们已经接近目标了,接下来要做的便是挪动这个三角形让它与斜边重合。

首先:我们把transform-origin设置为bottom right,让三角形的右下角成为旋转的中心,这样就可以让它的右下角保持固定:

      transform: rotate(-30deg);      transform-origin: bottom right;
loading.gif

无旋转效果图

loading.gif

以右下角逆时针旋转30度后


接下来就是再次运用几何学来计算垂直方向上的移动距离了:

loading.gif

如上图所示,我们得到垂直偏移量是x - y = 4.4 - 2.55 = 1.85em,因此我们修改得:

      width: 2.55em;      height: 4.4em;      transform: translateY(-1.85em) rotate(-30deg);      transform-origin: bottom right;


loading.gif

这里我们可以再让它美观一点,可以增加一点圆角,渐变和投影等,最终效果如下:

  
cec3c74fdce3155b2be3657d01dfed51.png
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值