纯CSS实现不规则的轮廓outline

举报
搞前端的半夏 发表于 2021/11/30 18:11:13 2021/11/30
【摘要】 前言日常开发中,我们经常使用border来给元素增加一些美感,但是由于盒子模型的存在,border有时候会影响我们的判断,所以今天我们来介绍另一个属性来为元素增加一些美感。 outlineoutlineCSS 中的属性在元素的外部绘制一条线。它类似于边界,除了:它总是围绕所有边,你不能指定特定的边它不是盒模型的一部分,因此不会影响元素或相邻元素的位置,也就是说outline outline...

前言

日常开发中,我们经常使用border来给元素增加一些美感,但是由于盒子模型的存在,border有时候会影响我们的判断,所以今天我们来介绍另一个属性来为元素增加一些美感。

outline

outlineCSS 中的属性在元素的外部绘制一条线。它类似于边界,除了:

  1. 它总是围绕所有边,你不能指定特定的边
  2. 它不是盒模型的一部分,因此不会影响元素或相邻元素的位置,也就是说outline outline不占据空间
  3. 它并不总是矩形

兼容性

除了IE浏览器,其他浏览器兼容性还是不错的。

语法

outline: [ <outline-width> || <outline-style> || <outline-color> ] | inherit

由此可见outline也是一个缩写的属性。

outline: 1px dashed red;

不占空间

首先定义一个p标签和一个div标签,然后div标签定义一个5px的border和一个20px的outline

p {
      outline: 1px dashed red;
  }
div {
    border:5px solid #000;
  outline: 20px dashed red;
}

<p>outline: 1px dashed red;</p>

<div>outline: 20px dashed red;</div>

最终的效果,可以清楚的看到div上定义的outlin已经跑到了p标签上。

不一是矩形

使用span进行测试,使用br进行换行,使得每一行的字数都不一样。

  <span>我是outline<br />
        我可以创建非矩形<br />
        的边框</span>
        
span {
  outline: 1px dashed red;
}

最终效果,可以看见outline只在字上面有。

换成border我们再试试

border:1px solid #000;

乍一看,好像border创建的也是不规则的呀,但是再仔细看,边框其实并不是不规则的,只是换行了而已。

outline-style 轮廓样式

属性值

dotted

dashed

solid

double

groove

ridge

inset

outset

outline-color 轮廓颜色

颜色值

outline-color: invert;

invert (IE兼容)

经测试:最新版的chrome和火狐浏览器不支持此值
仅在IE中测试使用

对比

页面的背景颜色是白色,outline就是黑色。
outline-color: invert;

页面的背景颜色是黑色,outline就是白色。

outline-width 轮廓宽度

属性值

thin

1px

medium

3px

thick

5px

<length>

outline-width: 10px;

outline-offset 轮廓偏移

数值

当参数值为正数时,表示轮廓向外偏移
outline-offset: 10px;

当参数值为负值时,表示轮廓向内偏移

outline-offset: -10px;

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。