CSS揭秘整理之半透明边框

作者: FlyingWWS | 来源:发表于2017-04-10 15:26 被阅读1657次

1.半透明边框

问题:

如果我们要为一个容器设置红色背景和一道黑色半透明边框,我们可能会这样写:

border: 20px solid rgba(0,0,0,0.5);
background: red;

但是效果却是这样的(图1-1.png);我们的半透明颜色怎么没有实现半透明边框?


图1-1.png

解决方案:

我们可以通过background-clip属性来调整上面的默认行为,把它是值设为padding-box,然后就出现了我们想要的效果(图1-2.png);

border: 20px solid rgba(0,0,0,0.5);
background: red;
background-clip: padding-box;
图1-2.png
2.background-clip

既然用到了background-clip属性,那我们就来看看这个属性吧;
background-clip:
设置元素的背景(背景图片或颜色)是否延伸到边框下面。

值(values ) 说明
border-box 默认初始值,背景延伸到边框外沿(但是在边框之下)
padding-box 边框下面没有背景,即背景延伸到内边距外沿
content-box 背景裁剪到内容区 (content-box) 外沿
text 实验API,背景裁剪到前景文本( foreground text)内。

示例

CSS content

span {
   border: 10px blue;
   border-style: dotted double;
   margin: 1em;
   padding: 2em;
   background: #F8D575;
}
.border-box { background-clip: border-box; }
.padding-box { background-clip: padding-box; }
.content-box { background-clip: content-box; }
.text { background-clip: text; }

HTML content

<span class="border-box">border-box</span>
<span class="padding-box">padding-box</span>
<span class="content-box">content-box</span>
<span class="text">text</span>

效果:(图2-1.png)


图2-1.png
3.border-style

4.border-image

初始值:

  • border-image-source: none
  • border-image-slice: 100%
  • border-image-width: 1
  • border-image-outset: 0s
  • border-image-repeat: stretch

4.1 border-image-source: none | <image>
where
<image> = <url> | <image()> | <image-set()> | <element()> | <cross-fade()> | <gradient>
where
<image()> = image([ [ <image> | <string> ]? , <color>? ]!)
<image-set()> = image-set(<image-set-option>#)
<element()> = element( <id-selecter> )
<cross-fade()> = cross-fade(<cf-mixing-image>,<cf-final-image>?)
<gradient> = <linear-gradient()> | <repeating-linear-gradient()> | <radial-gradient()> | <repeating-radial-gradient()>
点击这里查看文档.

Gradient示例:
<linear-gradient()> = linear-gradient( [<angle> | to <side-or-corner>]?, <color-stop-list>)
CSS content

.gradient { 
    border: 30px solid;
    border-image-source: linear-gradient(to right, red, green, blue);
    /*border-image-source: linear-gradient(90deg, red, green, blue);*/
    border-image-slice: 10;
    padding: 20px;
}

HTML content

<div class="gradient">The image is stretched to fill the area.</div>

效果:(图4-1.png)


图4-1.png

4.2 border-image-slice:[ <number> | <percentage> ]{1,4}&& fill?
这个border-imge-slice属性传入1~4个参数(number没有单位专指像素或百分比值)将图片分割成9个部分,1,2,3,4四个区块是不会拉伸,不会平铺,称之为盲区,5,6,7,8四个区块可以通过border-image-repeat来控制拉伸平铺和重复(stretch:默认值,拉伸; repeat:平铺; round:整数次平铺;),第9区块不显示,传入参数fill则显示第9区块,分割情况如下图(图4-2.png && 图4-3.png):

图4-2.png
图4-3.png
我们通过上面这张图片(81px^81px)来看传入不同个数的参数是如何分割这张图片的;

1个参数

/* border-image-slice: slice */
border-image-slice: 27;
border: 30px solid transparent;
padding: 20px;
border-image-source:url(https://mdn.mozillademos.org/files/4127/border.png);

![图4-4.png](http:https://img.haomeiwen.com/i5544126/00ab8b7333c2896d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![图4-5.png(效果图)](http:https://img.haomeiwen.com/i5544126/dbc0b725ac32cd2c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)     
 
 **2个参数**(参考图4-3.png)
>```
/* border-image-slice: vertical horizontal */
border-image-slice: 40 40.5; 
border: 30px solid transparent;
padding: 20px;
border-image-source:url([https://mdn.mozillademos.org/files/4127/border.png](https://mdn.mozillademos.org/files/4127/border.png));
图4-6.png
图4-7.png(效果图)

3个参数

/* border-image-slice: top horizontal bottom */
border-image-slice: 27 40 27;
border: 30px solid transparent;
padding: 20px;
border-image-source:url(https://mdn.mozillademos.org/files/4127/border.png);

![图4-8.png(效果图)](http:https://img.haomeiwen.com/i5544126/a266a8c06d4d7268.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**4个参数**(参考图4-2.png)
>```
/* border-image-slice: top right bottom left */
border-image-slice: 27 40 27 27;
border: 30px solid transparent;
padding: 20px;
border-image-source:url([https://mdn.mozillademos.org/files/4127/border.png](https://mdn.mozillademos.org/files/4127/border.png));
图4-9.png(效果图)

4.3 border-image-width:[ <length> | <percentage> | <number> | auto ]{1,4}

语法:

border-image-width: all                        /* One-value syntax */       
E.g. border-image-width: 3;
border-image-width: vertical horizontal        /* Two-value syntax */  
E.g. border-image-width: 2em 3em;
border-image-width: top horizontal bottom      /* Three-value syntax */    
E.g. border-image-width: 5% 15% 10%;
border-image-width: top right bottom left      /* Four-value syntax */  
E.g. border-image-width: 5% 2em 10% auto;

设置边框图片的width,如果超出了设置的border-width,会向内扩展;查看下方示例,比较(图4-10.png && 图4-11.png);
示例:

border: 30px solid transparent;
padding: 20px;
border-image-source: url("https://mdn.mozillademos.org/files/4127/border.png");
border-image-slice: 27;

![图4-10.png](http:https://img.haomeiwen.com/i5544126/abbb3714e5757137.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

border: 30px solid transparent;
padding: 20px;
border-image-source:url(https://mdn.mozillademos.org/files/4127/border.png);
border-image-slice: 27;
border-image-width: 1 2 1 1;

![图4-11.png](http:https://img.haomeiwen.com/i5544126/053c33af91cd7609.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**4.4 border-image-outset:`[ <length> | <number> ]{1,4}`**

**语法:**

/* border-image-outset: sides /
border-image-outset: 30%;
/
border-image-outset:vertical horizontal /
border-image-outset: 10% 30%;
/
border-image-outset: top horizontal bottom /
border-image-outset: 30px 30% 45px;
/
border-image-outset:top right bottom left */
border-image-outset: 7px 12px 14px 5px;

效果是将边框图片延伸到盒子外面,查看下放示例,比较(图4-12.png && 图4-13.png);
**示例:**
>```
 border: 30px solid transparent;
 padding: 20px;
 border-image-source:url([https://mdn.mozillademos.org/files/4127/border.png](https://mdn.mozillademos.org/files/4127/border.png));
 border-image-slice: 27;
 margin: 60px;
图4-12.png
border: 30px solid transparent;
padding: 20px;
border-image-source:url([https://mdn.mozillademos.org/files/4127/border.png](https://mdn.mozillademos.org/files/4127/border.png));
border-image-slice: 27;
margin: 60px;
border-image-outset: 2 1 1 1;
图4-13.png

4.4 border-image-repeat:[ stretch | repeat | round ]{1,2}

值(value) 说明
stretch 默认初始值 ,;拉伸
repeat 平铺
round 整数次平铺

语法:

border-image-repeat: type                      /* One-value syntax */       
E.g. border-image-value: stretch;
border-image-repeat: horizontal vertical       /* Two-value syntax */       
E.g. border-image-width: round space;

本内容根据《css揭秘》, MDN 和自己的理解进行整理;
感谢您的阅读。

相关文章

  • CSS揭秘整理之半透明边框

    1.半透明边框 问题: 如果我们要为一个容器设置红色背景和一道黑色半透明边框,我们可能会这样写: 但是效果却是这样...

  • 半透明边框——《css揭秘》

    这个时候会显示出这样的效果。 如果在加上background-clip属性就会不一样。(1)默认的backgrou...

  • 《css-secrets》-demo:半透明边框

    《css-secrets》 半透明边框 关键字:半透明;边框;background-clip 需求描述 给一个容器...

  • 《css揭秘》实例练习--半透明边框

    《css揭秘》一直很期待这本书,终于入手了。果断的要试一试书中的例子。 第一个例子是 半透明边框 首先看看我做出来...

  • 背景与边框

    title: 背景与边框date: 2016-10-16tags: CSS Secrets 0x00 半透明边框 ...

  • 半透明边框&多重边框&背景定位

    半透明边框 半透明颜色的实现已经屡见不鲜,以往在css2,大家需要准备一张单像素的半透明图片,但是边框呢?所幸cs...

  • 边框半透明

    边框半透明 给一个div设置半透明的边框 理想效果 body { background: rgba(129...

  • CSS揭秘——多重边框

    如果我们想为一个元素设置边框,很自然的会利用 border 属性,比如说,我想得到如下效果。 非常简单的,我们只需...

  • CSS揭秘——透明边框

    当我们在实现透明边框的时候,会遇到一些问题。在阐述这些问题之前,首先看看什么是透明边框,总的来说,就如下图所示。 ...

  • 你不知道的CSS之边框

    1.默认情况下,背景会延伸至边框所在的区域下层。 案例:半透明边框没有出现 以上css样式在浏览器上的展示是这样子...

网友评论

  • 云音流:扎进MDN才发现自己学的真浅:joy:
    FlyingWWS:@云音流 我也是学习,想用哪个进去查一查,MDN还是很不错的,哈哈。
  • 1c8a9eb92d8c:看完很有帮助,作者分享东西很实用
    FlyingWWS:@galleSong 谢谢,共同学习哈哈:smile:

本文标题:CSS揭秘整理之半透明边框

本文链接:https://www.haomeiwen.com/subject/tzylattx.html