稀土掘金 稀土掘金

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 文章底部留言可联系作者。

一、效果

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

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

虚线效果.png

二、实现

1、border 属性

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

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

border-style.png

实现代码:

设置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

效果如下:

设置background之后.png

2)然后设置了 background-size

background-size: 10px 1px;

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

加了background-size.png

这是为什么呢?

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

10px大小.png

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

3)设置 background-repeat

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

然后就得到了虚线:

虚线2.png

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

image.png

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

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;效果如下:

background-clip.png

background-clip1.png

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

渐变.png

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

如下图所示效果:

image.png

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

效果.png

那我们如何得到虚线呢?

2)设置 border

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

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

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

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

image.png

如果我们只要显示一个边,那么可以把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);
}

只设置一个边.png

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

参考文章

  • border
  • linear-gradient()
  • background-clip
  • background
  • 【CSS】虚线的两种实现方式

两个鬼故事起个带木字旁的名字2017年八月出生的宝宝起名大全慕思床垫好吗uuu9魔兽地图下载春天女宝宝起名英文名怎么起男孩幸福还会来敲门演员表郑氏起名女孩名子大全第七次突破10秒苏炳添9秒98夺冠女宝宝姓熊起名长绳系日战火中的兄弟电视剧山东卫视饭店给起名大师麦字起名起名天地人三格对照表高姿态网名31省区市新增本土确诊2例棺中凰妃风沧澜免费阅读起个名字唄电视剧突围全部演员表杨颖被郑恺脱内衣图片小说叶辰萧初然全文免费阅读民众乐园环艺电影城美丽的他日剧小说TXT凌氏女孩子起名宝宝的五行起名医药商贸公司起名字大全免费翁姓起名字大全鼠宝宝起小名少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化