css 中 inset属性 以及简单实现spinner

背景

水文,记录下css属性而已

inset

inset 是 CSS 中的一个简写属性,用于同时设置元素的 toprightbottomleft 四个定位属性。它的设计目的是简化定位相关的样式声明,尤其适合需要同时调整元素四个方向位置的场景。

基本语法

inset 可以接受 1~4 个值,遵循与 marginpadding 类似的简写规则:

css 复制代码
/* 1个值:同时应用于 top/right/bottom/left */
inset: <value>;

/* 2个值:第1个值对应 top/bottom,第2个值对应 right/left */
inset: <value1> <value2>;

/* 3个值:第1个值对应 top,第2个值对应 right/left,第3个值对应 bottom */
inset: <value1> <value2> <value3>;

/* 4个值:分别对应 top、right、bottom、left(顺时针顺序) */
inset: <value1> <value2> <value3> <value4>;

取值类型

inset 支持多种 CSS 长度单位和关键字:

  • 长度单位:pxemrem% 等(例如 inset: 10px 20%
  • 关键字:auto(默认值,由浏览器自动计算)
  • 其他:calc() 计算值(例如 inset: calc(50% - 100px)

与单独属性的对应关系

inset 的简写方式完全等价于分别设置四个方向的属性,例如:

css 复制代码
/* 简写形式 */
inset: 10px 20px 30px 40px;

/* 等价于单独声明 */
top: 10px;
right: 20px;
bottom: 30px;
left: 40px;

再举几个例子:

  • inset: 0;top:0; right:0; bottom:0; left:0;(最常用场景)
  • inset: 10px auto;top:10px; bottom:10px; right:auto; left:auto;
  • inset: 0 20%;top:0; bottom:0; right:20%; left:20%;

使用场景

inset 通常与 position 属性 fixed 属性 配合使用,根据不同的定位方式产生不同效果:

  • position: absolute
    元素相对于最近的「已定位祖先」(position 不为 static 的祖先)定位,inset 控制元素与祖先的边距。
    例:让元素填充整个定位容器(常用作全屏遮罩或背景层):
css 复制代码
.overlay {
  position: absolute;
  inset: 0; /* 完全覆盖父容器 */
  background: rgba(0,0,0,0.5);
}
  • position: fixed
    元素相对于视口(浏览器窗口)定位,inset 控制元素与视口的边距。
    例:固定在页面顶部的导航栏,宽度占满屏幕:
css 复制代码
.navbar {
  position: fixed;
  inset: 0 0 auto 0; /* top:0; right:0; bottom:auto; left:0; */
  height: 60px;
}

以下 fiexd定位 可以实现撑开父元素,原先我们需要设置 width:100% height:100%的 现在直接 inset: 0;即可撑开父元素

js 复制代码
.loading {
      position: fixed;
      inset: 0;
      background: red;
    }

简单实现spinner

我们借助 border border-topborder-radius 可以简化的实现 spinner效果 代码如下

js 复制代码
.spinner {
      width: 100px;
      height: 100px;
      border: 5px solid gray;
      border-left: 5px solid red;
      border-radius: 50%;
      animation: spin 2s linear infinite;
    }

    @keyframes spin {
     from {
        transform: rotate(0deg);
      }
      to {
        transform: rotate(360deg);
      }
    }
相关推荐
NiceCloud喜云6 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
wordbaby6 小时前
React Native + RNOH:跨页面数据回传的最佳实践与避坑指南
前端·react native
丷丩6 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
Front思7 小时前
AI前端工程师需要具备能力+
前端·人工智能·ai
ZC跨境爬虫9 小时前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。10 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星10 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒11 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端
丷丩11 小时前
MapLibre GL JS第19课:实时更新要素
前端·javascript·gis·map·mapbox·maplibre gl js
Mr.Daozhi11 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具