紋理文本

来源:http://www.cnblogs.com/xiaohuochai/archive/2017/09/10/7498757.html
-Advertisement-
Play Games

前面的話 本文將通過多種方式實現紋理文本的效果 背景裁切 對於實現紋理文本的效果,腦海中最直接能想到的辦法可能是背景裁切background-clip 使用線性漸變來填充文本背景 下麵使用一張楓葉的背景,來製作紋理文本 當然了,放一張動態gif圖,也是沒問題的 如果想要讓填充動起來,可以通過anim ...


前面的話

  本文將通過多種方式實現紋理文本的效果

 

背景裁切

  對於實現紋理文本的效果,腦海中最直接能想到的辦法可能是背景裁切background-clip

  使用線性漸變來填充文本背景

<style>
.box-with-text { background-image: linear-gradient(135deg,hsl(50, 100%, 70%), hsl(320, 100%, 50%)); -webkit-text-fill-color: transparent; -webkit-background-clip: text; background-size: cover;font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  下麵使用一張楓葉的背景,來製作紋理文本

<style>
.box-with-text { background-image: url(http://7xpdkf.com1.z0.glb.clouddn.com/runjs/img/leaf.jpg); -webkit-text-fill-color: transparent; -webkit-background-clip: text; background-size: cover;font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  當然了,放一張動態gif圖,也是沒問題的

<style>
.box-with-text { background: url(http://7xpdkf.com1.z0.glb.clouddn.com/runjs/img/fire.gif) 0 -130px /cover; -webkit-text-fill-color: transparent; -webkit-background-clip: text; font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  如果想要讓填充動起來,可以通過animation移動背景的位置和尺寸來添加動畫

<style>
@keyframes stripes {100% {background-position: 0 -50px;}}
.box-with-text {animation: stripes 2s linear infinite;background:linear-gradient(crimson 50%, #aaa 50%) 0 0/ 100% 50px ; -webkit-text-fill-color: transparent; -webkit-background-clip: text; font:bolder 100px/100px Impact;position:absolute;}
</style>
<div class="box-with-text">match</div>

  使用background-clip背景裁切的技術,文本可以被選中。但是,由於只有webkit內核的瀏覽器支持,因此並不是跨瀏覽器的好方案

 

SVG

  如果要對文本紋理做更精密的設置,且考慮瀏覽器相容性,最好的方案還是使用SVG文本

   首先,可以通過SVG動畫,來實現文本紋理的動態效果

<svg height="100" xmlns="http://www.w3.org/2000/svg" id="svg">
  <defs>
    <style>
     .text{font:bolder 100px/100px Impact;} 
    </style>  
    <radialGradient id="Gradient1">
      <animate attributeName="r" values="0%;150%;100%;0%" dur="5" repeatCount="indefinite" />
      <stop offset="0%" stop-color="#fff">
        <animate attributeName="stop-color" values="#333;#FFF;#FFF;#333" dur="5" repeatCount="indefinite" />
      </stop>
      <stop offset="100%" stop-color="rgba(55,55,55,0)"/>
    </radialGradient>
  </defs>  
  <text class="text" dominant-baseline="hanging" y="10" x="0" fill="url(#Gradient1)">match</text>
</svg>

  使用SVG圖案pattern,可以實現更精細的紋理動畫效果

<svg height="100" xmlns="http://www.w3.org/2000/svg" id="svg">
  <defs>
    <style>
      .text{font:bolder 100px/100px Impact;}   
      @keyframes stroke {
        50% {
          stroke-width:30;
          stroke-opacity: .5;
        }
      } 
      .g-spots circle{stroke-width: 0;animation: stroke 2s infinite;}
      .g-spots circle:nth-child(1) {animation-delay: -0.4s;}
      .g-spots circle:nth-child(2) {animation-delay: -1.2s;}
    </style>  
  <pattern id="p-spots" width="0.12" height="0.2">
    <g class="g-spots">
      <circle r="10" cx="10" cy="5" fill="#3F0B1B" stroke="#3F0B1B" />
      <circle r="10" cx="25" cy="20" fill="#CF423C" stroke="#CF423C"/> 
    </g>
  </pattern>
  </defs>  
  <text class="text" dominant-baseline="hanging" y="10" x="0" stroke="url(#p-spots)" fill="none" stroke-width="5" stroke-opacity="0.5">match</text>
</svg>

  如果想實現虛線動畫的效果,則需要使用SVG文本的虛線描邊

<svg height="100" xmlns="http://www.w3.org/2000/svg" id="svg">
  <defs>
    <style>
      @keyframes stroke {100% { stroke-dashoffset: -400;}}    
      .text{font:bolder 100px/100px Impact;} 
      .use-text{fill: none;stroke-width: 6;stroke-dasharray: 70 330;stroke-dashoffset: 0;animation: stroke 6s infinite linear;}
      .use-text:nth-child(5n+1){stroke: pink;animation-delay: -1.2s;}
      .use-text:nth-child(5n+2){stroke: lightblue;animation-delay: -2.4s;}
      .use-text:nth-child(5n+3){stroke: lightgreen;animation-delay: -3.6s;}
      .use-text:nth-child(5n+4){stroke: orange;animation-delay: -4.8s;}
      .use-text:nth-child(5n+5){stroke: tan;animation-delay: -6s;}
    </style>  
  </defs>  
  <symbol id="s-text">
    <text class="text" dominant-baseline="hanging" y="10" x="0" >match</text>
  </symbol>  
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>
  <use xlink:href="#s-text" class="use-text"></use>  
</svg>

 

混合模式

  使用CSS3的新屬性混合模式中的元素混合mix-blend-mode屬性也可以實現類似的效果。元素混合mix-blend-mode應用於兩個元素之間的混合,這時就需要將文字和紋理效果分開為兩個元素

<style>
.box-with-text { background-image: linear-gradient(135deg,hsl(50, 100%, 70%), hsl(320, 100%, 50%)); background-size: cover;font:bolder 100px/100px Impact;position:absolute;}
.text{mix-blend-mode: lighten; background:white;}
</style>
<div class="box-with-text"><span class="text">match</span></div>

  關於背景為圖片的效果就不再贅述,和backgroung-clip方法類似

  但是,由於它是兩個元素的混合,而不僅僅是應用背景樣式。因此,其甚至可以將視頻作為紋理

<style>
.box{position:relative;height:100px;overflow: hidden;}
.box-with-text { mix-blend-mode: lighten; background:white;font:bolder 100px/100px Impact;position:absolute;height: 200px;width: 280px;}
</style>
<div class="box">
  <video class="box-with-text" src="http://7xpdkf.com1.z0.glb.clouddn.com/runjs/img/sunshine.mp4" width="280" height="100" autoplay loop></video>
  <div class="box-with-text">match</div>  
</div>

  當然,還可以是有聲動畫

<style>
.box{position:relative;height:100px;overflow: hidden;}
.box-with-text { mix-blend-mode: lighten; background:white;font:bolder 100px/100px Impact;position:absolute;height: 176px;width: 320px;}
</style>
<div class="box">
  <video id="video1" class="box-with-text" src="http://7xpdkf.com1.z0.glb.clouddn.com/mov.mp4" width="320" height="100" loop></video>
  <div class="box-with-text">match</div>  
</div>
<button onclick = 'video1.play()'>播放</button>
<button onclick = 'video1.pause()'>暫停</button>  

  雖然混合模式有更大的自由度,但是由於其是CSS3的屬性,IE瀏覽器、android4.4-不支持,safari和IOS需要添加-webkit-首碼。瀏覽器相容性並不是很好

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. nextSibling 屬性可返回某個節點之後緊跟的節點(處於同一樹層級中)。 語法: 說明:如果無此節點,則該屬性返回 null。 2. previousSibling 屬性可返回某個節點之前緊跟的節點(處於同一樹層級中)。 語法: 說明:如果無此節點,則該屬性返回 null。 註意: 兩個 ...
  • 如果js屬於剛剛入門階段,不建議抱著書一直看下去,因為這樣你不容易明白這些定義和概念的用法.看著看著就會很迷惑的。建議先試著用原生JS寫一些小項目和小程式,然後試著寫博客做些筆記,把遇到的困惑寫下來,帶著疑問去學習。 如果有一定的js基礎或者用JQuery等一些庫做過一些小東西的話,可以先看《Jav ...
  • bootstrap前端開發工具 柵格系統 版心 .container 柵格佈局 (一行分為12格,響應式佈局) .row .col md 12 .col sm 12 .col xs 12 排版 文本對齊: .text center; .text left; .text right; 塊標簽對齊: . ...
  • html文件 ...
  • 1 if (!Object.keys) { 2 Object.keys = (function () { 3 var hasOwnProperty = Object.prototype.hasOwnProperty, //原型上的方法,只取自身有的屬性; 4 hasDontEnumBug = !({... ...
  • 1.註釋: html的註釋:<!--我是註釋--> CSS的註釋:/*我是註釋*/ JS的註釋://我是註釋 2.變數: 變數要先聲明再賦值,如下: var mychar; mychar="javascript"; var mynum = 6; 變數可以重覆賦值,如下: var mychar; my ...
  • 任務 1.在第27行處補充完整,實現當點擊"全選"按鈕時,將選中所有的覆選項。 提示:document.getElementsByTagName("input")獲取的是所有input標簽,包括覆選項和按鈕,所以要判斷是否是覆選項,如是選中。 2.在第33行處補充完整,實現當點擊"全不選"按鈕時,將 ...
  • JavaScript正則表達式入門 ===================== 常常用戶在一個網頁里登錄註冊帳號時,要輸入用戶名、手機號、郵箱地址、設置密碼等項目。而對於用戶輸入的用戶名是否規範,輸入的是否是郵箱地址、密碼強度如何等等都可以通過一 正則表達式 制定相應的規則來驗證校檢,來實現一個非常 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...