border-image,border-shadow,outline用法总结

border-image 支持 渐变,可实现虚线边框,斑马纹边框

border-image 支持在外部显示图像,不占空间,不影响布局,且不受overflow:hidden限制

border-image,box-shadow,outline 均支持 内填充,外填充,可以实现 遮罩(包括mask遮罩),背景,边框,外延

border-image

内填充

1. fill可以内填充

border-image: linear-gradient(rgba(0,0,0,.05), rgba(0,0,0,.05)) 1 fill;

fill版遮罩,boder-image-slice为0,不切割,整个图fill在中间,boder-image-repeat默认值为stretch, 所以遮罩均匀覆盖

border-image: linear-gradient(#0003,#000) 0 fill;

2. border-image-width和border-width也可以内填充

使用border-width实现内填充可以实现一些特殊效果

2.1 渐变色,尽管border-image-slice截取的大小为1,但是border-width为4,1平会等比例扩大至4宽度
div {
border: 4px solid;
border-image: linear-gradient(to right, #8f41e9, #578aef) 1;
}

2.2 渐变圆形,border-image-slice截取一个圆的的84.5%, border-image-width为50%,会等比例放大至50%,就是4等分的效果

border-image: radial-gradient(var(--c) 69%,#0000 70%) 84.5%/50%;
相当于
border-image-source: radial-gradient(var(--c) 69%,#0000 70%);
border-image-slice: 84.5%;
border-image-width: 50%;

-webkit-mask-box-image 相当于 border-image直接用在mask上,可以实现mask遮罩裁切同样功能
-webkit-mask-box-image 支持率已经相当高,只有firefox不支持
-webkit-mask-box-image 未来会是 mask-border,目前只有 safari 17.1以上支持

以下可实现按照组合圆形裁切

--_m: radial-gradient(#000 69%,#0000 70%) 84.5%/50%;
-webkit-mask-box-image: var(--_m);
mask-border: var(--_m);

2.3 遮罩 overlay

border-image: linear-gradient(#0003,#000) 50%/50%;
相当于
border-image-slice: 50%; 将渐变4等分
border-image-width: 50%; 将切割的每一个缩放至50%填充,4块贴在一起拼成一个完整的遮罩

外填充
就是 border-image-outset
border-image: linear-gradient(rgba(0,0,0,.05), rgba(0,0,0,.05)) 1 fill / / 100vw;

边框

斑马纹边框
border: 3px solid transparent; /*必须否则看不见border-image*/
border-image: repeating-linear-gradient(135deg, deepskyblue, deepskyblue 5px, transparent 5px, transparent 10px) 1;

渐变边框
border: 1px solid transparent; /*必须否则看不见border-image*/
border-image: linear-gradient(to right, red, orange) 1;

 

border-shadow

内填充
box-shadow: inset 0 0 0 999px rgba(0,0,0,.05);

外填充
box-shadow: 0 0 0 199vw rgba(0,0,0,.05)

边框
box-shadow: inset 0 0 0 1px #ccc;

 

outline

内填充
outline-offset: -999px;

外填充
outline: 999vw solid rgba(0,0,0,.05);

边框
outline: 1px solid rgba(0,0,0,.05);

内填充配合外填充可以形成全屏遮罩,遮盖元素本身


在有placeholder时不显示错误提示,可实现未聚焦不显示错误提示

:invalid:not(:placeholder-shown) {
  background-image: var(--invalid);
}

 

 

参考:
CSS boder-image 图片边框属性详解
被低估的border-image属性
CSS小技巧之绘制心形图案
Gradient borders on one or more sides with border-image

posted @ 2023-12-18 16:48  全玉  阅读(140)  评论(0编辑  收藏  举报