首頁  >  文章  >  web前端  >  純 CSS 中的圖片交換

純 CSS 中的圖片交換

Linda Hamilton
Linda Hamilton原創
2024-11-25 06:29:27789瀏覽

純 CSS 中的圖片交換

Image Swap in Pure CSS

Image Swap in Pure CSS

讓我們在不使用 JavaScript 的情況下使用純 CSS 建立圖片交換教學。

  1. 讓我們使用輸入單選按鈕、標籤在 html 中建立一些元素。最後,我們還添加 **
    <div>
    
    
    
    <p>Let's create <strong>CSS</strong><br>
    </p>
    
    <pre class="brush:php;toolbar:false"> * {
        margin: 0;
        padding: 0;
    } 
    
    html {
        height: 100%;
        scroll-behavior: smooth;
    }
    
    body {
        display: flex;
        flex-direction: column;
        height: 100%;
        font-family: monospace;
        place-content: center;
        background-size: 100% 100%;
        background-position: 0px 0px;
        background-image: radial-gradient(18% 28% at 24% 50%, #CEFAFFFF 7%,
     #073AFF00 100%), radial-gradient(18% 28% at 18% 71%, #FFFFFF59 6%, 
    #073AFF00 100%), radial-gradient(70% 53% at 36% 76%, #73F2FFFF 0%, 
    #073AFF00 100%), radial-gradient(42% 53% at 15% 94%, #FFFFFFFF 7%,
     #073AFF00 100%), radial-gradient(42% 53% at 34% 72%, #FFFFFFFF 7%,
     #073AFF00 100%), radial-gradient(18% 28% at 35% 87%, #FFFFFFFF 7%,
     #073AFF00 100%), radial-gradient(31% 43% at 7% 98%, #FFFFFFFF 24%,
     #073AFF00 100%), radial-gradient(21% 37% at 72% 23%, #D3FF6D9C 24%,
     #073AFF00 100%), radial-gradient(35% 56% at 91% 74%, #8A4FFFF5 9%,
     #073AFF00 100%), radial-gradient(74% 86% at 67% 38%, #84d9ff 24%,
     #073AFF00 100%), linear-gradient(125deg, #4EB5FFFF 1%, #4C00FCFF 100%);
    }
    
    .wrapper {
        width: 860px;
        height: 283px;
        position: relative;
        margin: 0 auto;
    }
    
    .wrapper label {
        width: 200px;
        height: 134px;
        cursor: pointer;
        position: absolute;
        transition: 0.25s;
        border-radius: 10px;
    }
    
    .wrapper label img{
        max-width: 100%;
        height: 100%;
        border-radius: 10px;
    }
    
    .wrapper input[type="radio"] {
        padding: 5px 5px 5px 10px;
        height: 134px;
        width: 200px;
        cursor: pointer;
        position: absolute;
        z-index: -1;
        opacity: 0;
    }
    
    .wrapper input[type="radio"]+label span {
        opacity: 0;
        background: var(--bg);
        display: inline-block;
        border-radius: 7px;
        padding: 5px 0 5px 10px;
        margin-top: 5px;
        width: calc(100% - 10px);
        color: white;
    }
    
    .wrapper input[type="radio"]:checked+label span {
        opacity: 1;
        animation-delay: 1s;
        animation: fade 1s;
    }
    
    /* static positions */
    .wrapper input[type="radio"]#s1,
    .wrapper input[type="radio"]#s1+label {
        left: 0;
        top: 0;
    }
    
    .wrapper input[type="radio"]#s2,
    .wrapper input[type="radio"]#s2+label {
        left: 440px;
        top: 0;
    }
    
    .wrapper input[type="radio"]#s3,
    .wrapper input[type="radio"]#s3+label {
        left: 655px;
        top: 0;
    }
    
    .wrapper input[type="radio"]#s4,
    .wrapper input[type="radio"]#s4+label {
        left: 440px;
        top: 150px;
    }
    
    .wrapper input[type="radio"]#s5,
    .wrapper input[type="radio"]#s5+label {
        left: 655px;
        top: 150px;
    }
    
    /* onclick shows large image and caption*/
    .wrapper input[type="radio"]:checked,
    .wrapper input[type="radio"]:checked+label {
        left: 0 !important;
        top: 0 !important;
        width: 425px;
        height: 100%;
    }
    
    /* placing first item position when clickced on other thumbnails */
    .wrapper input[type="radio"]#s2:checked~#s1+label {
        left: 440px;
    }
    
    .wrapper input[type="radio"]#s3:checked~#s1+label {
        left: 660px;
    }
    
    .wrapper input[type="radio"]#s4:checked~#s1+label {
        left: 440px;
        top: 150px;
    }
    
    .wrapper input[type="radio"]#s5:checked~#s1+label {
        left: 660px;
        top: 150px;
    }
    
    @keyframes fade {
        from {
            opacity: 0;
        }
    
        to {
            opacity: 1;
        }
    }
    
    /* changing background color when clicked on thumbnails */
    .bg {
        position: fixed;
        left: 0;
        top: 0;
        width: 100vw;
        height: 100vh;
        z-index: -1;
    }
    
    .wrapper input[type="radio"]#s2:checked~.bg {
        background-image: radial-gradient(circle, rgba(238, 174, 202, 1) 0%, rgba(148, 187, 233, 1) 100%);
    }
    
    .wrapper input[type="radio"]#s3:checked~.bg {
        background-image: radial-gradient(circle, rgb(197, 218, 196) 0%, rgb(88, 167, 204) 100%);
    }
    
    .wrapper input[type="radio"]#s4:checked~.bg {
        background-image: radial-gradient(circle, rgb(238, 226, 174) 0%, rgb(177, 139, 131) 100%);
    }
    
    .wrapper input[type="radio"]#s5:checked~.bg {
        background-image: radial-gradient(circle, rgb(174, 238, 225) 0%, rgb(36, 163, 136) 100%);
    }
    

    現在,我們已經完成了靜態位置的交換動畫。檢查下面的 gif 動畫中的輸出是否可以播放,否則請前往本文末尾並查看演示的 codepen 連結。

    Image Swap in Pure CSS

    現在讓我們嘗試使用 CSS 自訂變數來動態寬度和高度。使用自訂 css 變數非常有用,因為只需更改 2 個位置,所有尺寸(大尺寸和縮圖)包括間隙都會自動修復。讓我們在 :root
    中建立變數

     :root {
         --w: 800px;
         --h: 270px;
         --m: 15px;
         --thumbw: calc(var(--w)/4 - 15px);
         --thumbh: calc(50% - var(--m));
         --top: calc(var(--h)/2 + var(--m)/2 + 0px);
     }
    

    現在忽略之前的所有 CSS 並替換為下面的 CSS。您可以在下面發現先前的 CSS 已被註解並替換為自訂變數。

    :root {
        --w: 800px;
        --h: 270px;
        --m: 15px;
        --thumbw: calc(var(--w)/4 - 15px);
        --thumbh: calc(50% - var(--m));
        --top: calc(var(--h)/2 + var(--m)/2 + 0px);
    }
    
     * {
         margin: 0;
         padding: 0;
     }
    
     html {
         height: 100%;
         scroll-behavior: smooth;
     }
    
    body {
        display: flex;
        flex-direction: column;
        height: 100%;
        font-family: monospace;
        place-content: center;
        background-size: 100% 100%;
        background-position: 0px 0px;
        background-image: radial-gradient(18% 28% at 24% 50%, #CEFAFFFF 7%,
     #073AFF00 100%), radial-gradient(18% 28% at 18% 71%, #FFFFFF59 6%, 
    #073AFF00 100%), radial-gradient(70% 53% at 36% 76%, #73F2FFFF 0%, 
    #073AFF00 100%), radial-gradient(42% 53% at 15% 94%, #FFFFFFFF 7%,
     #073AFF00 100%), radial-gradient(42% 53% at 34% 72%, #FFFFFFFF 7%,
     #073AFF00 100%), radial-gradient(18% 28% at 35% 87%, #FFFFFFFF 7%,
     #073AFF00 100%), radial-gradient(31% 43% at 7% 98%, #FFFFFFFF 24%,
     #073AFF00 100%), radial-gradient(21% 37% at 72% 23%, #D3FF6D9C 24%,
     #073AFF00 100%), radial-gradient(35% 56% at 91% 74%, #8A4FFFF5 9%,
     #073AFF00 100%), radial-gradient(74% 86% at 67% 38%, #84d9ff 24%,
     #073AFF00 100%), linear-gradient(125deg, #4EB5FFFF 1%, #4C00FCFF 100%);
    }
    
     .wrapper {
         /* width: 860px; */
         /* height: 283px; */
         width: var(--w);
         height: var(--h);
         position: relative;
         margin: 0 auto;
     }
    
     .wrapper label {
         /* width: 200px; */
         width: var(--thumbw);
         height: calc(50% - var(--m) / 2);
         cursor: pointer;
         position: absolute;
         transition: 0.25s;
         border-radius: 10px;
     }
    
     .wrapper label img,
     .wrapper label div {
         max-width: 100%;
         height: 100%;
         border-radius: 10px;
     }
    
     .wrapper input[type="radio"] {
         padding: 5px 5px 5px 10px;
          /* width: 200px; */
         /* height: 134px; */
         height: calc(50% - var(--m) / 2);
         width: var(--thumbw);
         cursor: pointer;
         position: absolute;
         z-index: -1;
         opacity: 0;
     }
    
     .wrapper input[type="radio"]+label span {
         opacity: 0;
         background: var(--bg);
         display: inline-block;
         border-radius: 7px;
         padding: 5px 0 5px 10px;
         margin-top: 5px;
         width: calc(100% - 10px);
         color: white;
     }
    
     .wrapper input[type="radio"]:checked+label span {
         opacity: 1;
         animation-delay: 1s;
         animation: fade 1s;
     }
    
     .wrapper input[type="radio"]#s1,
     .wrapper input[type="radio"]#s1+label {
         left: 0;
         top: 0;
     }
    
     .wrapper input[type="radio"]#s2,
     .wrapper input[type="radio"]#s2+label {
         /* left: 440px; */
         left: calc((var(--w)/2) + var(--m));
         top: 0;
     }
    
     .wrapper input[type="radio"]#s3,
     .wrapper input[type="radio"]#s3+label {
         /* left: 655px; */
         left: calc(var(--w)/2 + var(--thumbw) + var(--m) + 15px);
         top: 0;
     }
    
     .wrapper input[type="radio"]#s4,
     .wrapper input[type="radio"]#s4+label {
         /* left: 440px; */
          /* top: 150px; */
         left: calc((var(--w)/2) + var(--m));
         top: var(--top);
     }
    
     .wrapper input[type="radio"]#s5,
     .wrapper input[type="radio"]#s5+label {
         /* left: 655px; */
          /* top: 150px; */
         left: calc(var(--w)/2 + var(--thumbw) + var(--m) + 15px);
         top: var(--top);
     }
    
     .wrapper input[type="radio"]:checked,
     .wrapper input[type="radio"]:checked+label {
         left: 0 !important;
         top: 0 !important;
         /* width: 425px; */
         width: calc(var(--w)/2);
         height: 100%;
     }
    
     .bg {
         position: fixed;
         left: 0;
         top: 0;
         width: 100vw;
         height: 100vh;
         z-index: -1;
     }
    
     .wrapper input[type="radio"]#s2:checked~#s1+label {
         /* left: 440px; */
         left: calc((var(--w)/2) + var(--m));
     }
    
     .wrapper input[type="radio"]#s3:checked~#s1+label {
         /* left: 660px; */
         left: calc(var(--w)/2 + var(--thumbw) + var(--m) + 15px);
     }
    
     .wrapper input[type="radio"]#s4:checked~#s1+label {
         /* left: 440px; */
          /* top: 150px; */
         left: calc((var(--w)/2) + var(--m));
         top: var(--top);
     }
    
     .wrapper input[type="radio"]#s5:checked~#s1+label {
         /* left: 660px; */
          /* top: 150px; */
         left: calc(var(--w)/2 + var(--thumbw) + var(--m)*2);
         top: var(--top);
     }
    
    
     @keyframes fade {
         from {
             opacity: 0;
         }
    
         to {
             opacity: 1;
         }
     }
    
     .wrapper input[type="radio"]#s2:checked~.bg {
         background-image: radial-gradient(circle, rgba(238, 174, 202, 1) 0%, rgba(148, 187, 233, 1) 100%);
     }
    
     .wrapper input[type="radio"]#s3:checked~.bg {
         background-image: radial-gradient(circle, rgb(197, 218, 196) 0%, rgb(88, 167, 204) 100%);
     }
    
     .wrapper input[type="radio"]#s4:checked~.bg {
         background-image: radial-gradient(circle, rgb(238, 226, 174) 0%, rgb(177, 139, 131) 100%);
     }
    
     .wrapper input[type="radio"]#s5:checked~.bg {
         background-image: radial-gradient(circle, rgb(174, 238, 225) 0%, rgb(36, 163, 136) 100%);
     }
    

    現在在 :root {--w: 800px; --h: 270px;}.只需按比例更改寬度和高度即可。前往網址 https://scriptygoddess.com/resources/proportioncalc.htm 並輸入:根寬度和高度,如下圖所示

    Image Swap in Pure CSS

    現在輸入新的寬度或高度以獲得比例值。我新增了新的寬度 1000 並點擊調整大小,高度為 337.5,並在 :root {--w: 1000px; --h: 337.5px;}。這就是你所要做的。您可以看到所有影像的變化 - 寬度、高度、間隙按比例增加。

    您可以在下面的codepen連結中的:root中編輯寬度和高度的值並運行。玩得開心!
    Codepen 示範

    感謝您的觀看...

以上是純 CSS 中的圖片交換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn