• <button id="eiyoe"><acronym id="eiyoe"></acronym></button>
    <em id="eiyoe"></em>

  • <rp id="eiyoe"><acronym id="eiyoe"><input id="eiyoe"></input></acronym></rp>
      查看: 434|回復: 0
      上一主題 下一主題

      CSS 實現多彩、智能的陰影效果

      80292

      主題

      0

      好友

      積分

      離線 發信

      跳轉到指定樓層
      樓主
      發表于 2021-07-25 19:58 | 只看該作者 | 倒序瀏覽

      背景

      有沒有想過如何創建從前景元素中繼承某些顏色的陰影效果?閱讀本文并找出如何實現方法吧!

      前幾天我經過家得寶(Home Depot,美國家得寶公司,全球領先的家居建材用品零售商),他們正在大規模展銷正在出售的智能燈 💡,其中一種是一系列燈泡位于電視機后面,它們會投射出與電視機前景屏幕上顯示的顏色相近的燈光,類似于以下圖片所示。

      注意電視后面發生了什么。電視機屏幕前景中顯示的顏色被燈投影成彩色陰影背景。隨著屏幕上顏色的變化,背景投影顏色也發生變化。真的很酷,對吧?

      看到這一點后,自然而然地我首先想到的是,能否使用 web 開發技術創建一個五顏六色的,并且足夠聰明可以模擬前景顏色的陰影呢?事實證明,在只使用 CSS 的情況下,完全可以實現這種效果。在本文中,我們將研究如何實現。

      開干!

      令其成真

      在接下來的段落中你將會發現,剛開始時,乍一看僅使用 CSS 來創建智能的彩色陰影似乎是一項艱巨的任務,當我們循序漸進,把困難部分拆分成更小的部分時,你就會發現一切都會變得容易理解消化。在接下來的章節中,我們將創建一個如下所示的示例:

      你看到的是一張壽司 🍣 的圖片,后面有與前景顏色相對應的陰影。為了強調我們所做的是動態的,給陰影增加了一個脈動動畫效果。通過這個有效的示例,讓我們深入探討如何僅在使用 HTMLCSS 的情況下讓一切變得生動起來。

      展示圖片

      用于展示壽司 🍣HTML 如下所示并沒有什么特別:

      <div class="parent">
        <div class="colorfulShadow sushi"></div>
      </div>

      我們有一個父級 div 元素 .parent,它包含一個子級元素 .suchi 用于展示 🍣。我們通過使用一張背景圖片的形式來實例化 🍣,.sushi 元素的具體樣式規則如下:

      .sushi {
        margin: 100px;
        width: 150px;
        height: 150px;
        background-image: url("https://www.kirupa.com/icon/1f363.svg");
        background-repeat: no-repeat;
        background-size: contain;
      }

      在上面樣式規則中,我們將 div 設置為 150 * 150 寬高像素,并且設置了 background-image 及相關屬性,如果展示一下我們現在所實現的結果,可以看到如下圖所示的內容。

      創建陰影

      現在我們已經展示出了我們的壽司 🍣 圖片,剩下更加有趣的部分就是來定義陰影。我們將使用指定一個子偽元素 ::after 來定義陰影,它將做 3 件事情:

      • 直接位于圖片所在 div 的后面;
      • 繼承與父元素相同的背景圖像;
      • 通過濾鏡產生出多彩的 drop-shadow 陰影效果。

      上述3個功能由以下2個樣式規則實現:

      .colorfulShadow {
        position: relative;
      }
      .colorfulShadow::after {
        content: "";
        width: 100%;
        height: 100%;
        position: absolute;
        background: inherit;
        background-position: center center;
        filter: drop-shadow(0px 0px 10px rgba(0, 0, 0, 0.50)) blur(20px);
        z-index: -1;
      }

      花一點時間來瀏覽下這里的實現,密切關注每個屬性和對應值。最值得注意的是 background 屬性和 filter 屬性。 background 的值是 inherit,這意味著它將繼承父級元素的背景值:

      background: inherit;

      filter 屬性定義了兩個濾鏡值:drop-shadowblur

      filter: drop-shadow(0px 0px 10px rgba(0, 0, 0, 0.50)) blur(20px);

      我們的 drop-shadow 濾鏡設置了一個 50% 透明度的黑色陰影。blur 濾鏡為為元素設置 20px 的模糊效果。這兩個濾鏡的結合最終就可以創造出多彩的陰影,當這兩條樣式規則生效時,我們就可以看到如下圖出現在壽司 🍣 圖像后面彩色的陰影:

      到這一點,我們已經實現了很多。為了完整性,如果你想要多彩的陰影具有放大縮小的動畫效果,以下額外的 CSS 可以幫你實現:

      .colorfulShadow {
        position: relative;
      }
      .colorfulShadow::after {
        content: "";
        width: 100%;
        height: 100%;
        position: absolute;
        background: inherit;
        background-position: center center;
        filter: drop-shadow(0px 0px 10px rgba(0, 0, 0, 0.50)) blur(20px);
        z-index: -1;
        /* animation time! */
        animation: oscillate 1s cubic-bezier(.17, .67, .45, 1.32) infinite alternate;
      }
      
      @keyframes oscillate {
        from {
          transform: scale(1, 1);
        }
        to {
          transform: scale(1.3, 1.3);
        }
      }

      如果你想在不使用循環動畫效果的情況下增強交互性,也可以使用 CSS transition 來改變陰影的行為,如在 hover 操作情況下。需要強調的難點是對待偽元素只需要像對待用 HTML 創建的或 JavaScript 動態創建的元素一樣,唯一的不同是這個元素完全是僅使用 CSS 創建的!

      結論

      偽元素允許我們使用 CSS 來創建通常在 HTMLJavaScript 領域內完成的元素創建任務。對于我們多彩的智能陰影來說,我們依賴于父元素有一個背景圖像集,這使得我們定義一個既可以繼承父級背景細節又可以設置模糊效果和投影效果的子元素變得容易。雖然這一切都很好,減少了我們大量的復制粘貼工作,但是這種方法也不是很靈活。

      如果我想將這樣的陰影應用到一個不只是帶有背景圖像的空元素上,該怎么辦呢?如果我有一個 HTML 元素如一個按鈕或組合框,我想應用這種陰影效果呢?一種解決方案是依靠 JavaScript 復制 DOM 中的相應元素,將其放置在前臺元素底層,應用過濾器,這樣也是一種方法。雖然這可以實現效果,但我想到這個有點重復 DOM 元素的沉重過程就不寒而栗。更糟糕的是,JavaScript 沒有將你想提供的任意視覺意向轉換為渲染目標位圖的能力!🥶

      本文是翻譯,原文地址請瀏覽:https://www.kirupa.com/html5/creating_colorful_smart_shadows.htm
      本文地址:https://www.cnblogs.com/dragonir/p/14758359.html 作者:dragonir

      到此這篇關于CSS 實現多彩、智能的陰影的文章就介紹到這了,更多相關css實現陰影內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

      來源:http://www.jb51.net/css/775035.html