CSS-描边

本文详细介绍了CSS中的描边属性,包括outline与border的区别,border的多种类型,如border-image、border-block和border-inline。特别讨论了border-image的使用和border-block、border-inline在不同布局和方向上的应用,这些特性提供了更语义化的边框设置,扩展了CSS样式的表现力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS的描边是CSS中常用的属性,属于基础知识。但除了常用的纯色描边之外,CSS还有很多类型的描边。我是发现弄不清border-image是如何渲染的所以才写了这一篇文章。

outline

outline 用于描绘HTML元素的轮廓,它和border最大的区别就是outline不占空间,主要表现在

  • 不受box-sizing影响
  • 不会撑开周边的内容
  • 可以设置边线与元素之间的偏移,outline-offset
  • 如果元素被分割成多行绘制的话outline始终是绘制整个元素的外部轮廓,而border会绘制每一个区域的外部边框

outline 下的子属性相对border来说比较少,只有outline-width,outline-style,outline-color,和需要单独设置的outline-offset。

border类型

border 用于设置HTML元素的边界(描边),占据文档流空间,绘制位置受box-sizing影响。

border可以设置的属性非常多,应该是CSS中单类型样式属性最多的。大概可以分为border (常用),border-image,border-block,border-inline。

border

常用的描边样式,其下的子属性包括border-wdith,border-style,border-color。这三个子属性的作用和有效值和outline一样。

  • border-width,描边的宽度,有效值为具体的数量值,单位可以是任何有效的CSS单位。不能取百分比值
  • border-style,描边的样式,有效值为 none,hidden,dotted,dashed,solid,double,groove,ridge,inset,outset。个取值的效果如下图。
  • border-color,描边的颜色,有效值为所有合法的CSS颜色值,包括rgba()

如下,border和outline的区别,很明显border是会占据文档流,撑开下方节点,而outline不会

如下,border-style的绘制效果。

这里最要讲none和hidden,两个都是不绘制出border,但是在表单中相连的两个单元格中设置为none会绘制出重叠的边框,而设置成hidden不会。

border还引申出可以单独设置某一条边框的子属性集分别为:

  • border-top
  • border-bottom
  • border-left
  • border-right

每条边同样可以单独设置-width,-style,-color等

border-image

我们常用的是用颜色填充的边框,border还可以用图片或者渐变色填充边框。这里用到的就是border-image。

border-image可以分成以下几个子属性。

  • border-image-source
  • border-image-slice
  • border-image-outset
  • border-image-repeat
  • border-image-width

1、border-image-source

用于设置边框的图片路径或者是渐变样式。

2、border-iamge-slice

用法相对比较复杂。我们简单的可以理解为border-image生效之后,会用4条线将图片分割为9部分,然后将这9个区域的图片分别填充到border中对应的区域上,如下图所示。而border-image-slice就是用来控制这4条线距离边框边界的距离。

border-image-slice 的有效取值为

  • border-image-slice : 20;// 四条线统一设置
  • border-image-slice :20 30;//分别设置水平线和垂直线
  • border-image-slice :20 10 30;//分别为上,水平,下线
  • border-image-slice :10 20 30 40;//分别为上,下,左,右线

border-image-slice 的属性值为非负浮点数不带单位或者为百分比值,同时还有一个特殊值fill用于设置上图的第"9"区域。该值可以设置在属性值中的任意位置,如果border-image-slice设置了该值,则第"9"区域会被添加到元素的对应位置中,相当于整个元素都会被边框图片填充,类似于设置了background-image。

3、border-image-repeat

用于设置每一个区域中,图片的填充方式。当我们将图片分区完之后,再将图片添加到border对应的区域中,有可能无法铺满border对应区域,这时用border-image-repeat来设置填充方式,有效的取值如下:

  • stretch :拉伸填充
  • repeat :平铺填充
  • round :平铺填充,整数填充,不能完全填充时会整体做一定比例拉伸至铺满
  • space :平铺填充,整数填充,不能完全填充时会留白

border-image-repeat 可以分别设置水平和垂直的填充方式,如border-image-repeat :stretch space;

4、border-image-width

用于设置图片边框的高度。当border-image-width小于border-width时,只会在border外沿填充border-image-width大小,当border-image-width大于border-width会往元素内部填充。

5、border-image-outset

用于设置图片可以超出元素外框的大小,有效取值为非负浮点值,1为偏移100%,可以分别设置水平垂直或者上下左右各超出多少。

border-block 和 border-inline

接下来讲几个和border相关的新属性,border-block和border-inline。这两个样式目前还处在试验阶段,只有41版以上的火狐浏览器支持。但它们的衍生样式border-block-end等已经得到新版chrome,safari等浏览器的支持。

border-block 和 border-inline 绘制出来的边框线的位置取决于元素的书写水平或者垂直布局、文本书写的方向、文本水平溢出方向。在默认情况下各自的作用和各衍生样式的作用如下:

  • border-block : 绘制两条垂直边线,类似border-top加上border-bottom。
  • border-block-start : 在垂直方向顶部绘制一条边线,类似于border-top。
  • border-block-end :在垂直方向的底部绘制一条边线,类似于border-bottom。
  • border-inline-start : 类似于border-left。
  • border-inline-end :类似于border-right。

我们先以border-block-end 为例来看它们是如何绘制边线的。可以看出border-block-end会受writing-mode影响。而border-bottom固定绘制在底部。

再看一下border-inline-end。可以看出border-inline-end会受writing-mode和dirction影响。而border-right固定绘制在右边。

这几个新样式属性它们本身是border,每一个样式都可以更改它们的边线的大小(-widht),颜色(-color),样式(-style)。但它们有类似于文本中的对齐线(text-decoration)可以跟随文本方向所变化特性。可以用来绘制虚线的文本下划线。

相对来说border-block和border-inline更加语义化一些,也扩展了border的使用场景,使得样式效果看起来更加的符合逻辑,如下面这种情况,本来设置的是文本底部绘制描边,实际看起来像是在文本的右边绘制描边。

border-block和border-inline属于CSS逻辑属性(CSS logical properties),类似的属性还有margin-block,padding-block等等,有兴趣的可以自行谷歌。

转载于:https://juejin.im/post/5cff6df6f265da1b934df87c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值