前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CSS魔法堂:那个被我们忽略的outline

CSS魔法堂:那个被我们忽略的outline

作者头像
^_^肥仔John
发布于 2018-10-11 06:54:34
发布于 2018-10-11 06:54:34
76000
代码可运行
举报
运行总次数:0
代码可运行

前言

 在CSS魔法堂:改变单选框颜色就这么吹毛求疵!中我们要模拟原生单选框通过Tab键获得焦点的效果,这里涉及到一个常常被忽略的属性——outline,由于之前对其印象确实有些模糊,于是本文打算对其进行稍微深入的研究^_^

Spec是这样描述它的

作用

 用于创建可视对象的轮廓(元素的border-box),如表单按钮轮廓等。

与border不同

  1. outline不占文档空间;
  2. outline不一定是矩形。 具体属性说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 轮廓线颜色 
 * invert表示为颜色反转,即使轮廓在不同的背景颜色中都可见 
 */
outline-color: invert | <color_name> | <hex_number> | <rgb_number> | inherit
/* 轮廓线样式 */
outline-style: none | dotted | dashed | solid | double | groove | ridge | inset | outset | inherit
/* 轮廓线宽度 */
outline-width: medium | thin | thick | <length> | inherit
/* 一次性设置轮廓线的颜色、样式 和 宽度 */
outline: <outline-color> <outline-style> <outline-width>;
/* 轮廓线的偏移量,大于0则轮廓扩大,小于0则轮廓缩小 */
outline-offset: 0px;

魔鬼在细节

兼容性

outline作为CSS2.1规范,因此IE6/7/8(Q)均不支持,在IE8下写入正确的DOCTYPE则支持outline属性。

outline-offset则IE下均不支持。

IE6/7/8(Q)下隐藏outline

若要在IE6/7/8(Q)下隐藏outline效果,则在元素上添加hideFocus特性即可。

outline:0outline:none的区别

在Chrome下执行如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style type="text/css">
 .outline0{
   outline: 0;
 }
 .outline-none{
   outline: none;
 }
</style>
<a href="#" class="outline0">outline: 0</a>
<a href="#" class="outline-none">outline: none</a>
<script type="text/javascript">
  const $ = document.querySelector.bind(document)
  const print = console.log.bind(console)
  const cssProps = ["outline-width", "outline-style", "outline-color"]
  const slctrs = [".outline0", ".outline-none"]
     
  slctrs.forEach(slctr => {
    styles = window.getComputedStyle($(slctr))
      cssProps.forEach(cssProp => {
        print("%s, %s is %s", slctr, cssProp, styles[cssProp])
      })
    })
</script>

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.outline0, outline-width is 0px
.outline0, outline-style is none
.outline0, outline-color is rgb(0, 0, 238)
.outline-none, outline-width is 0px
.outline-none, outline-style is none
.outline-none, outline-color is rgb(0, 0, 238)

outline仅仅为设置单个或多个具体的outline属性提供更便捷的API而已,因此outline:0outline:none本质上效果是一致的。

真心没法弄出圆角

 自从有了border-radius后,我们就可以通过CSS制作圆角矩形、圆形等图形,甚至连box-shadow也受到border-radius影响从而实现元素阴影也能做到圆角的效果。那么outline是否也能做出圆角的效果呢?答案是否定的。那是因为outline的作用本来就是用于勾勒出元素所占的空间轮廓,通过border-radius虽然实现了图形视觉上的圆角,但该元素所占位置空间一点都没有变化,还是那个有棱有角的方形。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style type="text/css">
  .round{
    width: 100px;
    height: 100px;
    background: yellow;
    border-radius: 50%;
    outline: solid 1px red;
  }
</style>

轮廓的差异

 在Chrome下outline仅限于标识当前元素自身所占的位置空间(border-box),但在FireFox下则包含子孙元素所占的位置空间。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style type="text/css">
  .outline{
    width: 13px;
    height: 13px;
    outline: 1px solid red;
  }
</style>
<div class="outline"></div>
<script type="text/javascript">
  const el = document.querySelector(".outline")
  el.textContent = !!~navigator.appVersion.indexOf("Chrome") ? "Chrome" : "FireFox"
</script>

总结

 尊重原创,转载请注明来自:https://cloud.tencent.com/developer/article/1353544 ^_^肥仔John

参考

https://www.xuebuyuan.com/757567.html

https://www.zhangxinxu.com/wordpress/2010/01/%E9%A1%B5%E9%9D%A2%E5%8F%AF%E7%94%A8%E6%80%A7%E4%B9%8Boutline%E8%BD%AE%E5%BB%93%E5%A4%96%E6%A1%86%E7%9A%84%E4%B8%80%E4%BA%9B%E7%A0%94%E7%A9%B6/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
css基础教程之其他常用css知识
<url> 使用指定的绝对或相对地址插入一个外部资源(图像,声频,视频或浏览器支持的其他任何资源)
老雷PHP全栈开发
2020/07/02
4260
解决Chrome或其它WebKit浏览器input和textarea的黄色/蓝色边框问题
之前在折腾主题的时候发现一个很怪的现象,在Chrome浏览器下,输入框有一个黄色的边框;而在其它WebKit浏览器(如Jeff使用的傲游浏览器)下,输入框的颜色是蓝色的(见下面的图片)。Jeff以为是
Jeff
2018/01/19
2.2K0
解决Chrome或其它WebKit浏览器input和textarea的黄色/蓝色边框问题
CSS魔法堂:重拾Border之——不仅仅是圆角
前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-top-left/right-radius的水平半径之和大于元素宽度时,实际值会按比例分配元素宽度时,不禁会问"我真的懂border吗?"。本系列将稍微深入探讨一下那个貌似没什么好玩的border! 《CSS魔法堂:重拾Border之——解构Border》 《CSS魔法堂:重拾Border之——图片作边框》
^_^肥仔John
2018/01/18
1.4K0
CSS魔法堂:重拾Border之——不仅仅是圆角
寒假提升 | Day6 CSS 第四部分
当给父元素div(类名为box)设置font-size,color,text-align这些属性时,由于这些属性具有继承性,所以该父元素下的所有子元素(p,span,div)都会默认继承这些属性
Zkeq
2023/01/30
1.3K0
简单了解css3轮廓outline
outline-offset: -66px; 是关键,它表示轮廓距div边的距离,如果为负值则会往里面收缩,最后形成一个加号。
Daotin
2019/08/14
4760
CSS3-边框和背景
CSS3中边框和样式得到了增强。例如:可以创建圆角边框,使用图像边框,为元素创建阴影。
奋飛
2019/08/15
1.4K0
css常用的样式总结
word-break 换行 word-break:break-all 所有的都换行 word-wrap:break-word 如果一行文字有可以换行的点,如空格,或CJK之类的,就让这些换行点换行,不关心对不对齐,好不好看。容易出现一片一片的空白 css3中自动调整大小 div{ width: 300px; height: 300px; padding: 10px; border: 2px solid green;
友儿
2022/09/13
7030
CSS魔法堂:Box-Shadow没那么简单啦:)
前言  说起box-shadow那第一个想法当然就是用来实现阴影,其实它还能用于实现其他好玩的效果的,本篇就打算说说box-shadow的那些事。 二话不说看效果 3D小球 <style type
^_^肥仔John
2018/01/18
1.3K0
CSS魔法堂:Box-Shadow没那么简单啦:)
CSS魔法堂:重拾Border之——解构Border
前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-top-left/right-radius的水平半径之和大于元素宽度时,实际值会按比例分配元素宽度时,不禁会问"我真的懂border吗?"。本系列将稍微深入探讨一下那个貌似没什么好玩的border! 《CSS魔法堂:重拾Border之——解构Border》 《CSS魔法堂:重拾Border之——图片作边框》
^_^肥仔John
2018/01/18
1.1K0
CSS魔法堂:重拾Border之——解构Border
【CSS】更改用户界面样式 ② ( 取消轮廓线 outline | 取消轮廓线设置方式 outline: 0; | 代码示例 )
一、更改轮廓线 outline 轮廓线 是 元素 边框 外面 的一条线 , 其作用是 选中后突出元素 ; 一般情况下都会去掉 轮廓线 显示 ; outline 样式后可设置 1 ~ 3 个参数 , 按照顺序分别是 : outline-color 轮廓线颜色 outline-style 轮廓线风格 outline-width 轮廓线宽度 常用的取消轮廓线的设置是 outline: 0; 或者 outline: none; 取消轮廓线内嵌式写法 : <input type="text" style="outli
韩曙亮
2023/04/24
5020
【CSS】更改用户界面样式 ② ( 取消轮廓线 outline | 取消轮廓线设置方式 outline: 0; | 代码示例 )
CSS3 Border属性介绍
通过边框属性,我们可以实现一些类似按钮或者背景图片的替代效果。因为大量的图片素材对网页的加载速度影响也很大,但是由于现在的浏览器对css3的兼容与支持各有不同,所以现在要用css替代 配合图片达到的效果还是不太现实。
py3study
2020/01/14
7480
Css学习手册之基本篇
Css学习手册之基本篇 每次写前端都是一个痛苦的过程,总是静不下来,彻底的研究下前端的技术,导致每次套页面都是直接采用一些封装好的控件,而有时对这些样式不满意时,又得百度一下该怎么用,低效且不愉快,强制自己好好的学习下基本功 <!-- more --> I. 基本使用姿势 0. 几种css使用姿势 主要有下面三个使用姿势,其中优先级为 c > b > a a.直接引入css文件 b.在html中,直接写css: c.在标签中直接写css <!-- 方式 a --> <link rel="stylesheet
一灰灰blog
2018/04/18
1.9K0
Css学习手册之基本篇
IT课程 CSS基础 024_边框、轮廓、阴影
border-top, border-right, border-bottom, border-left: 分别设置顶部、右侧、底部、左侧的边框。
zhaoJian.Net
2024/04/03
1150
IT课程 CSS基础 024_边框、轮廓、阴影
CSS——边框
定义 边框(Border)属性是对HTML元素的边框进行定义的CSS属性。 概述 通过边框的样式设置,给元素增加更丰富的外观 边框的设置包含以下内容: 边框的类型 边框的尺寸 边框的前景背景 圆角边框 列表 元素 描述 border border 属性是规定各种单独的边界属性的简写属性,可用于设置一个或多个以下属性的值:border-width,border-style,border-color。 border-bottom border-bottom 该属性是用来将下边框的所有属性:border-bott
Html5知典
2019/11/26
3.9K0
CSS Input 样式美化
可以从上图看出,在点击输入input的适合,框边就显示比较粗的边框,那么怎么将这个样式取消呢?
Devops海洋的渔夫
2019/05/31
5K0
CSS3文本居中显示、圆形圆角绘制、立体阴影效果设置实例演示
通过 div 层的 text-align: center; 先控制文本在横向中间,再根据 margin-top: 48%; 即可控制文本显示在图形的竖向中间部位,值可以根据文本的大小来定位,大约略小于百分之 50%。
小蓝枣
2022/04/01
1.5K0
CSS3文本居中显示、圆形圆角绘制、立体阴影效果设置实例演示
10.7 border-width边框粗细:outline与border有什么不同?
为什么线的粗细叫宽度?边框线像马路往前冲,马路的宽度就好比是线的宽度。此外,还有stroke-width,是以后学Canvas绘制时要接触到的,是绘制的线的粗细,它们的名字是类似的。
LIYI
2020/10/26
2.5K0
10.7 border-width边框粗细:outline与border有什么不同?
css3动画从入门到精通
什么是css3动画? 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片、Flash 动画以及 JavaScript。 CSS3带来了圆角,半透明,阴影,渐变,多背景图等新的特征,轻松实
xiangzhihong
2018/02/05
2.5K0
css3动画从入门到精通
CSS笔记
文本字体 font-family:设置字体 font-size:字体大小 font-style:斜体(normal正常,italic斜体,oblique偏斜体) font-weight: 加粗(normal正常,bold粗体,bolder特粗,lighter特细体) font-variant:字体变体 letter-spacing:字母间距 word-spacing:单词间距 text-decoration: 文字修饰(underline下划线,overline上划线,line-through删除线) te
菜鸟雷
2020/10/23
2K0
初探HTML之CSS篇(属性)
前言 I am a slow walker,but I never walk backwards. ---- CSS(层叠样式表) CSS是一种用来表现HTML或XML等文件样式的计算机语言。CSS不仅可以静态修饰网页,还可以配合各种脚本语言动态地对网页哥元素进行格式化。 CSS能够对网页中元素位置的排版进行像素精确控制,几乎支持所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。 ---- CSS 尺寸属性(Dimension) height 设置元素高度 width 设置元素宽度 max-he
用户1667431
2018/04/18
2.1K0
相关推荐
css基础教程之其他常用css知识
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文