【问题标题】:css3 3D transformcss3 3D变换
【发布时间】:2023-03-23 13:56:01
【问题描述】:

我有一个三角形,我需要它围绕左下角的三角形角度旋转 360 度。我需要固定这个点,让三角形围绕它旋转。

这是我的代码

figure {
  background-color:#000;
	position: relative;
	overflow:hidden;
	margin: 20px 1%;
	height: 200px;
	text-align: center;
	cursor: pointer;
}


.icons {
	position: absolute;
	top:0;
	left:20%;
	width: 50%;
	height: 50%;
	background: url("http://imgh.us/triangle_6.svg") no-repeat center center;
	background-size: 100% 100%;
	content: '';
	-webkit-transition: -webkit-transform 0.45s;
	transition: transform 0.45s;
	-webkit-transform: rotate3d(0,0,1,0deg);
	transform: rotate3d(0,0,1,0deg);
	-webkit-transform-origin: 0 100%;
	transform-origin: bottom left;
}

 figure:hover .icons{
	-webkit-transform: rotate3d(0,0,1,360deg);
	transform: rotate3d(0,0,1,360deg);
}
<figure>
<div class="icons">
</div>
</figure>

我需要它从静态原点旋转 360 度,并希望它成为三角形的左下角。 这可能吗 ? 提前致谢。

【问题讨论】:

    标签: css transform


    【解决方案1】:

    问题是您将 .icons 容器的宽度和高度设置为 50%,这使得 .icons 容器不是正方形而是矩形。 SVG 三角形内接为正方形,因此如果将三角形放入矩形并居中,则左下角 .icons 角和左下角三角形角之间有一些空间。您应该将 .icons 的宽度和高度指定为相同(使其成为正方形)或使用背景 triangle.svg 的宽度和高度(不要使用 %)

    figure {
      background-color:#000;
    	position: relative;
    	overflow:hidden;
    	margin: 20px 1%;
    	height: 200px;
    	text-align: center;
    	cursor: pointer;
    }
    
    
    .icons {
    	position: absolute;
    	top:0;
    	left:20%;
    	width: 50%;
    	height: 50%;
    	background: url("http://imgh.us/triangle_6.svg") no-repeat left bottom;
    	background-size: auto auto;
    	content: '';
    	-webkit-transition: -webkit-transform 0.45s;
    	transition: transform 0.45s;
    	-webkit-transform: rotate3d(0,0,1,0deg);
    	transform: rotate3d(0,0,1,0deg);
    	-webkit-transform-origin: 0 100%;
    	transform-origin: bottom left;
    }
    
     figure:hover .icons{
    	-webkit-transform: rotate3d(0,0,1,360deg);
    	transform: rotate3d(0,0,1,360deg);
    }
    <figure>
    <div class="icons">
    </div>
    </figure>

    【讨论】:

    • 您有 3 个选项,您可以将图形设置为具有相同的宽度和高度(使其成为正方形),您可以将 .icons 设置为正方形,或者您可以更改背景大小从 '100% 100%' 到 'auto auto' 并将背景位置更改为 'left bottom'。您可以右键单击三角形并在列表底部选择“检查元素”并检查容器 .icons 的突出显示是否比 svg 三角形宽。那就是问题所在。变换原点没问题
    【解决方案2】:

    您可以使用transform-origin 属性锁定转换点。在这种情况下,我将值设置为bottom left

    .box {
      height: 200px;
      width: 200px;
      position: relative;
      border:1px solid black;
    }
    
    .rotate {
    	height: 100px;
    	width: 100px;
    	background-color: green;
    	position: absolute;
        right:0;
        transition: all 1s linear;
       -webkit-transform-origin: bottom left;
      
    }
    
    .box:hover .rotate {
    	transform: rotate(360deg);
    	transform-origin: bottom left;
    }
    <div class="box">
    	<div class="rotate"></div>
    </div>

    【讨论】:

    • 我已经使用了 transform-origin: bottom left ,但是这也不能围绕 static angle 旋转。我需要使角度静止,只有形状围绕它旋转。
    • @YahyaEssam 道歉已修复代码。你必须在元素旋转之前设置transform-origin
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 2014-03-17
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多