1. 程式人生 > 其它 >【Web前端HTML5&CSS3】17-變形:平移、旋轉與縮放

【Web前端HTML5&CSS3】17-變形:平移、旋轉與縮放

筆記來源:尚矽谷Web前端HTML5&CSS3初學者零基礎入門全套完整版

目錄

變形:平移、旋轉與縮放

變形就是指通過css來改變元素的形狀或位置

變形不會影響到頁面的佈局

transform用來設定元素的變形效果

1、平移

  • translateX() 沿著由方向平移
  • translateY() 沿著y軸方向平移
  • translateZ() 沿著z軸方向平移平移元素

百分比是相對於自身計算的

幾種水平垂直雙方向居中的方式對比

  1. 絕對定位的方式

    /* 這種居中方式,只適用於元素的大小確定 */
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    margin: auto;
    
  2. table-cell的方式

    /* table-cell的方式具有一定侷限性 */
    display: table-cell;
    vertical-align: middle;
    text-align: center;
    
  3. 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);
    }
}