css 实现虚线效果的3种方式详解

news2025/2/24 16:05:46

一、效果

首先可以看一下下图显示的实现效果:

  • 用三种方式实现了虚线效果: 点击查看demo代码

二、实现

1、border 属性

查看 mdn 的 border,我们知道 border 可以用于设置一个或多个以下属性的值:border-widthborder-styleborder-color

border-style 可以设置边框的样式,其中 使用 dashed 设置虚线效果。

实现代码:

设置div的样式

.box {height: 100px;line-height: 100px;margin-bottom: 20px;
} 
<div className="box line1">虚线1</div> 

border 实现:

/*虚线1 css*/
.line1 {border: 1px dashed red;
} 

2、巧用 background 和 linear-gradient

我上篇文章《css 设置border边框颜色渐变效果》 里有详细的介绍过 linear-gradient 的使用,不清楚的同学可以先学习下

先看实现代码:

<div className="box line2">虚线2</div> 
/*虚线2 css*/
.line2 {background: linear-gradient(to left,transparent 0%,transparent 50%,#ccc 50%,#ccc 100%);background-size: 10px 1px;background-repeat: repeat-x;
} 

我们把css拆解开慢慢看:

1)先设置了background

background 属性是一个 简写属性,可以在一次声明中定义一个或多个属性:background-clipbackground-colorbackground-imagebackground-originbackground-positionbackground-repeatbackground-size,和 background-attachment

background: linear-gradient(to left,/*to结束的方向*/transparent 0%,transparent 50%,#ccc 50%,#ccc 100%
); 

linear-gradient() 函数用于创建一个表示两种或多种颜色线性渐变的图片。其结果属于<gradient>数据类型,是一种特别的<image>数据类型。

这段css表示的意思是:

  • to left to表示结束的方向,所以这里表示从右向左渐变。
  • transparent 0%,transparent 50%, 从 0% 的位置开始到 50% 的位置,是透明。
  • #ccc 50%,#ccc 100% 从 50% 的位置开始到 100% 的位置,是颜色 #ccc
  • 这里其实可以理解为设置的相当于 background-image

效果如下:

2)然后设置了 background-size

background-size: 10px 1px; 

设置背景图片大小为:宽度10px 高度 1px。效果变成如下:

这是为什么呢?

因为上一步我们设置 linear-gradient 属性渐变的点是百分比,所以会受到 background-size的影响,那么其实每个“灰白”的宽度就是 10px,之所以看起来高度很长,是因为 background-repeat 的原因。

并且,background 属性中 background-repeat 默认值是 repeat(背景图像将在垂直方向和水平方向重复)。所以看到的是上面的效果。如何得到虚线呢?

3)设置 background-repeat

background-repeat: repeat-x; /*背景图像将在水平方向重复。*/ 

然后就得到了虚线:

因为上面设置的 background-size 中,高度是 1px,那么在 x(水平) 方向,就会按照 1px 进行重复。那么就得到了虚线。假如我们设置 background-size: 10px 10px,那在x 方向重复的效果如下:

这样我们实现的虚线可以根据需要来调整虚线的间距和高度。

3、 巧用 background-clip

其实思路和上面一种方式很类似

先看实现代码:

<div className="box line3">虚线3</div> 
/*虚线3 css*/
.line3 {border: 1px solid transparent;background: linear-gradient(white, white) padding-box,repeating-linear-gradient(-45deg,#e5e5e5 0,#e5e5e5 3px,white 0,white 5px);
} 

我们依然来把css拆解开慢慢看:

1)先设置了background

background: linear-gradient(white, white) padding-box,repeating-linear-gradient(-45deg,#ccc 0,#ccc 3px,white 0,white 5px); 
  • 首先 linear-gradient(white, white) 表示渐变默认从上到下都是白色
  • padding-boxbackgroundbackground-clip属性,它是来设置设置元素的背景(背景图片或颜色)是否延伸到边框、内边距盒子、内容盒子下面。
  • 注意:默认值是 border-box;效果如下:

我为了和背景色做区分,设置了一个灰色背景,所以第一步的效果如下:

  • 然后设置的 repeating-linear-gradient,这里实现一个线性重复渐变的效果,* 渐变轴为-45度,从右下角往左上角的方向进行渐变* 从 0 到 3px 的位置是 #ccc 的颜色* 从 0 到 5px 的位置是白色* 这样就可以得到一个灰色宽 3px,白色间隔是 2px 的不停重复的效果(可以在这里去根据需要设置虚线的宽和间距)* 注意下这里其实默认 background-clipborder-box

如下图所示效果:

这里设置的 linear-gradientrepeating-linear-gradient 相当于设置了两张背景图。后面设置的会被前面设置的覆盖。 所以设置完的效果我们看到的其实是白色:

那我们如何得到虚线呢?

2)设置 border

border: 1px solid transparent; /*设置透明边框*/ 

还记得上面我们说道的 background-clip 嘛,其实这里就是利用了它

background-clip: border-box; /*背景延伸至边框外沿(但是在边框下层)*/
background-clip: padding-box; /*背景延伸至内边距 padding 外沿。不会绘制到边框处。*/ 

这两个属性的差异,正好差一个边框的特性,来实现了虚线的效果。

如果我们只要显示一个边,那么可以把div盒子的高度设置小一些,然后只设置border的一边,比如:

/*只设置一个边*/
.line3 {height: 2px;border-top: 1px solid transparent;background: linear-gradient(white, white) padding-box,repeating-linear-gradient(-45deg, #ccc 0, #ccc 3px, white 0, white 5px);
} 

综上,我们通过三种方式实现了虚线边框,你学会了嘛~

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405741.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序开发】自定义tabBar案例(定制消息99+小红心)

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f310; 推荐一款找工作神器网站: 点击跳转牛客网 |笔试题库|面试经验|实习招聘内推| 还没有账户的小伙伴 速速点击链接…

vue系列(三)——手把手教你搭建一个vue3管理后台基础模板

目录 一、前言&#xff1a; 二、网站页面分析 三、开发步骤 &#xff08;一&#xff09;、安装element &#xff08;二&#xff09;、安装使用svg插件 &#xff08;三&#xff09;、编写主界面框架代码 &#xff08;四&#xff09;、编写菜单栏 &#xff08;五&#xff0…

如何使用wireshark抓取HTTPS数据包?

1、wireshark 抓包为什么不显示出来&#xff1f; wireshark 是基于网络层的抓包工具&#xff0c;通过捕获通信双方的TCP/IP包实现内容提取。对于应用层的数据&#xff0c;如果应用层协议是公开的&#xff0c;就可以直接显示数据。处理HTTPS 协议时&#xff0c;因为不知道客户端…

前端知识——css之flex布局

1.基本概念 flex布局是一种布局模型&#xff0c;经常被称之为flexbox&#xff0c;使用flex布局之后&#xff0c;他会给子元素提供强大空间分配和对齐能力。 在没有使用flex布局之前&#xff0c;常用布局有&#xff1a;流式布局&#xff0c;浮动布局&#xff0c;定…

Vite代理解决跨域问题

Vite代理解决跨域问题 我们在编写前端项目的时候&#xff0c;经常会遇到跨域的问题&#xff0c;当我们访问后端 API 的 URL 路径时&#xff0c;只要域名、端口或访问协议&#xff08;如 HTTP 和 HTTPS&#xff09;有一项不同&#xff0c;就会被浏览器认定为跨域。另外我们也会…

小程序真机调试提示系统错误

Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 7935KB exceed max limit 2MB [20220929 16:18:58][wxfc8aa5984cac7f72] [1.06.2208010][win32-x64]// 说明你源文件大小为7985kb 超过了2M 所以编译失败解决方法 1. 压缩项目中的图或转为base64格式 …

【Spring+SpringMVC+Mybatis】Spring+SpringMVC+Mybatis实现前端到后台完整项目

文章目录&#x1f3f4;‍☠️SpringMVC简介SpringMVC是什么SpringMVC的基础架构SpringMVC的优点&#x1f3f3;️‍&#x1f308;SpringMVC接管Web说明三层框架SpringMVC的简单开发&#x1f6a9;Spring搭建&#x1f6a9;Mybatis搭建&#x1f3c1; Spring整合Mybatis✅结语&#…

(element-ui)取消el-table的hover状态,取消高亮显示

文章目录前言方法一 ------覆盖css样式方法二------卸载掉背景颜色&#xff08;类似于方法一&#xff09;方法三------使用函数方法方法四------禁用鼠标悬浮怎么办&#xff1f;究极解决------将错就错前言 在使用element-ui的el-table表格的过程中&#xff0c;会发现&#xf…

VsCode配置JavaWeb(最新)

我个人是很喜欢VsCode的&#xff0c;开源免费、功能全面。所以为了方便&#xff0c;我把我几乎所有的运行都集成到了VsCode上来&#xff0c;JavaWeb也不例外。 前言 之前也在CSDN上看到有些博主写了配置方法&#xff0c;但是很不幸的是&#xff0c;插件Tomcat for java已经不可…

Web过滤器:Filter

Filter 概述工作原理生命周期web.xml配置的常用节点FilterConfig类过滤器链FilterChainHttpFilter的简化设计自动登录功能的改进验证登入页面的改进浏览器的缓存功能概述 Filter过滤器,是Servlet技术中最实用的技术,能够管理Web服务器的所有Web资源,实现信息拦截、权限访问控…

vue动态路由添加,vue-router的addRoute方法实现权限控制,添加根路由和子路由

addRoute路由分为静态路由和动态路由静态路由和动态路由的优缺点动态路由实现思路&#xff1a;动态路由遇到的问题与解决方式动态添加子路由路由分为静态路由和动态路由 静态路由和动态路由的优缺点 1、中大型项目&#xff0c;采用的都是动态路由方式,因为后台导航目录运营人…

Vue3如何封装组件?

&#x1f525;&#x1f525;&#x1f525;欢迎关注csdn前端领域博主: 前端小王hs &#x1f525;&#x1f525;&#x1f525;email: 337674757qq.com &#x1f525;&#x1f525;&#x1f525;前端交流群&#xff1a; 598778642 在开发Vue3项目的过程中&#xff0c;我们经常会使…

H5页面跳转微信小程序时:wx.miniProgram.navigateTo 报错 ‘wx‘ is not defined no-undef

有一个功能&#xff0c;需要从H5页面跳转到微信小程序&#xff0c;查了微信官方文档&#xff1a;只需要引入js文件&#xff0c;然后直接使用即可&#xff1a; 1&#xff1a;引用&#xff1a; 当然也可以下载下来直接引用项目具体位置的js文件 2: 使用&#xff1a; 然后一直报错…

vue3 hooks使用

vue3 hooks使用 今天我们稍微说一下 vue3 项目中的 hooks 的使用&#xff0c;其实这个 hooks 呢是和 vue2 当中的 mixin 是类似的&#xff0c;学习过 vue2 的小伙伴一定对 mixin 一定比较熟悉&#xff0c;就算没用过也一定了解过&#xff0c;也就是混入&#xff0c;通过 mixin …

useDark的使用方法以及Element-Plus深色主题切换案例(vue3)

useDark 顾名思义&#xff0c;是否使用深色模式&#xff0c;useDark它是通过读取localStorage/sessionStorage的存储值&#xff08;key 是可自定义的&#xff09;。从而设置html的class。VueUse的官方案例使用了Tailwind CSS 偏好的暗模式。因为我们不一定都用得到Tailwind CSS…

vue实现本地预览word(docx)、excel(xlsx)、pdf文件

vue实现本地预览word(docx)、excel(xlsx)、pdf文件 实现效果&#xff1a; 通过点击预览&#xff0c;浏览器打开新标签页展示文件内容 word效果&#xff1a; pdf效果&#xff1a; excel效果&#xff1a; 前期准备&#xff1a; word插件&#xff1a; npm install --save …

【TFS-CLUB社区 第5期赠书活动】〖Python OpenCV从入门到精通〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《Python OpenCV从入门到精通》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 内容提要❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《Python OpenCV从入门到精通》 内容简介&#xff1a; 《Python O…

【uniapp】页面下拉刷新

目录 一、全局 二、局部 1、一个页面一个下拉刷新 2、一个页面多个下拉刷新&#xff08;切换时滚动条回到顶部&#xff09; 3、一个页面多个下拉刷新&#xff08;切换时恢复滚动条位置&#xff09; 一、全局 修改pages.json的"enablePullDownRefresh": true, …

【Node.js实战】一文带你开发博客项目之登录(前置知识)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

微信小程序自定义组件(超详细)

&#x1f48c;写在开头&#xff1a; 哈喽呀&#xff0c;亲爱的宝子们。 今天要介绍的是关于小程序自定义组件的相关内容。 主要分以下几个部分&#xff1a;组件的创建&#xff0c;组件的结构&#xff0c;组件的引用&#xff0c;组件样式&#xff0c;组件的生命周期等。 文章目录…