【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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&…