如何讓文字作為CSS背景圖片顯示?

2021-03-02 前端大聯盟

作者:張鑫旭

來源:https://www.zhangxinxu.com/wordpress/2020/10/text-as-css-background-image/

在實際開發中,有時候希望文字內容可以作為背景圖片顯示,一方面是希望利用背景圖片的優勢,例如可以平鋪,另外一方面是常見的替換元素不能使用偽元素創建文字,此時只能寄希望與背景圖。

關鍵如何把文字變成背景圖呢?

通常CSS開發人員的做法是把文字導出來轉換成圖片,然後作為背景圖顯示,但是這樣成本有些高,也不利於日後的維護。

這裡給大家介紹一種實用的技術,可以讓文字作為CSS背景圖片。

一、SVG本質上就是一個圖像

SVG雖然是XML語言構成的,但是本質上就是一個圖像,是可以作為圖像使用的,例如:

<img src="zhangxinxu.svg">

此時的zhangxinxu.svg就是一個圖像,同樣的,也可以作為背景圖顯示,例如:

.example {    background: url(zhangxinxu.svg);}

但是,這裡的SVG文件都是獨立的SVG文件,和把文字導出成PNG圖片沒有任何區別,根本沒有意義嘛!

對的,請不用急,是這樣的,SVG作為一個矢量圖像,和通常的位圖有一點不一樣,那就是SVG圖像可以直接以原始碼的方式內聯在Web頁面中。

關於這個特性,可以參考我之前的這篇文章:「CSS中內聯SVG圖片有比Base64更好的形式」。

例如下面是一段顯示文本的SVG代碼:

<svg xmlns="http://www.w3.org/2000/svg">    <text>文字內容</text></svg>

是可以直接作為background-image使用的,例如:

.by-zhangxinxu {    background-image: url('<svg xmlns="http://www.w3.org/2000/svg"><text>文字內容</text></svg>');}

由於安全性限制,目前需要對部分字符進行轉義,因此,實際的CSS代碼是這樣的:

.exmaple {    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Ctext%3E文字內容%3C/text%3E%3C/svg%3E");}

相比PNG圖像的文字背景,使用SVG內聯的好處在於,我們可以輕鬆修改文字的內容,同時我們可以隨意設置文字的字號大小,顏色、描邊效果等等。

但是,每次都手寫一段SVG代碼好難哦,尤其很多前端小夥伴對SVG並不是很熟悉。

不要緊,考慮到這種情況存在,我專門做了一個生成SVG文字背景圖的工具。

二、SVG文字背景圖生成工具

您可以狠狠地點擊這裡:文字轉SVG圖像在線轉換工具

界面截圖示意如下:


最上面是配置區域,可以設置作為背景的文字內容,可以設置文字的顏色、透明度以及位置等信息。

中間是代碼區,左側是原始SVG,可以點擊圖標下載SVG文件到本地;右側是轉義的可以直接內聯使用的SVG代碼,HTML和CSS中均可內聯使用。

最下面是預覽區域。

如果需要其他配置項

實際開發中的需求是千變萬化的,工具目前內置的配置項不一定能覆蓋所有的場景,此時可以這麼處理,直接修改左側文本域中的SVG代碼,此時右側的轉義SVG代碼會自動同步,例如,如果我們希望背景文字帶有旋轉效果,這樣可以作為水印圖片使用,則可以在已經生成的SVG代碼中的元素上設置45度旋轉相關的代碼。

一種方法是直接在<svg>元素上設置傳統DOM元素的CSS style設置,例如:

另外一種方法就是<text>元素上使用SVG元素自動的transform屬性進行設置,但是SVG中的transform變換坐標和CSS是很不一樣的,直接<text transform="rotate(-45)">是不會有預期的旋轉效果的,因為默認SVG的變換中心點是左上角,因此,設置transform="rotate(-45)"會讓文字不可見。

關於SVG的transform變換坐標體系可以參考我之前寫的這篇文章:「理解SVG transform坐標變換」

<text>元素也能圍繞中心點變換有2個方法,一種是使用translate()函數先偏移、然後再旋轉,然後在偏移復原,這種方法囉嗦了一點,另外一種方法就是使用SVG中rotate()函數的可選參數,也就是第2個參數,就是可以指定旋轉的中心點坐標,這個特性SVG獨有,Canvas中是沒有的。

代碼演示如下截圖所示:


其中,可以看到專門設置了SVG元素的width寬和height高,因為如果不設置,按照目前的CSS background-size的尺寸渲染規範,SVG的尺寸會採用容器的尺寸,rotate()函數的第2個參數就需要設置為容器元素的寬高的一半才能讓文字居中旋轉。

三、文字背景圖應用案例

這裡拋磚引玉,舉幾個使用文字作為背景圖的例子。

1. 水印

例如為防止截圖,會給頁面,或者聊天軟體背景等增加文字水印。

以前幾乎都是通過生成一個專門的PNG圖片實現,現在可以直接代碼內聯,例如點擊下面這個按鈕,大家就可以看到我這篇文章的實時水印效果了。

不要害怕,用力點擊我

相關CSS代碼如下所示:

.target {    background: url("data:image/svg+xml,%3Csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3E%3Ctext x='50%25' y='50%25' font-size='14' fill-opacity='0.5' text-anchor='middle' dominant-baseline='middle' transform='rotate(-45, 100 100)'%3Ezhangxinxu.com%3C/text%3E%3C/svg%3E");}

截圖效果如下所示:

2. 輸入框其他位置的佔位符提示效果

常規的佔位符都是在輸入框的左上方,或者右上方,如果我們希望提示的佔位符在右下角,則就可以使用這裡的文本圖像技術實現。

比方說下面這個多行文本域輸入框,當你輸入內容,右下角的提示內容就會消失,沒有內容的時候就又會顯示(實時效果,可以親自體驗下)。

相關HTML和CSS代碼如下所示:

<textarea class="custom-placeholder" required></textarea>

.custom-placeholder {    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Ctext x='100%25' y='96%25' font-size='12' fill='%23a2a9b6' font-family='system-ui, sans-serif' text-anchor='end'%3E富強民主文明和諧美麗%3C/text%3E%3C/svg%3E") no-repeat right 10px bottom 5px;}.custom-placeholder:valid {    background: none;}

因為這裡的文本是右對齊,下對齊,因此,設置text-anchor屬性值是end,同時x, y屬性值都是100%或者接近100%。

3. 視頻無法播放提示

HTML5 <video>元素中的視頻如果因為地址錯誤等原因無法播放,是沒有辦法像普通元素那樣寫入一段錯誤提示文字,因為<video>元素是替換元素,寫在標籤裡面的內容都會被忽略。

此時,可以讓視頻播放出錯的時候以背景圖的形式顯示文字就可以了。

比方說下面這個實時例子,就是一個故意寫錯了地址的MP4視頻,大家可以看到「視頻無法預覽」的白色提示文字,就是使用這篇文章提供的技術實現的。

相關代碼如下所示:

video src="xxx.png" type="video/mp4" width="360" height="240" onerror="this.classList.add('error')"></video>

video.error{    background: #000 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Ctext x='50%25' y='50%25' font-size='14' fill='%23ffffff' font-family='system-ui, sans-serif' text-anchor='middle' dominant-baseline='middle'%3E視頻無法預覽%3C/text%3E%3C/svg%3E") no-repeat center;}

簡單易懂體驗絕佳老少皆宜。

四、總結一下

如果想讓文字內容直接作為背景圖片顯示,可以使用SVG元素作為中間橋梁實現。

關鍵問題是SVG元素的獲得不太容易,因此,我就專門給大家開發了一個工具,通過簡單配置實現想要的CSS文字背景代碼。

同時介紹了如果通過修改左側輸入框得到自定義的文字背景效果。

最後,介紹了3個具有代表性的案例,展示了文字作為背景圖片的一些妙用,拋磚引玉,希望可以啟發大家在實際開發中的應用。

OK,技術本身並不難,難的是當遇到類似場景的時候可以想到可以直接使用代碼實現,而不是導出圖片。

我們在虛擬的空間與你相遇,期待可以碰撞出不一樣的火花

相關焦點

  • CSS背景顏色、CSS背景圖片
    css可以添加背景顏色和背景圖片設置背景顏色這個背景顏色直接設置就好了,很簡單的。background: #eee;設置背景圖片此屬性值就是圖片的路徑。平鋪 no-repeat:不平鋪(圖片單張顯示)
  • 常見的CSS文字居中顯示
    : #ccc; text-align: center;}.box span{ vertical-align: middle; line-height: 200px;}2、利用display:table-cell實現水平垂直居中顯示 html
  • PS如何在淺色背景中使文字清晰顯示?
    PS如何在淺色背景裡面是讓文字進行清晰顯示?這個前提條件是一定不能改變文字的顏色,下面小編就來教大家如何使文字變得清晰吧。1.首先我們將背景設置為粉色,文字設置為白色,可以看到不是很鮮明,看不清楚文字,這個如何來解決呢?
  • 《快影》文字視頻加背景圖片教程
    在製作文字視頻的時候,背景圖片可以說是比較重要的了,很多小夥伴都會在文字視頻中添加上自己喜歡的圖片作為背景。那麼快影文字視頻怎麼添加背景圖片呢?下面小編就來為大家介紹一下具體的操作方法,一起來看看吧! 在製作文字視頻的時候,背景圖片可以說是比較重要的了,很多小夥伴都會在文字視頻中添加上自己喜歡的圖片作為背景
  • 使用 CSS mask 實現圖片的斜線拼接
    但是呢,剛接到這個需求的時候,開發是抓狂的——第一反應就是用canvas畫圖,這得多累啊,只是要顯示張圖片而已,竟然還要動用一坨JS,O__O 「…不過依稀記得,CSS 貌似有個遮罩的特性,可以實現圖片的部分顯示的效果的。
  • CSS新手閱讀的CSS技巧十則
    也就是說,可以為頁面指定兩個CSS文件,一個用於屏幕顯示,一個用於列印:<link type=」text/css」 rel=」stylesheet」 href=」stylesheet.css」 media=」screen」 /><link type=」text/css」 rel=」stylesheet」 href=」printstyle.css」 media
  • 校內網css代碼添加背景圖片常用代碼
    例子:給部分文字加背景顏色給部分文字加背景顏色 表格背影顏色:style="background-color:red" 2.背景圖片:background-image 語法:{background-image: url(URL)|none}
  • 前端開發必備的CSS命名規範與常用CSS代碼集合
    ,style.css主要的module.css模塊base.css基本共用layout.css布局,版面themes.css主題columns.css專欄font.css文字、字體forms.css表單mend.css補丁print.css列印三、藉助翻譯工具如果遇到不常用的一些名稱,可以藉助翻譯工具進行翻譯取其英文命名。
  • CSS基礎——使用圖片填充元素背景
    在上面的網頁代碼中,定義了樣式happiy,happiy樣式使用happiy.png作為元素的背景圖片,樣式的寬度和高度是500像素和450像素,使用該樣式的HTML元素寬度和高度值也將被設置為500像素和450像素,並使用happiy.png作為背景圖片。下圖是瀏覽器顯示效果。
  • CSS常用技巧介紹
    比如: 以下為引用的內容: <link type="text/css" rel="stylesheet" href="stylesheet.css" media="screen" /><link type="text/css" rel="stylesheet
  • Word背景圖片與高亮突出文字背景顏色的設置和去掉方法
    文檔用漂亮的圖片做背景將增色不少。在 Word 中,給文字添加背景有三種情況,一種是用灰色給文字做背景,第二種是用高亮突出顏色做背景,即以不同顏色突出顯示文本,第三種就是用圖片做背景,以下是這三種情況的具體設置方法和去掉背景的方法,實例均以 Word 2016 為例。
  • 用CSS如何實現單行圖片與文字垂直居中
    首頁 > 教程 > 關鍵詞 > CSS最新資訊 > 正文 用CSS如何實現單行圖片與文字垂直居中
  • web前端學習路線css屬性
    下面來給大家講講css相關知識:學習目標· 1、css屬性和屬性值的定義· 2、css文本屬性· 3、css列表屬性· 4、css背景屬性· 5、css邊框屬性/oblique/normal(取消傾斜,常規顯示);說明:italic和oblique都是傾斜的文字, 但區別在於Italic是指斜體字,而Oblique是傾斜的文字,對於沒有斜體的字體應該使用Oblique屬性值來實現傾斜的文字效果.
  • CSS文字處理實用小技巧總結
    作為程式設計師的我們,書寫代碼也需要大量的技巧。一份良好的代碼能讓人耳目一新,讓人容易理解,同時也讓自己成就感滿滿。
  • CSS背景屬性Background詳解
    css2 中的背景(background)CSS2 中有5個主要的背景(background)屬性,它們是:background-color: 指定填充背景的顏色。background-image: 引用圖片作為背景。background-position: 指定元素背景圖片的位置。
  • win7系統為桌面添加自己喜歡的文字作為桌面背景,學習一下
    在你使用電腦工作的時候,是否會覺得電腦的桌面很單調乏味,是否想讓自己的電腦桌面與眾不同,今天我教大家如何在系統的桌面上添加自己喜歡的文字,或是自己喜歡的一句經典臺詞,亦或者名人名言座右銘,總之是你自己喜歡的文字,這樣當你的電腦啟動開機進入桌面後,你馬上就能看到自己自己喜歡的文字出現在自己的眼前,自己看到這些自己喜歡的文字後,就會感覺自己充滿了力量。
  • HTML+CSS:認識css的概念與語法,了解css的優勢
    本篇文章先帶大家認識一下css的概念與語法,了解一下css的優勢之處。1)css的概念與語法CSS全稱為「層疊樣式表 (Cascading Style Sheets)」,它主要是用於定義HTML內容在瀏覽器內的顯示樣式,比如文字大小、顏色、字體加粗等。
  • 利用CSS、JavaScript及Ajax實現圖片預加載的三大方法
    圖片預先加載到瀏覽器中,訪問者便可順利地在你的網站上衝浪,並享受到極快的加載速度。這對圖片畫廊及圖片佔據很大比例的網站來說十分有利,它保證了圖片快速、無縫地發布,也可幫助用戶在瀏覽你網站內容時獲得更好的用戶體驗。本文將分享三個不同的預加載技術,來增強網站的性能與可用性。
  • 使用css給圖片添加陰影入門篇
    首頁 > 教程 > 關鍵詞 > CSS最新資訊 > 正文 使用css給圖片添加陰影入門篇
  • HTML+CSS常見選擇題
    標記用於以預定義的格式顯示文本,即文本在瀏覽器顯示時遵循在HTML源文檔中定義的格式()A. <ADDRESS>B. <BLOCKQUOTE>C. <PRE>D.