【CSS border-image】圖片邊框拉伸不變形,css邊框屬性,用圖片打造個性化邊框

當用圖片做邊框時,還要考慮到一個問題,如何適應邊框的寬高變化,并且圖片不變形?本文深入解析 CSS border-image,用圖片打造個性化邊框。下圖的效果就是利用border-image屬性實現的圖片邊框自適應。

本文將border-image原理、如何切圖、css代碼都展示出來,一文看懂!仔細看完,希望能幫到你!

?一、什么是 border-image?

?border-image 是 CSS3 引入的高級邊框屬性,允許使用圖片替代傳統的線條邊框,實現復雜的視覺效果(如花紋邊框、可縮放圖標邊框等)。其核心原理是將一張圖片切割成9個區域(類似九宮格),分別對應元素的4個角、4條邊和中心區域,再將這些區域分配到元素的邊框和背景位置,從而實現靈活的邊框設計。

一定要仔細看后面的案例3、案例4,看不明白回來繼續看這里的切圖!!!!!!

二、border-image 核心屬性與原理 ?

border-image 是一個簡寫屬性,包含以下5個子屬性(按順序): ?
css

border-image: source slice width outset repeat;

各屬性含義如下:

1. border-image-source:指定邊框圖片的來源 ?
值:url(圖片路徑) 或 linear-gradient(漸變)(CSS3支持漸變作為邊框)。 ?
示例: ?
? css

 border-image-source: url('border.png'); /* 引用外部圖片 */border-image-source: linear-gradient(45deg, red, blue); /* 漸變邊框 */

2. border-image-slice:切割圖片為9個區域 ?
原理:將圖片按指定數值或百分比切割成上、右、下、左四條分割線,形成九宮格(如下圖)。

?

以這張圖為例,在項目頁面,確定好四個角的切割尺寸,對應上、右、下、左的順序,數值分別是:94px、130px、61px、154px。

值: ?
? 數值:1-4個數值(單位:px 或無單位,無單位時視為「像素」),分別對應上、右、下、左四條切割線距離圖片邊緣的距離。 ?
? ? css

? ? border-image-slice: 30; /* 四邊均切割30px */border-image-slice: 20 15 30 10; /* 上20px,右15px,下30px,左10px */

?百分比:基于圖片自身尺寸的百分比切割。 ?
? ? css

border-image-slice: 10%; /* 四邊均切割10% */

注意: ?
? 切割線數值需小于圖片尺寸,否則可能導致區域重疊或丟失。 ?
? 若數值后加 fill,則中心區域(第5塊)會被保留并作為背景顯示(默認不保留): ?
? ? css

border-image-slice: 30 fill; /* 保留中心區域 */

3. border-image-width:設置邊框寬度 ?
作用:定義邊框圖片的顯示寬度,決定切割后的區域如何縮放適應元素的邊框。 ?
值: ?
? 數值:1-4個數值(單位:px、%、em等),對應四邊寬度。 ?
? ? css

? ? border-image-width: 10px; /* 四邊寬度均為10px */border-image-width: 20px 15px; /* 上下20px,左右15px */

?關鍵詞: ?
? ? border-box:寬度等于元素的 border-width(需先設置 border-width)。 ?
? ? content-box:寬度基于元素內容區域計算。 ?
示例: ?
? css

? border-width: 30px; /* 必須先設置border-width */border-image-width: border-box; /* 邊框寬度與border-width一致 */

4. border-image-outset:設置邊框外擴距離 ?
作用:使邊框圖片向元素外部延伸指定距離(類似“投影”效果,但圖片會超出元素邊界)。 ?
值:1-4個數值(單位:px、%等),正數表示向外延伸,負數表示向內收縮。 ?
? css

? border-image-outset: 5px; /* 四邊外擴5px */

5. border-image-repeat:控制邊框圖片的重復方式 ?
作用:定義4條邊的圖片區域如何重復或拉伸以填滿邊框。 ?
值: ?
? 平鋪(repeat):圖片區域重復排列(可能出現接縫)。 ?
? 拉伸(stretch):圖片區域拉伸至填滿邊框(可能變形)。 ?
? ?round:智能平鋪,自動縮放圖片使邊緣無縫銜接。 ?
? ?space:平鋪時在圖片間添加空白,避免拉伸變形。 ?
示例: ?
? css

? border-image-repeat: repeat; /* 四邊均平鋪 */border-image-repeat: stretch round; /* 上下拉伸,左右智能平鋪 */

三、實戰案例:從基礎到進階 ?

案例1:基礎邊框圖片(單一邊框)

?

需求:用一張帶邊框的圖片(如 上圖)作為元素邊框,四邊切割30px,寬度自適應。 ?
(圖片尺寸:72px×72px,四周24px為邊框圖案,中心24px×24px為透明) ?

HTML: ?
htm

<div class="box">中間</div>

CSS: ?
css

.box {width: 300px;height: 200px;border: 24px solid transparent; /* 必須設置border-width,顏色設為透明 */border-image: url('border.png') 30 stretch; /* 切片24px,拉伸顯示 */
}

效果: ?

圖片四邊的24px區域作為邊框,中心區域透明(因未加 fill)。 ?
邊框隨元素尺寸自動拉伸(stretch 導致圖片變形)。

案例2:平鋪邊框(避免拉伸變形) ?

需求:使用花紋圖片作為邊框,平鋪顯示避免變形。 ?

CSS: ?
css

.box {border: 24px solid transparent;border-image: url('pattern-border.png') 24 repeat; /* 切片24px,平鋪 */
}

效果: ?

邊框圖片以24px為單位平鋪,花紋重復排列,無拉伸變形。

案例3:自定義四邊樣式(不同切片與重復方式)

?
需求:上下邊框使用拉伸效果,左右邊框使用平鋪效果。? 如下圖

CSS: ?

.box {width: 400px;/* 寬度可以改變 */height: 50px;/* 高度可以改變 */border:40px solid transparent; /* 必須設置,顏色設為透明 */border-image: url('./images/border.png') 94 130 61 154 / 94px 130px 61px 154px stretch repeat;/* 切片:上94px,右130px,下61px,左154px */
}

解析:

  • ?94 130 61 154:上切割94px,右切割130px,下切割61px,左切割154px。 ?
  • / 94px 130px 61px 154px:border-image-width 的簡寫,上高94px,右寬130px,下高61px,左寬154px。 ?
  • stretch repeat:上下邊框拉伸,左右邊框平鋪。
案例4:保留中心區域(作為背景)

?需求:邊框圖片的中心區域作為背景顯示(如帶紋理的卡片)。

?CSS: ?

.box {width:400px;height: 100px;border: solid transparent;border-image:url(./images/border3.png) 46 224 32 31 fill;/* 加fill保留中心區域 */border-width: 46px 224px 32px 31px;background-color: f0f0f0; /* 中心區域背景色(可選) */
}

效果:

?
中心區域(原圖片中間部分)作為背景填充元素內部,與邊框無縫銜接。

四、注意事項與最佳實踐 ?

1. 必須先設置 border-width: ?
? ?border-image 依賴 border-width 確定邊框尺寸,否則無法顯示。 ?

2. 瀏覽器兼容性: ?
? ?現代瀏覽器(Chrome/Firefox/Safari)均支持,IE11+ 部分支持(需加 -ms前綴)。 ?

3. 性能優化: ?
? ?優先使用 SVG 圖片(矢量圖)作為邊框,避免拉伸模糊。 ?
? ?復雜邊框可拆解為多個簡單圖層,減少 border-image 的計算量。 ?

4. 與其他屬性配合: ?
? ?box-sizing: border-box:確保邊框圖片不影響元素尺寸計算。 ?
? ?background-clip: padding-box:調整背景顯示范圍,避免與邊框沖突。 ?

五、常見問題解答

?Q:邊框圖片不顯示怎么辦? ?
? A:檢查是否設置了 border-width,且 border-color 不為 transparent(除非需要透明邊框)。 ?

Q:圖片拉伸變形嚴重如何處理? ?
? A:使用 repeat 或 round 替代 stretch,或切分更小的重復單元圖片。 ?

Q:如何讓邊框圖片覆蓋背景? ?
? A:通過 z-index 或 position 調整元素層級,或使用 background-clip 控制背景顯示區域。 ?

六、總結:border-image 的應用場景 ?

  • 自定義按鈕邊框:如帶圖標或花紋的可縮放按鈕。 ?
  • 卡片設計:為卡片添加帶紋理的邊框和背景。 ?
  • 分割線/裝飾線:用圖片實現復雜樣式的分隔線。 ?
  • 響應式設計:通過九宮格切片實現邊框圖片隨元素尺寸自適應。 ?

小伙伴們,看到這里,你讀懂了嗎?動手實踐一下,給我點個贊吧!

通過靈活組合 border-image 的各屬性,能輕松打破傳統邊框的限制,為設計注入更多創意!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81695.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

14. LayUI與Bootstrap框架使用

引言 在前端開發中,UI框架可以大大提高開發效率。今天我將對比學習兩個流行的前端UI框架:LayUI和Bootstrap。這兩個框架各有特點,分別適用于不同的場景。 1. 框架概述 LayUI LayUI是一款國產的前端UI框架,由賢心開發,特點是輕量、簡單、易用。它采用了經典的模塊化方式…

購物車系統的模塊化設計:從加載到結算的全流程拆解

購物車系統的模塊化設計:從加載到結算的全流程拆解? 一、購物車信息分頁加載模塊:大數據量下的流暢體驗二、商品信息展示三、購物車管理模塊:操作邏輯的閉環設計四、商品金額計算模塊:實時同步的動態數據中心在電商應用中,購物車頁面是用戶操作最頻繁的核心場景之一。合理…

Veeam Backup Replication Console 13 beta 備份 PVE

前言 通過Veeam Backup & Replication控制臺配置與Proxmox VE&#xff08;PVE&#xff09;服務器的連接&#xff0c;包括主機地址、用戶名密碼和SSH信任設置。隨后詳細說明了部署備份Worker虛擬機的步驟&#xff0c;涵蓋網絡配置和VM創建。接著指導用戶創建PVE虛擬機備份任…

C++ 寫單例的辦法

先在頭文件聲明&#xff1a; 聲明一個COemInstancer的 _this指針&#xff1a; static COemInstance* _this; .然后在文件外層這樣寫&#xff1a; #define CXXModule COemInstance::instance() #define ExecuteCommand(ClassName,RunCommand) class Tempclass##ClassName\ …

ETL工具:Kettle,DataX,Flume,(Kafka)對比辨析

1. 各自特點 Kettle&#xff1a; 側重數據處理與轉換&#xff1a;具備強大的數據轉換和處理能力&#xff0c;能對數據進行清洗&#xff08;如去除重復值、處理缺失值 &#xff09;、轉換&#xff08;如數據類型轉換、計算派生字段 &#xff09;、過濾等操作。例如&#xff0c…

28、請求處理-【源碼分析】-請求映射原理

28、請求處理-【源碼分析】-請求映射原理 Spring Boot 的請求映射原理主要基于 Spring MVC 框架&#xff0c;通過 DispatcherServlet 前端控制器實現。以下是詳細的請求映射過程&#xff1a; ### 1. 請求進入 DispatcherServlet 當客戶端發送請求時&#xff0c;首先由 Dispatch…

Java設計模式之解釋器模式詳解

Java設計模式之解釋器模式詳解 一、解釋器模式核心思想 核心目標&#xff1a;定義語言的文法規則&#xff0c;并構建解釋器來解釋語言中的句子。如同編譯器將源代碼轉換為可執行代碼&#xff0c;解釋器模式將領域特定語言&#xff08;DSL&#xff09;的表達式解釋為可執行操作…

electron開發百度桌面應用demo及如何打包應用

1.開發入口文件main.js 1-1 加載百度URL const { app, BrowserWindow, nativeImage } require(electron) const path require(node:path)const createWindow () > {const win new BrowserWindow({width: 800,height: 600,})//加載百度URLwin.loadURL(https://www.baid…

LiveGBS海康、大華、宇視、華為攝像頭GB28181國標語音對講及語音喊話:攝像頭設備與服務HTTPS準備

LiveGBS海康、大華、宇視、華為攝像頭GB28181國標語音對講及語音喊話&#xff1a;攝像頭設備與服務HTTPS準備 1、背景2、準備工作2.1、服務端必備條件&#xff08;注意事項&#xff09;2.2、語音對講設備準備2.2.1、大華攝像機2.2.2、海康攝像機 3、開啟音頻并開始對講4、相關問…

JWT安全:假密鑰.【簽名隨便寫實現越權繞過.】

JWT安全&#xff1a;假密鑰【簽名隨便寫實現越權繞過.】 JSON Web 令牌 (JWT)是一種在系統之間發送加密簽名 JSON 數據的標準化格式。理論上&#xff0c;它們可以包含任何類型的數據&#xff0c;但最常用于在身份驗證、會話處理和訪問控制機制中發送有關用戶的信息(“聲明”)。…

# Python 語音助手本地的ollama實現

項目簡介 本項目是一個基于 Python 的智能語音助手&#xff0c;集成了語音錄制、語音識別、AI對話和語音合成功能。用戶可以通過語音與本地部署的 Ollama 大模型進行自然對話。 技術架構 核心功能模塊 語音錄制 - 使用 sounddevice 錄制用戶語音語音識別 - 使用 faster-whi…

第1章第1節:安全運維基礎思維與體系建設-安全運維的定義與核心目標

&#x1f3af; 實戰目標&#xff1a; 理解“安全運維”與傳統運維的本質區別 掌握安全運維的核心目標與價值定位 建立以“持續可控、可視可審、自動響應”為核心的思維框架 &#x1f4d6; 背景知識&#xff1a; ? 傳統運維 vs 安全運維 傳統運維關注&#xff1a;系統穩定、…

LNMP 架構部署

目錄 一、基于授權的訪問控制 &#xff08;一&#xff09;功能簡介 &#xff08;二&#xff09;配置步驟 二、基于客戶端的訪問控制 &#xff08;一&#xff09;功能簡介 &#xff08;二&#xff09;配置步驟 三、Nginx 虛擬主機 &#xff08;一&#xff09;基于域名的…

JVM與JMM深度解析:從Java 8到Java 21的演進

文章目錄 第一部分&#xff1a;JVM基礎概念與架構JVM是什么&#xff1f;JVM整體架構運行時數據區類加載機制執行引擎 第二部分&#xff1a;Java內存模型&#xff08;JMM&#xff09;什么是Java內存模型JMM的核心問題主內存與工作內存內存間交互操作重排序與happens-before原則v…

Docker 掛載卷并保存為容器

1 創建docker容器 使用鏡像osrf/ros:humble-desktop-full-jammy創建并運行容器 sudo docker run -it --name ros2_humble osrf/ros:humble-desktop-full-jammy /ros_entrypoint.sh bash docker run -it -v d:\docker\ros2_humble:/root/ros2_ws osrf/ros:humble-desktop-fu…

無人機飛手共享接單平臺

2025年&#xff0c;無人機已不再是“黑科技”的代名詞。從農田噴灑到外賣配送&#xff0c;從航拍攝影到醫療急救&#xff0c;無人機正以驚人的速度滲透我們的生活。而在這場變革中&#xff0c; “無人機飛手共享接單平臺” 成為連接技術與需求的核心樞紐。它不僅讓專業飛手輕松…

【Web應用】若依框架:基礎篇07功能詳解-定時任務

文章目錄 ?前言?一、講解過程?二、動手實操?總結 標題詳情作者JosieBook頭銜CSDN博客專家資格、阿里云社區專家博主、軟件設計工程師博客內容開源、框架、軟件工程、全棧&#xff08;,NET/Java/Python/C&#xff09;、數據庫、操作系統、大數據、人工智能、工控、網絡、程序…

8.8 Primary ODSA service without ODSA Portal

主要ODSA服務&#xff08;不使用ODSA門戶&#xff09; 以下場景描述如下情況&#xff1a; ? 主ODSA客戶端應用程序被允許用于該類型的主設備&#xff0c;且對終端用戶啟用&#xff08;已授權&#xff09;。 ? 服務提供商&#xff08;SP&#xff09;能夠在不涉及ODSA門戶Web服…

深度檢測與動態透明度控制 - 基于Babylon.js的遮擋檢測實現解析

首先貼出實現代碼&#xff1a; OcclusionFader.ts import { AbstractEngine, Material, type Behavior, type Mesh, type PBRMetallicRoughnessMaterial, type Scene } from "babylonjs/core"; import { OcclusionTester } from "../../OcclusionTester"…

openssl 使用生成key pem

好的&#xff0c;以下是完整的步驟&#xff0c;幫助你在 Windows 系統中使用 OpenSSL 生成私鑰&#xff08;key&#xff09;和 PEM 文件。假設你的 openssl.cnf 配置文件位于桌面。 步驟 1&#xff1a;打開命令提示符 按 Win R 鍵&#xff0c;打開“運行”對話框。輸入 cmd&…