css 中多种边框的实现小窍门


Posted in HTML / CSS onApril 07, 2021

一、多重边框[1]

背景知识:box-shadow,outline
鉴于使用场景的多元化,多重边框的设计越来越多,以往可以借助 border-image 属性应付一下,但是这个在css 代码层面并不是很灵活。现在我们借助 box-shadow 和 outline 两个属性来分别实现多重边框。

1、box-shadow 方案

思路:利用 box-shadow 的第四个参数(扩张半径)的大小,多重投影
代码示例:

<div class="border-multiple">
        多重边框实现方案一:box-shadow
    </div>

    .border-multiple {
        margin: 50px auto;
        padding: 20px;
        width: 600px; 
        background-color: #fff; 
        box-shadow: 0 0 0 10px #f0f,
                    0 0 0 15px #00f,
                    0 2px 15px 15px rgba( 0, 0, 0, .8);
    }

css 中多种边框的实现小窍门

多重边框--box-shadow

小结:

1、阴影并不影响布局,也不会受到box-sizing的影响
2、支持逗号分隔语法,可以创建任意数量的投影
3、缺点:只能实现实线的边框,不能实现其他样式的边框

2、outline 方案

代码示例:

<div class="border-outline">
        多重边框实现方案二:outline
    </div>
    .border-outline {
        margin: 200px auto;
        padding: 20px;
        width: 600px;
        background-color: #ff0;
        outline: 3px dashed #0f0;
        outline-offset: -10px;
    }

css 中多种边框的实现小窍门

多重边框–outline

小结:

1、前提是实现两层边框
2、可能需要 outline-offset 的属性值
3、outline 的描边默认是矩形,当有圆角时会认为是 bug , 不能贴合圆角
4、不支持逗号语法

二、边框内圆角[2]

背景知识:box-shadow,outline
为了解决上面例子小结3中的bug,可以用box-shadow 扩张半径来填补掉 圆角与outline 之间的空隙。
代码示例:

<div class="inner-rounding">
         需要借助 box-shadow、outline、“多重边框”来实现 
         注意点 : box-shadow 的扩展半径应该是 圆角半径的 0.5倍
    </div> 
    .inner-rounding {
        background-color: #ccc;
        margin: 50px auto;
        padding: 20px;
        width: 600px; 
        padding: 20px;
        border-radius: 20px;
        box-shadow: 0 0 0 10px #f00;
        outline: 10px solid #f00;
    }

注意点 : box-shadow 的扩展半径应该是 圆角半径的 0.5倍;严格来说应该是(√2 - 1) 倍,这里取 0.5 倍是为了更好的计算

css 中多种边框的实现小窍门

边框内圆角

三、半透明边框[3]

背景知识:rgba 或 hsla 颜色属性,background-clip
思路:让边框呈现在 被裁剪背景的 padding-box 里
代码示例:

<div class="border-opacity">
         半透明边框的实现
    </div>
    .border-opacity {
        margin: 50px auto;
        padding: 20px;
        width: 600px;
        border: 10px solid hsla(0, 0%, 100%, 0.5);
        background-color: #fff;
        background-clip: padding-box;
    }

小结:

半透明边框的实现需要借助css3的 background-clip 的属性
background-clip有三个属性:
1、border-box: 背景被裁剪到边框盒(看不到边框)
2、padding-box: 背景被裁剪到内边距框(可以看见边框)
3、content-box: 背景被裁剪到内容框(边框紧贴着内容)

css 中多种边框的实现小窍门

半透明边框效果图

四、连续的图像边框[4]

背景知识:css 渐变,基本的border-iamge,background-clip
先来看看 border-image 是如何来实现 图像边框的:
border-image 的实现原理是九宫格伸缩法:把图片切割成九块,然后把它们应用到元素边框相应的边和角。
代码示例:

<p class="border-image">border-image 的实现原理是九宫格伸缩法:把图片切割成九块,然后把它们应用到元素边框相应的边和角。</p>
        <p class="border-image">我们并不想让图片的某个特定部分固定在拐角处;而是希望出现在拐角处的图片区域是随着元素宽高金额边框厚度的变化而变化的。</p>
        .border-image {
            border: 40px solid transparent;
            border-image: 33.334% url("http://csssecrets.io/images/stone-art.jpg");
            padding: 1em;
            max-width: 20em;
            font: 130%/1.6 Baskerville, Palatino, serif;
        }
        .border-image:nth-child(2) {
            margin-top: 1em;
            border-image-repeat: round;
        }

css 中多种边框的实现小窍门

border-image 效果图

缺点:我们并不想让图片的某个特定部分固定在拐角处;而是希望出现在拐角处的图片区域是随着元素宽高金额边框厚度的变化而变化的。
如何解决呢?
实现思路:
1、利用 css 渐变和背景的扩展
2、在背景图片上,在叠加一层纯白的实色背景
3、为了让下层的背景透过边框区域显示出来,需要给两层背景指定不同的 background-clip 值
4、在多重背景的最底层设置背景色,需要用一道从白色过渡到白色的 css 渐变来模拟出纯白色实色背景的效果

代码示例:

<p class="contituous-images">实现思路:
            1、利用 css 渐变和背景的扩展
            2、在背景图片上,在叠加一层纯白的实色背景
            3、为了让下层的背景透过边框区域显示出来,需要给两层背景指定不同的 background-clip 值
            4、在多重背景的最底层设置背景色,需要用一道从白色过渡到白色的 css 渐变来模拟出纯白色实色背景的效果
        </p>
        .contituous-images {
            padding: 1em;
            border: 1em solid transparent;
            /* background: linear-gradient(white, white),
                            url(http://csssecrets.io/images/stone-art.jpg);
            background-size: cover;
            background-clip: padding-box, border-box;
            background-origin: border-box; */

            /* background 还可简写如下 */
            background: linear-gradient(white, white) padding-box,
            url(http://csssecrets.io/images/stone-art.jpg) border-box  0 / cover;

            width: 21em;
            padding: 1em;
            overflow: hidden;
            /* 边框可拖拽 */
            resize: both;
            font: 100%/1.6 Baskerville, Palatino, serif;
        }

css 中多种边框的实现小窍门
连续的图像边框

还可以通过渐变图案实现信封样式的边框
代码示例

还可以通过 渐变图案实现 信封样式的 边框

<p class="envelope-border">还可以通过 渐变图案实现 信封样式的 边框</p>
.envelope-border {
    padding: 1em;
    border: 0.5em solid transparent;
    background: linear-gradient(white, white) padding-box, repeating-linear-gradient(-45deg, red 0, red 12.5%, transparent 0, transparent 25%, #58a 0, #58a 37.5%, transparent 0, transparent 50%) 0 / 3em 3em;
    max-width: 20em;
    font: 100%/1.6 Baskerville, Palatino, serif;}

css 中多种边框的实现小窍门

信封边框效果图

到此这篇关于css 中多种边框的实现小窍门的文章就介绍到这了,更多相关css 边框内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3中Color的一些特性介绍
May 27 HTML / CSS
css3 按钮 利用css3实现超酷下载按钮
Mar 18 HTML / CSS
CSS3媒体查询(Media Queries)介绍
Sep 12 HTML / CSS
纯HTML5+CSS3制作图片旋转
Jan 12 HTML / CSS
CSS中越界问题的经典解决方案【推荐】
Apr 19 HTML / CSS
使用HTML5的链接预取功能(link prefetching)给网站提速
Dec 13 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
Dec 13 HTML / CSS
使用HTML5技术开发一个属于自己的超酷颜色选择器
Sep 22 HTML / CSS
html5教程画矩形代码分享
Dec 04 HTML / CSS
a标签下载链接的简单实现
Sep 13 HTML / CSS
Canvas环形饼图与手势控制的实现代码
Nov 08 HTML / CSS
HTML5简单实现添加背景音乐的几种方法
May 12 HTML / CSS
HTML中table表格拆分合并(colspan、rowspan)
HTML速写之Emmet语法规则的实现
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
Apr 07 #HTML / CSS
html+css 实现简易导航栏功能
Apr 07 #HTML / CSS
css3实现的加载动画效果
CSS3 天气图标动画效果
CSS3 制作精美的定价表
You might like
php在线代理转向代码
2012/05/05 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
uni-app从安装到卸载的入门教程
2020/05/15 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
python矩阵的转置和逆转实例
2018/12/12 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
计算机系统管理员求职信
2014/06/20 职场文书
网吧七夕活动策划方案
2014/08/31 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
销售内勤岗位职责
2015/02/10 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电