带圆角的虚线边框?CSS 不在话下

这篇具有很好参考价值的文章主要介绍了带圆角的虚线边框?CSS 不在话下。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天,我们来看这么一个非常常见的切图场景,我们需要一个带圆角的虚线边框,像是这样:

带圆角的虚线边框?CSS 不在话下

这个我们使用 CSS 还是可以轻松解决的,代码也很简单,核心代码:

div {
    border-radius: 25px;
    border: 2px dashed #aaa;
}

但是,原生的 dashed 有一个问题,就是我们无法控制虚线的单段长度与间隙

假设,我们要这么一个效果呢虚线效果呢:

带圆角的虚线边框?CSS 不在话下

此时,由于无法控制 border: 2px dashed #aaa 产生的虚线的单段长度与线段之间的间隙,border 方案就不再适用了。

那么,在 CSS 中,我们还有其它方式能够实现带圆角,且虚线的单段长度与线段之间间隙可控的方式吗?

本文,我们就一起探讨探讨。

实现不带圆角的虚线效果

上面的场景,使用 CSS 实现起来比较麻烦的地方在于,图形有一个 border-radius

如果不带圆角,我们可以使用渐变,很容易的模拟虚线效果。

我们可以使用线性渐变,轻松的模拟虚线的效果:

div {
    width: 150px;
    height: 100px;
    background: linear-gradient(90deg, #333 50%, transparent 0) repeat-x;
    background-size: 4px 1px;
    background-position: 0 0;
}

看看,使用渐变模拟的虚线如下:

带圆角的虚线边框?CSS 不在话下

解释一下上面的代码:

  1. linear-gradient(90deg, #333 50%, transparent 0),实现一段渐变内容,100% - 50% 的内容是 #333 颜色,剩下的一半 50% - 0 的颜色是透明色 transprent
  2. repeat-x 表示只在 x 方向重复
  3. background-size: 4px 1px 表示上述渐变内容的长宽分别是 4px\ 1px,这样配合 repeat-x就能实现只有 X 方向的重复
  4. 最后的 background-position: 0 0 控制渐变的定位

因此,我们只需要修改 background 的参数,就可以得到各种不一样的虚线效果:

带圆角的虚线边框?CSS 不在话下

完整的代码,你可以戳这里:CodePen Demo -- Linear-gradient Dashed Effect

并且,渐变是支持多重渐变的,因此,我们把容器的 4 个边都用渐变表示即可:

div {
    background: 
        linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
        linear-gradient(90deg, #333 50%, transparent 0) repeat-x,
        linear-gradient(0deg, #333 50%, transparent 0) repeat-y,
        linear-gradient(0deg, #333 50%, transparent 0) repeat-y;
    background-size: 4px 1px, 4px 1px, 1px 4px, 1px 4px;
    background-position: 0 0, 0 100%, 0 0, 100% 0;
}

效果如下:

带圆角的虚线边框?CSS 不在话下

但是,如果要求的元素带 border-radius 圆角,这个方法就不好使了,整个效果就会穿帮。

因此,在有圆角的情况下,我们就需要另辟蹊径。

利用渐变实现带圆角的虚线效果

当然,本质上我们还是需要借助渐变效果,只是,我们需要转换一下思路。

譬如,我们可以使用角向渐变。

假设,我们有这么一个带圆角的元素:

<div></div>
div {
    width: 300px;
    height: 200px;
    background: #eee;
    border-radius: 20px;
}

效果如下:

带圆角的虚线边框?CSS 不在话下

如果我们修改内部的 background: #eee,把它替换成重复角向渐变的这么一个图形:

div {
    //...
-  background: #eee;
+  background: repeating-conic-gradient(#000, #000 3deg, transparent 3deg, transparent 6deg);
}

解释一下,这段代码创建了一个重复的角向渐变背景,从黑色(#000)开始,每 3deg 变为透明,然后再从透明到黑色,以此循环重复。

此时,这样的背景效果可用于创建一种渐变黑色到透明的重复纹理效果:

带圆角的虚线边框?CSS 不在话下

在这个基础上,我们只需要给这个图形上层,再利用伪元素,叠加一层颜色,就得到了我们想要的边框效果,并且,边框间隙和大小可以简单调整。

完整的代码:

div {
    position: relative;
    width: 300px;
    height: 200px;
    border-radius: 20px;
    background: repeating-conic-gradient(#000, #000 3deg, transparent 3deg, transparent 6deg);
    
    &::before {
        content: "";
        position: absolute;
        inset: 1px;
        background: #eee;
        border-radius: 20px;
    }
}

效果如下:

带圆角的虚线边框?CSS 不在话下

乍一看,效果还不错。但是如果仔细观察,会发现有一个致命问题:虚线线段的每一截长度不一致

只有当图形的高宽一致时,线段长度才会一致。高宽比越远离 1,差异则越大:

带圆角的虚线边框?CSS 不在话下

完整的代码,你可以戳这里:CodePen Demo -- BorderRadius Dashed Border

那有没有办法让虚线长度能够保持一样呢?

可以!我们再换一种渐变,我们改造一下底下的角向渐变,重新利用重复线性渐变:

div {
  border-radius: 20px;
  background: 
    repeating-linear-gradient(
      -45deg,
      #000 0,
      #000 7px,
      transparent 7px,
      transparent 10px
    );
}

此时,我们能得到这样一个斜 45° 的重复线性渐变图形:

带圆角的虚线边框?CSS 不在话下

与上面方法一类似,再通过在这个图形的基础上,在元素中心,叠加多一层纯色遮罩图形,只漏出最外围一圈的图形,带圆角的虚线边框就实现了:

带圆角的虚线边框?CSS 不在话下

此方法比上面第一种渐变方法更好之处在于,虚线每一条线段的长度是固定的!是不是非常的巧妙?

完整的代码,你可以戳这里:CodePen Demo -- BorderRadius Dashed Border

最佳解决方案:SVG

当然,上面使用 CSS 实现带圆角的虚线边框,还是需要一定的 CSS 功底。

并且,不管是哪个方法,都存在一定的瑕疵。譬如如果希望边框中间不是背景色,而是镂空的,上述两种 CSS 方式都将不再使用。

因此,对于带圆角的虚线边框场景,最佳方式一定是 SVG。(切图也算是吧,但是灵活度太低)

只是很多人看到 SVG 会天然的感到抗拒,或者认为 SVG 不太好掌握。

所以,本文再介绍一个非常有用的开源工具 -- Customize your CSS Border:

带圆角的虚线边框?CSS 不在话下

通过这个开源工具,我们可以快速生成我们想要的虚线边框效果,并且一键复制可以嵌入到 CSS background 中的 SVG 代码图片格式。

图形的大小、边框的粗细、虚线的线宽与间距,圆角大小统统是可以可视化调整的。

通过一个动图,简单感受一下:

带圆角的虚线边框?CSS 不在话下

总结一下

本文介绍了 2 种在 CSS 中,不借助切图和 SVG 实现带圆角的虚线边框的方式:

  1. 重复角向渐变叠加遮罩层
  2. 重复线性渐变叠加遮罩层

当然,两种 CSS 方式都存在一定瑕疵,但是对于一些简单场景是能够 Cover 住的。

最后,介绍了借助 SVG 工具 Customize your CSS Border 快速生成带圆角的虚线边框的方式。将 SVG 生成的矢量图像数据直接嵌入到 background URL 中,能够应付几乎所有场景,相对而言是更好的选择。

最后

好了,本文到此结束,希望本文对你有所帮助 😃

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。文章来源地址https://www.toymoban.com/news/detail-751839.html

到了这里,关于带圆角的虚线边框?CSS 不在话下的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS基础-边框和圆角

    CSS中用border 定义边框属性。 border语法:border:[宽度][样式][颜色] 其中: 宽度:边框的宽度,单位可以使px、em、rem 等单位,也可以使用thin、medium、thick 三种预设值 样式:边框的样式,值可以是 solid(实线),dashed(虚线),dotted(点线)等多种样式。 样式值 意思 solid 实线 dashed 虚线

    2024年02月12日
    浏览(55)
  • 【CSS】透明背景的圆角渐变边框实现方案

    css的渐变边框可以用下面方式实现 css的圆角边框可以用下面方式实现 那想要实现一个圆角的渐变边框呢,可能会以为,两个都用上不就可以了,但事实是,这两个属性并不兼容,所以要实现一个圆角的渐变边框,就得需要曲线救国的方法了 最终效果图    

    2024年02月13日
    浏览(69)
  • CSS3 实现边框圆角渐变色&&渐变文字效果

      background-clip: text; 是CSS中的一个属性,用于指定背景图片或颜色的裁剪方式,裁剪的区域是文本的轮廓。具体来说,就是将背景图片或颜色限制在文本的轮廓内,而不是整个元素的范围内。这个属性通常用于创建一些特殊的文本效果,比如文字渐变、文字填充等。  参考:

    2024年02月16日
    浏览(52)
  • css 怎么绘制一个带圆角的渐变色的边框

    1,可以写两个样式最外面的div设置一个渐变的背景色。里面的元素使用纯色。但是宽高要比外面元素的小。可以利用里面的元素设置padding这样挡住部分渐变色。漏出来的渐变色就像边框一样。 div class=\\\"cover-wrapper\\\"    div class=\\\"item-cover\\\"    /div /div .cover-wrapper{      background:

    2024年01月19日
    浏览(48)
  • FE_CSS 页面布局之圆角边框 & 盒子阴影 & 文字阴影

    在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。border-radius 属性用于设置元素的外边框圆角。 参数值可以为数值或百分比的形式 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为 50% 该属性是一个简写属性,可以跟

    2023年04月13日
    浏览(77)
  • CSS边框、边距、轮廓(边框宽度/颜色/各边/简写属性/圆角边框/内外边距/高度宽度/框模型/轮廓宽度/颜色/属性/偏移)——万字长文|一文搞懂

    目录 CSS边框 CSS 边框属性 CSS 边框样式 实例 CSS 边框宽度 实例 特定边的宽度 实例 CSS 边框颜色 实例 特定边框的颜色 实例 HEX 值 实例 RGB 值 实例 HSL 值 实例 CSS 边框 - 单独的边 实例 不同的边框样式 实例 它的工作原理是这样的: border-style: dotted solid double dashed; border-style: do

    2024年01月18日
    浏览(65)
  • 微信小程序自定义tabBar(边框圆角)

    先看看自定义tabBar的效果     可能图片效果不是很明显,我用红框框出来了,这样看起来明显一点。 接下来就是具体步骤了  先在pages里建两个文件夹,我现在做的项目tabBar只有两个,所以我建了两个文件夹,如果大于两个用这个方法也可以,但是不能多于五个。 app.json中

    2024年02月08日
    浏览(49)
  • 【和UI斗智斗勇的日子】Android实现一个只有四个圆角有边框的边框

    如下图所示,这是安卓中最基础的一个边框 它的代码是这样实现的 如果要给它加一个圆角,他会变成这样 实现它的代码也很简单,如下: 依旧很简单对吧,那么如果是下面这样的边框呢 我们只要四个角有边框,这样的边框恐怕无法用上面的 stroke 来实现,那么我们遇到这样

    2023年04月27日
    浏览(72)
  • 微信小程序用vant weapp组件设置圆角边框输入框

    vant weapp的输入框样式默认都是方形的,有时候需要设置成圆角的样式,发现直接设置以下样式根本不起作用,这是因为框架自带的样式导致的,这时候我们需要看看style,找到为什么修改不成功。 起初我把所有能试的方法都试了发现就是没有办法改变边框的样式,后来才发现

    2024年02月13日
    浏览(83)
  • [.NET/WPF] 设置按钮, 以及其他任何包含边框的控件的圆角

    在 WPF 中, 按钮包含一个 “边框”, 很多时候需要设置按钮的圆角, 但是按钮并没有提供一个属性用来设置边框圆角. 下面以按钮为例, 列举几种常用的设置圆角的方式. 定义一个附加属性, 然后在各个地方就能直接方便的使用了, 下面是实际使用方式: 接下来是具体实现代码, 首

    2024年02月10日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包