【Web前端HTML5&CSS3】17-變形:平移、旋轉與縮放
阿新 • • 發佈:2021-06-26
目錄
變形:平移、旋轉與縮放
變形就是指通過css來改變元素的形狀或位置
變形不會影響到頁面的佈局
transform
用來設定元素的變形效果
1、平移
translateX()
沿著由方向平移translateY()
沿著y軸方向平移translateZ()
沿著z軸方向平移平移元素
百分比是相對於自身計算的
幾種水平垂直雙方向居中的方式對比
-
絕對定位的方式
/* 這種居中方式,只適用於元素的大小確定 */ position: absolute; top: 0; left: 0; bottom: 0; right: 0; margin: auto;
-
table-cell
的方式/* table-cell的方式具有一定侷限性 */ display: table-cell; vertical-align: middle; text-align: center;
-
transform
的方式/* transform變形平移的方式 */ position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
浮出效果
div { float: left; width: 200px; height: 300px; background-color: silver; margin: 100px 50px auto 50px; transition: all .3s; } div:hover { box-shadow: 0 0 10px rgba(0, 0, 0, .2); transform: translateY(-5px); }
2、Z軸平移
z軸平移,調整元素在z軸的位置,正常情況就是調整元素和人眼之間的距離,距離越大,元素離人越近
z軸平移屬於立體效果(近大遠小),預設情況下網頁是不支援透視,如果需要看見效果必須要設定網頁的視距
透視效果
html { background-color: rgb(71, 44, 32); perspective: 800px; } .box { width: 200px; height: 300px; background-color: silver; margin: 100px auto; transition: all .3s; } .box:hover { box-shadow: 0 0 10px rgba(0, 0, 0, .2); transform: translateZ(200px); }
3、旋轉
通過旋轉可以使元素沿著x、y或z旋轉指定的角度
rotateX()
rotateY()
rotateZ()
/* transform: rotateY(0.5turn); */
transform: rotateY(180deg);
4、縮放
對元素進行縮放的函式
scalex()
水平方向縮放scaleY()
垂直方向縮放scale()
雙方向的縮放
.box {
height: 200px;
width: 200px;
background-color: #bfa;
margin: 200px auto;
transition: 2s;
}
.box:hover {
/* transform: scaleX(2); */
/* transform: scaleY(2); */
transform: scale(2);
/* 變形的原點 */
transform-origin: 0 0;
}
5、實戰
鴨子表
html程式碼
<div class="clock">
<div class="hour-wrapper">
<div class="hour"></div>
</div>
<div class="minute-wrapper">
<div class="minute"></div>
</div>
<div class="second-wrapper">
<div class="second"></div>
</div>
</div>
css程式碼
.clock {
width: 500px;
height: 500px;
background-image: url("assets/鴨子表/clock.png");
background-image: url("assets/鴨子表/clock_duck.jpg");
background-size: cover;
margin: 100px auto;
position: relative;
}
.clock>div {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
.clock>div>div {
height: 50%;
margin: 0 auto;
}
/* 時針 */
.hour-wrapper {
height: 60%;
width: 60%;
animation: clock-run 720s infinite;
}
.hour {
width: 8px;
background-color: black;
}
/* 分針 */
.minute-wrapper {
height: 75%;
width: 75%;
animation: clock-run 60s steps(60) infinite;
}
.minute {
width: 4px;
background-color: black;
}
/* 秒針 */
.second-wrapper {
height: 90%;
width: 90%;
animation: clock-run 1s steps(60) infinite;
}
.second {
width: 2px;
background-color: red;
}
@keyframes clock-run {
from {
transform: rotateZ(0);
}
to {
transform: rotateZ(360deg);
}
}
復仇者聯盟
html程式碼
<div class="cube">
<div class="surface1"></div>
<div class="surface2"></div>
<div class="surface3"></div>
<div class="surface4"></div>
<div class="surface5"></div>
<div class="surface6"></div>
</div>
css程式碼
html {
perspective: 800px;
}
.cube {
height: 200px;
width: 200px;
margin: 200px auto;
position: relative;
/* 設定3d變形效果 */
transform-style: preserve-3d;
animation: cube-rotate 12s infinite linear;
}
.cube div {
height: 200px;
width: 200px;
background-size: cover;
position: absolute;
top: 0;
left: 0;
/* 為元素設定透明效果 */
opacity: .85;
}
.surface1 {
background-image: url("/assets/復仇者聯盟/1.jpg");
transform: translateX(-100px) rotateY(90deg);
}
.surface2 {
background-image: url("/assets/復仇者聯盟/2.jpg");
transform: translateX(100px) rotateY(90deg);
}
.surface3 {
background-image: url("/assets/復仇者聯盟/3.jpg");
transform: translateY(-100px) rotateX(90deg);
}
.surface4 {
background-image: url("/assets/復仇者聯盟/4.jpg");
transform: translateY(100px) rotateX(90deg);
}
.surface5 {
background-image: url("/assets/復仇者聯盟/5.jpg");
transform: translateZ(-100px);
}
.surface6 {
background-image: url("/assets/復仇者聯盟/6.jpg");
transform: translateZ(100px);
}
@keyframes cube-rotate {
from {
transform: rotateX(0) rotateY(0) rotateZ(0);
}
to {
transform: rotateX(1turn) rotateY(2turn) rotateZ(3turn);
}
}