CSS 之 跑马灯边框

这篇具有很好参考价值的文章主要介绍了CSS 之 跑马灯边框。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

​ 之前有做过渐变色边框的样式,然后某天刷抖🎵,看到某个老师在讲跑马灯的样式效果,于是就自己尝试实现一下跑马灯样式的边框,虽然这种样式并不常见(基本没卵用),其使用场景我至今没想到,但是它足够花里胡哨,玩的就是花活。CSS才是前端最难精通的技术,也是前端对于后端最大的技术难点。以后可不敢在简历上写精通、熟练CSS了,最多写个见过CSS就可以了。

​ 经过一番实践,我实现了两种形态的跑马灯样式边框,其效果如下图所示。其主要使用的CSS属性有:overflowpositiontransform animation@keyframes以及::after::before等等。

案例效果:

CSS 之 跑马灯边框,花样CSS,css,前端

二、具体代码

1、首尾不相连的跑马灯边框
实现思路:

border属性本身肯定是实现不了跑马灯的效果,因为其不能变化。因此我们就要想别的办法来实现边框的样式。实现方法:

​ ① 利用padding属性使元素的内容区域与最外层之间形成一个间隔。

​ ② 利用伪元素::after position,将该伪元素模拟为元素的内容区域,并设置背景颜色和圆角等样式,此时我们就实现了一个有透明边框的元素了,padding区域就是边框区域。

​ ③ 利用伪元素::before定义一个具有渐变色背景的伪元素,然后通过动画使其围绕元素的中心点旋转。该伪元素的渐变背景决定了跑马灯边框的颜色。

​ ④设置元素的overflow: hidden;,隐藏伪元素::before在旋转时,超出元素的部分,并通过设置层级,使伪元素::after 覆盖在伪元素::before之上。这样旋转的伪元素::before就只能在padding区域内显示出来,也就是将其模拟成边框的效果,再加上旋转动画,从而显示出跑马灯边框的效果。

具体代码:
<style>
    /* 定义一个全局的css变量 该宽度决定了边框的宽度 */
    :root {
      --border-width: 5px;
    }

    /* 定义盒子区域的宽高 包含边框所占区域 */
    .d1 {
      position: relative;
      width: 200px;
      height: 60px;
      /* 为了让内容区域不被边框覆盖 设置等宽的padding */
      padding: var(--border-width);
      margin: 200px auto;
      /* 设置元素圆角 */
      border-radius: 10px;
      text-align: center;
      line-height: 60px;
      color: #333;
      /* 隐藏超出的部分 这很重要 */
      overflow: hidden;
    }

    /* 利用伪元素::after 定义盒子内容区域 */
    .d1::after {
      content: '';
      position: absolute;
      /* 使用css变量定位内容区域位置 */
      left: var(--border-width);
      top: var(--border-width);
      /* 根据css变量设置内容区域的宽高 */
      width: calc(100% - var(--border-width) * 2);
      height: calc(100% - var(--border-width) * 2);
      background: #ccc;
      /* 设置元素层级小于父级元素 使父元素的内容能够显示在该内容区域之上 */
      z-index: -1;
      /* 设置圆角 要比父元素的圆角小一些 */
      border-radius: 6px;
    }

    /* 利用伪元素::before 定义盒子边框区域 */
    .d1::before {
      content: '';
      position: absolute;
      /* 利用定位将元素的左上角定位到父元素的中心 */
      left: 50%;
      top: 50%;
      /* 设置该元素的宽高 要大于父元素的宽高 */
      width: 220px;
      height: 220px;
      /* 设置该元素的渐变背景 */
      background: linear-gradient(90deg, #000, yellow 20%);
      /* 设置该元素的层级 要小于用伪元素::after 定义的盒子内容区域 */
      z-index: -2;
      /* 利用动画旋转该元素 */
      animation: rotate1 1.3s linear infinite;
      /* 定义旋转的圆心为元素的左上角 */
      transform-origin: 0 0;
    }

    /* 声明旋转动画 */
    @keyframes rotate1 {
      0% {
        transform: rotate(0deg);
      }

      100% {
        transform: rotate(360deg);
      }
    }
</style>

<!-- 跑马灯边框的根元素 -->
<div class="d1">跑马灯边框1</div>
页面效果:

CSS 之 跑马灯边框,花样CSS,css,前端

为了帮助理解,去除掉overflow: hidden属性的效果图:

CSS 之 跑马灯边框,花样CSS,css,前端

2、首尾相连的跑马灯边框
实现思路:

​ 其实该样式的实现思路与前面的基本相同,只不过是修改了边框元素的位置和旋转的中心点,使其能够在旋转动的过程中,覆盖边框的所有区域,从而使跑马灯首尾相连。实现方法:

​ ① 利用padding属性使元素的内容区域与最外层之间形成一个间隔。

​ ② 利用伪元素::after position,将该伪元素模拟为元素的内容区域,并设置背景颜色和圆角等样式,此时我们就实现了一个有透明边框的元素了,padding区域就是边框区域。

​ ③ 利用伪元素::before定义一个具有渐变色背景的伪元素,先通过positiontransform使该伪元素的中心点与根元素的中心点对齐,然后通过动画使其围绕元素的中心点旋转。同时该伪元素的渐变背景决定了跑马灯边框的颜色。

​ ④设置元素的overflow: hidden;,隐藏伪元素::before在旋转时,超出元素的部分,并通过设置层级,使伪元素::after 覆盖在伪元素::before之上。这样旋转的伪元素::before就只能在padding区域内显示出来,也就是将其模拟成边框的效果,再加上旋转动画,从而显示出跑马灯边框的效果。

具体代码:
<style>
		/* 定义一个全局的css变量 该宽度决定了边框的宽度 */
    :root {
      --border-width: 5px;
    }
  	    /* 定义盒子区域的宽高 包含边框所占区域 */
    .d2 {
      position: relative;
      width: 200px;
      height: 60px;
      /* 为了让内容区域不被边框覆盖 设置等宽的padding */
      padding: var(--border-width);
      margin: 200px auto;
      /* 设置元素圆角 */
      border-radius: 10px;
      text-align: center;
      line-height: 60px;
      color: #333;
      /* 隐藏超出的部分 这很重要 */
      overflow: hidden;
    }

    /* 利用伪元素::after 定义盒子内容区域 */
    .d2::after {
      content: '';
      position: absolute;
      /* 使用css变量定位内容区域位置 */
      left: var(--border-width);
      top: var(--border-width);
      /* 根据css变量设置内容区域的宽高 */
      width: calc(100% - var(--border-width) * 2);
      height: calc(100% - var(--border-width) * 2);
      background: #ccc;
      /* 设置元素层级小于父级元素 使父元素的内容能够显示在该内容区域之上 */
      z-index: -1;
      /* 设置圆角 要比父元素的圆角小一些 */
      border-radius: 6px;
    }

    /* 利用伪元素::before 定义盒子边框区域 */
    .d2::before {
      content: '';
      position: absolute;
      /* 利用定位和位移将元素的中心点定位到父元素的中心点 */
      left: 50%;
      top: 50%;
      transform: translateY(-50%) translateX(-50%);
      width: 220px;
      height: 220px;
      /* 设置该元素的渐变背景 该背景决定了跑马灯边框的颜色 */
      background: linear-gradient(-45deg, #000, yellow 60%);
      /* 设置该元素的层级 要小于用伪元素::after 定义的盒子内容区域 */
      z-index: -2;
      /* 利用动画旋转该元素 */
      animation: rotate2 1.5s linear infinite;
      /* 设置旋转的圆心为元素的中心点 */
      transform-origin: 50% 50%;
    }

    /* 声明旋转动画 旋转的同时 保持元素位置不变 */
    @keyframes rotate2 {
      0% {
        transform: translateY(-50%) translateX(-50%) rotate(0deg);
      }

      100% {
        transform: translateY(-50%) translateX(-50%) rotate(360deg);
      }
    }
</style>

<!-- 跑马灯边框的根元素 -->
<div class="d2">跑马灯边框2</div>
页面效果:

CSS 之 跑马灯边框,花样CSS,css,前端

为了帮助理解,去除掉overflow: hidden属性的效果图:

CSS 之 跑马灯边框,花样CSS,css,前端文章来源地址https://www.toymoban.com/news/detail-799315.html

到了这里,关于CSS 之 跑马灯边框的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS中如何实现文字跑马灯效果?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月09日
    浏览(35)
  • 前端Vue自定义精美上下滚动通告栏组件 常用于展示公告信息 上下滚动跑马灯 上下滚动广播

    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随

    2024年02月09日
    浏览(38)
  • 单片机(3)跑马灯,按钮控制的跑马灯(2种编程)

     先上电路图(图示的是高电平点亮的跑马灯)  这个是程序截图(keil5):我的建议是是先自己打一遍,边打边试着理解程序的意思。 下面的是没有注释的代码 下一个是另外一种编程思路  

    2024年02月11日
    浏览(28)
  • 跑马灯实验

             1.熟悉龙芯实验开发板、熟悉 VIVADO 的编译环境及操作流程。         2.掌握 FPGA 编程入门知识、利用门级方法实现简单逻辑电路。         3.继续学习 Verilog HDL 语法、掌握跑马灯的设计、熟悉调试过程。          本次实验用 Verilog HDL 语言来描述 6 个不

    2024年02月04日
    浏览(29)
  • 3.跑马灯

    推挽模式输出:因为LED0和LED1阳极都是3.3V,需要将阴极设置为低电平才可以点亮LED; 操作io口时,必须引入源文件和头文件; 关于时钟的文件存放在rcc中; void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); 作用:初始化一个或多个io口(同一组)的工作方式和速度, 该函数

    2024年02月10日
    浏览(34)
  • Android --- 跑马灯效果

    跑马灯效果主要使用的控件为TextView,其中涉及的几个标签如下所示: android:ellipsize If set, causes words that are longer than the view is wide to be ellipsized instead of broken in the middle. You will often also want to set scrollHorizontally or singleLine as well so that the text as a whole is also constrained to a single line in

    2023年04月08日
    浏览(65)
  • Android 实现跑马灯效果

    Android中实现跑马灯效果有多种方式,本篇简单介绍下: 1: TextView属性实现 这里需要注意下: 需要限制textview的宽度,不能设置为wrap_content 启动跑马灯效果需要获取焦点requestFocus(). 2: 代码实现 3: 自定义 view实现 这里可以使用动画的效果实现. 4: 实现竖直效果的跑马灯

    2024年01月18日
    浏览(43)
  • 跑马灯实验(stm32)

    说明:以下内容参考正点原子的相关资料 这里使用的是位带操作来实现操作某个 IO 口的 1 个位 相应的库函数操作代码。 BSRR:端口位设置/清除寄存器 BRR:端口位清除寄存器 可以看到红绿灯交错闪烁

    2024年02月13日
    浏览(29)
  • Vue跑马灯简单案列

    套在自己的vue模板里面即可 content是显示的内容,shouldMove是否滚动(如果大于了文本框才滚动,否则禁止不懂),showResult是否显示滚动条 效果

    2024年02月22日
    浏览(31)
  • 基于Verilog的跑马灯设计

    设计一个能够有多种工作模式控制的8个灯亮灭的电路。 工作模式1:按照从左到右的方向,依次点亮每一盏灯,然后依次熄灭每一盏灯; 工作模式2:分成两组灯,前四个灯为1组,后四个为2组,1组灯按从左到右依次点亮,同时2组灯按从右到左依次点亮,然后两组灯按各自点

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包