404系列之404界面

news2024/12/30 2:01:42

先看效果:
在这里插入图片描述
再看代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
  <style>
    * {
      border: 0;
      box-sizing: border-box;
      margin: 0;
      padding: 0;
    }
    :root {
      --hue: 223;
      --bg: hsl(var(--hue),10%,90%);
      --fg: hsl(var(--hue),10%,10%);
      --primary: hsl(var(--hue),90%,45%);
      --primary-down: hsl(var(--hue),90%,65%);
      --trans-dur: 0.3s;
      font-size: calc(16px + (24 - 16) * (100vw - 320px) / (2560 - 320));
    }
    body {
      background-color: var(--bg);
      color: var(--fg);
      display: flex;
      font: 1em/1.5 Nunito, sans-serif;
      height: 100vh;
      transition:
              background-color var(--trans-dur),
              color var(--trans-dur);
    }
    main {
      display: grid;
      grid-gap: 3em 1.5em;
      margin: auto;
      max-width: 40em;
      padding: 3em 0;
      text-align: center;
      width: calc(100% - 3em);
    }
    h1 {
      font-size: 3em;
      line-height: 1;
      margin: 0 0 1.5rem;
    }
    p {
      margin: 0 0 1.5em;
    }
    .btn-link {
      background: var(--primary);
      border-radius: 1.5em;
      display: inline-block;
      outline: transparent;
      padding: 0.75em 1.5em;
      text-align: center;
      text-decoration: none;
      transition: background-color 0.15s linear;
    }
    .btn-link,
    .btn-link:visited {
      color: hsl(0,0%,100%);
    }
    .btn-link:focus-visible,
    .btn-link:hover {
      background: var(--primary-down);
    }
    .btn-link:hover {
      text-decoration: none;
    }
    .paper {
      display: block;
      margin: auto;
      overflow: visible;
      width: 100%;
      max-width: 224px;
      height: auto;
    }
    .paper__fill {
      fill: hsl(0,0%,100%);
    }
    .paper__outline,
    .paper__lines {
      transition: stroke var(--trans-dur);
    }
    .paper__outline {
      stroke: hsl(var(--hue),10%,10%);
    }
    .paper__lines {
      stroke: hsl(var(--hue),10%,70%);
    }
    .paper__shadow {
      fill: hsl(var(--hue),10%,70%);
      transition: fill var(--trans-dur);
    }
    .paper__top,
    .paper__bottom,
    .paper__tear,
    .paper__tear-fill {
      animation: paperTop 1.25s cubic-bezier(0.77,0,0.18,1);
    }
    .paper__top,
    .paper__bottom {
      transform-origin: 0 148px;
      transition: transform var(--trans-dur) cubic-bezier(0.77,0,0.18,1);
    }
    .paper__top {
      transform: translate(0,8px);
    }
    .paper__bottom {
      animation-name: paperBottom;
      transform: translate(0,42px);
    }
    .paper__tear,
    .paper__tear-fill {
      animation-timing-function: cubic-bezier(0.32,0,0.67,0);
    }
    .paper__tear {
      animation-name: paperTear;
      stroke-dashoffset: 0;
    }
    .paper__tear-fill {
      animation-name: paperTearFill;
    }
    .paper__outline:hover .paper__top,
    .paper__outline:hover .paper__bottom {
      transform: translate(0,25px);
    }

    /* 深色主题 */
    @media (prefers-color-scheme: dark) {
      :root {
        --bg: hsl(var(--hue),10%,25%);
        --fg: hsl(var(--hue),10%,90%);
      }
      .paper__shadow:first-child {
        fill: hsl(var(--hue),10%,15%);
      }
    }

    @media (min-width: 768px) {
      main {
        grid-template-columns: 1fr 2fr;
        align-items: center;
        text-align: left;
      }
      .paper {
        max-width: 300px;
      }
    }

    /* 动画 */
    @keyframes paperTop {
      from,
      40% {
        animation-timing-function: cubic-bezier(0.32,0,0.67,0);
        transform: translate(0,25px) rotate(0);
        transform-origin: 61px 148px;
      }
      70% {
        animation-timing-function: cubic-bezier(0.33,1,0.67,1.5);
        transform: translate(0,25px) rotate(-5deg);
        transform-origin: 61px 148px;
      }
      to {
        transform: translate(0,8px) rotate(0);
        transform-origin: 0 148px;
      }
    }
    @keyframes paperBottom {
      from,
      40% {
        animation-timing-function: cubic-bezier(0.32,0,0.67,0);
        transform: translate(0,25px) rotate(0);
        transform-origin: 61px 148px;
      }
      70% {
        animation-timing-function: cubic-bezier(0.33,1,0.67,1.5);
        transform: translate(0,25px) rotate(5deg);
        transform-origin: 61px 148px;
      }
      to {
        transform: translate(0,42px) rotate(0);
        transform-origin: 0 148px;
      }
    }
    @keyframes paperTear {
      from,
      40% {
        stroke-dashoffset: -198;
      }
      70%,
      to {
        stroke-dashoffset: 0;
      }
    }
    @keyframes paperTearFill {
      from,
      40% {
        width: 187px;
      }
      70%,
      to {
        width: 0;
      }
    }
  </style>
</head>
<body>
<main>
  <div>
    <svg class="paper" viewBox="0 0 300 300" width="300px" height="300px" role="img" aria-label="A piece of paper torn in half">
      <g class="paper__outline" fill="none" stroke="hsl(0,10%,10%)" stroke-width="8" stroke-linecap="round" stroke-linejoin="round" transform="translate(61,4)">
        <g class="paper__top" transform="translate(0,25)">
          <polygon class="paper__shadow" fill="hsl(0,10%,70%)" stroke="none" points="0 148,0 0,137 0,187 50,187 148,155 138,124 148,93 138,62 148,31 138" transform="translate(-12,12)" />
          <rect class="paper__tear-fill" fill="hsl(0,0%,100%)" stroke="none" x="0" y="137" width="0" height="23px" />
          <polygon class="paper__fill" fill="hsl(0,0%,100%)" stroke="none" points="0 148,0 0,137 0,187 50,187 148,155 138,124 148,93 138,62 148,31 138" />
          <polygon class="paper__shadow" fill="hsl(0,10%,70%)" stroke="none" points="137 0,132 55,187 50,142 45" />
          <polyline points="137 0,142 45,187 50" />
          <polyline points="0 148,0 0,137 0,187 50,187 148" />
          <g class="paper__lines" stroke="hsl(0,10%,70%)">
            <polyline points="22 88,165 88" />
            <polyline points="22 110,165 110" />
            <polyline points="22 132,165 132" />
          </g>
          <polyline class="paper__tear" points="0 148,31 138,62 148,93 138,124 148,155 138,187 148" stroke-dasharray="198 198" stroke-dashoffset="-198" />
        </g>
        <g class="paper__bottom" transform="translate(0,25)">
          <polygon class="paper__shadow" fill="hsl(0,10%,70%)" stroke="none" points="0 148,31 138,62 148,93 138,124 148,155 138,187 148,187 242,0 242" transform="translate(-12,12)" />
          <polygon class="paper__fill" fill="hsl(0,0%,100%)" stroke="none" points="0 148,31 140,62 148,93 138,124 148,155 138,187 148,187 242,0 242" />
          <polyline points="187 148,187 242,0 242,0 148" />
          <g class="paper__lines" stroke="hsl(0,10%,70%)">
            <polyline points="22 154,165 154" />
            <polyline points="22 176,165 176" />
            <polyline points="22 198,94 198" />
          </g>
          <polyline class="paper__tear" points="0 148,31 138,62 148,93 138,124 148,155 138,187 148" stroke-dasharray="198 198" stroke-dashoffset="-198" />
        </g>
      </g>
    </svg>
  </div>
  <div>
    <h1>404</h1>
    <p>We couldn’t find the page you were looking for. It may have been moved, or it just doesn’t exist.</p>
    <a class="btn-link" href="#">Go Back Home</a>
  </div>
</main>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PLC数据采集如何实现远程监控和远程维护上下载?

随着PLC在工业自动化控制领域得到越来越广泛的应用&#xff0c;PLC数据采集是也逐渐成为现代工业自动化的重要组成部分。通过采集PLC内的数据&#xff0c;可以实时监测控制生产过程及工艺参数&#xff0c;提高生产效率和产品质量&#xff0c;能够使企业能够获取关键生产数据&am…

面试中经常问到的线程安全的集合类,这样回答会显得很优雅

前言&#xff1a; 本篇文章主要讲解面试中经常问到的线程安全的集合类的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以…

03【锁、事务原理、MVCC】

文章目录 一、MySQL锁机制1.1 锁的分类1.1.1 按操作分1.1.2 按粒度分1.1.3 按算法划分 1.2 MyIsam引擎锁1.2.1 准备数据1.2.2 MySIAM引擎写锁1.2.3 MySIAM引擎读锁1.2.4 小结1.2.5 表锁应用场景1.2.6 InnoDB的表锁1.2.7 MyISAM 的并发插入1.2.8 MyISAM的锁调度 1.3 InnoDB 引擎…

通达信超跌反弹选股公式,使用筹码函数WINNER

在前面的文章中&#xff0c;已经介绍了WINNER函数&#xff0c;不过对于如何使用函数&#xff0c;当时只进行了简单举例&#xff0c;没有做深入研究。本文将结合WINNER函数的特性&#xff0c;编写通达信超跌反弹选股公式。 WINNER函数表示获利盘比例&#xff0c;取值范围是0-1&…

【Leetcode】17.电话号码的字母组合

一、题目 1、题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例1: 输入:digits = "23" 输出:["ad","ae",…

剑指 Offer 38: 字符串的排列

这道题一看就是使用回溯法&#xff0c;但是由于是排列&#xff0c;所以索引和组合不同&#xff08;组合的索引是从start标志位开始&#xff09;&#xff0c;排列是从下标为0开始&#xff0c;并且需要借助排序&#xff01;所以需要先转化成将String转化为char[]类型&#xff0c;…

微信小程序开发流程

如今微信小程序定制需要一个开发周期和流程&#xff0c;比起模板来说&#xff0c;定制开发的流程更加复杂。做微信小程序定制开发&#xff0c;首先要做的工作就是确定需求和框架的确立&#xff0c;比如一个社交小程序&#xff0c;可能考虑的问题不只是用户之间消息沟通&#xf…

Android 之 Handler

Android 的消息机制是基于Handler实现的。Handler 采用的是一种生产者-消费者模型&#xff0c;Handler 就是生产者&#xff0c;通过它可以生产需要执行的任务。而 Looper 则是消费者&#xff0c;不断从 MessageQueue 中取出Message 对这些消息进行消费。 MesageQueue是在底层调…

maven-mvnd(新版maven)

引言&#xff1a; Maven和Gradle几乎包含了所有Java项目的构建。 而目前绝大部分的Java项目都是使用Maven的方式&#xff0c;Maven对比Gradle的劣势很明显&#xff0c;就是太慢了&#xff01; 一、maven-mvnd是什么&#xff1f; maven-mvnd是Apache Maven团队开发的maven的…

python学习笔记-1

文章目录 cmd中写py基本语法字面量字符串 注释变量数据类型数据类型转换标识符 cmd中写py 如果我没有素质&#xff0c;就说我是日本人 基本语法 字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的&#xff0c;固定的值&#xff0c;称之为字面量。有六种值&#xff0…

下载iOS开发教程:下载和安装指南

目录 引言 一. 下载安装appuploader windows启动 部分功能不可用处理 驱动安装 二. 登录appuploader 常规使用登录方法 验证码说明 使用上传专用密码登录 未支付688给apple账号登录 [ 五、代码实现](# 五、代码实现) 六、总结 引言 这里汇总了开发相关过程中的热门…

【vue element-ui 】el-table中使用checkbox视图更新滞后

本来想通过列表中每个对象的某个属性绑定到checkbox的状态&#xff0c;但是发现有个问题&#xff1a;就是点击复选框后&#xff0c;数据确实改变了&#xff0c;但是视图没有改变&#xff0c;当点击其他row的时候&#xff0c;才会更新之前的数图。如下图&#xff0c;第1次勾选第…

【JavaScript】严格模式use strict

use strict 它不是一条语句&#xff0c;但是是一个字面量表达式声明&#xff0c;在 JavaScript 旧版本中会被忽略。 为什么使用严格模式use strict: 消除Javascript语法的一些不合理、不严谨之处&#xff0c;减少一些怪异行为; 消除代码运行的一些不安全之处&#xff0c;保证代…

Jmeter调试取样器(Debug Sampler)

大家在调试 JMeter 脚本时有没有如下几种需求&#xff1a; 我想知道参数化的变量取值是否正确&#xff01;我想知道正则表达式提取器&#xff08;或json提取器&#xff09;提取的值是否正确&#xff01;我想知道 JMeter 属性&#xff01;调试时服务器返回些什么内容&#xff0…

复杂数组的处理方法之多维数组扁平化

1.需求: 将数组[1&#xff0c;2&#xff0c;[3&#xff0c;4&#xff0c;[5&#xff0c;6]]&#xff0c;7&#xff0c;[8&#xff0c;[9&#xff0c;10]]] 转换为 [1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c…

五、HAL_Timer的定时功能

1、开发环境 (1)Keil MDK: V5.38.0.0 (2)STM32CubeMX: V6.8.1 (3)MCU: STM32F407ZGT6 2、定时器简介 (1)定时器可以通过输入的时钟源进行计数&#xff0c;从而达到定时的功能。 3、实验目的&原理图 3.1、实验目的 (1)通过定时器设置定时&#xff0c;实现LED灯以500…

13 - 信号可靠性剖析

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录 1. 信号的可靠性1.1 问题1.2 信号查看&#xff08;kill -l&#xff09;1.3 信号的分类1.3.1 不可靠信号&#xff08;传统信号&#xff09;…

模拟仿真 OSC振荡器

用五个反相器做一个环形振荡器 跑瞬态仿真 发现并未振荡 手动添加起振 成功振荡 将上面的图像send to calculate&#xff0c;调用频率函数freq 可以看到振荡频率为2.5GHZ左右 如果想要降低振荡频率&#xff0c;可以在每个反相器后加寄生电容或者增大反相器尺寸&#xff0c;这…

ProGuard详解 - Java代码混淆

(29条消息) ProGuard详解 - Java代码混淆_黎陌MLing的博客-CSDN博客

【算法题】动态规划基础阶段之 爬楼梯 和 杨辉三角

动态规划基础阶段之爬楼梯和杨辉三角 前言二、爬楼梯2.1、思路2.2、代码实现 三、杨辉三角3.1、思路3.2、代码实现 四、杨辉三角2&#xff08;进阶&#xff09;总结 前言 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种解决多阶段决策过程最优…