color: #FFFC00;

}

50% {

text-shadow: 0 0 .5vw #800E0B, 0 0 1.5vw #800E0B, 0 0 5vw #800E0B, 0 0 5vw #800E0B, 0 0 .2vw #800E0B, .5vw .5vw .1vw #40340A;

color: #806914;

}

}

@keyframes flux {

0%, 100% {

text-shadow: 0 0 1vw #10ff4c, 0 0 3vw #1041FF, 0 0 10vw #1041FF, 0 0 10vw #1041FF, 0 0 .4vw #8BFDFE, .5vw .5vw .1vw #147280;

color: #03C03C;

}

50% {

text-shadow: 0 0 .5vw #024218, 0 0 1.5vw #024713, 0 0 5vw #023812, 0 0 5vw #012707, 0 0 .2vw #022201, .5vw .5vw .1vw #011a06;

color: #179E05;

}

}

为了使文字看起来更有霓虹效果,以上示例使用了 neon 字体:s3-us-west-2.amazonaws.com/s.cdpn.io/7…[1]

不规则文本框

赛博朋克2077中可以看到很多文本展示框都是这种不规则图形的,是不是很酷呢,这部分内容将介绍如何实现 2077 风格的文本框。

上面 3 个文本框分别由3 个 p 标签构成,.inverse 类表示反色背景,.dotted 将实现点状背景。

经典的赛博朋克角色是边缘且性格疏远的独行者。他们生活在社会群体的边缘,一个弥漫反乌托邦氛围的未来:日常生活受到急剧改变的科技影响,普及的计算机化信息笼罩全球,以及侵入性的人体改造。

经典的赛博朋克角色是边缘且性格疏远的独行者。他们生活在社会群体的边缘,一个弥漫反乌托邦氛围的未来:日常生活受到急剧改变的科技影响,普及的计算机化信息笼罩全球,以及侵入性的人体改造。

经典的赛博朋克角色是边缘且性格疏远的独行者。他们生活在社会群体的边缘,一个弥漫反乌托邦氛围的未来:日常生活受到急剧改变的科技影响,普及的计算机化信息笼罩全球,以及侵入性的人体改造。

文本框不规则的形状主要由 clip-path: polygon 实现,通过以下几个坐标的裁切,就可以实现 2077 风格的多边形了。

clip-path: polygon(

0px 25px,

26px 0px,

calc(60% - 25px) 0px,

60% 25px,

100% 25px,

100% calc(100% - 10px),

calc(100% - 15px) calc(100% - 10px),

calc(80% - 10px) calc(100% - 10px),

calc(80% - 15px) 100%,

80px calc(100% - 0px),

65px calc(100% - 15px),

0% calc(100% - 15px)

);

完整代码:

:root {

–yellow-color: #f9f002;

–border-color: #8ae66e;

}

.cyberpunk {

padding: 5px;

position: relative;

font-size: 1.2rem;

color: var(–yellow-color);

border: 30px solid var(–yellow-color);

border-right: 5px solid var(–yellow-color);

border-left: 5px solid var(–yellow-color);

border-bottom: 24px solid var(–yellow-color);

background-color: #000;

clip-path: polygon(0px 25px, 26px 0px, calc(60% - 25px) 0px, 60% 25px, 100% 25px, 100% calc(100% - 10px), calc(100% - 15px) calc(100% - 10px), calc(80% - 10px) calc(100% - 10px), calc(80% - 15px) 100%, 80px calc(100% - 0px), 65px calc(100% - 15px), 0% calc(100% - 15px));

}

.cyberpunk.inverse {

border: none;

padding: 40px 15px 30px;

color: #000;

background-color: var(–yellow-color);

border-right: 2px solid var(–border-color);

}

.dotted, .dotted:before, .dotted:after {

background: var(–yellow-color);

background-image: radial-gradient(#00000021 1px, transparent 0);

background-size: 5px 5px;

background-position: -13px -3px;

}

/* 文本框右侧小编号样式 */

.cyberpunk:before {

content: “P-14”;

display: block;

position: absolute;

bottom: -12px;

right: 25px;

padding: 2px 2px 0px 2px;

font-size: 0.6rem;

line-height: 0.6rem;

color: #000;

background-color: var(–yellow-color);

border-left: 2px solid var(–border-color);

}

.cyberpunk.inverse:before {

content: “T-71”;

right: 90px;

bottom: 9px;

}

.cyberpunk.inverse:before, .cyberpunk:before {

background-color: #000;

color: var(–yellow-color);

}

炫酷的表单元素

2077 的表单也很有特色,输入框元素 input 和 textarea 同样可以使用 clip-path: polygon 实现不规则形状,单选框和多选框则可以利用伪元素:before:after 进行装饰。



完整实现如下:

input[type=“text”].cyberpunk, textarea.cyberpunk {

width: calc(100% - 30px);

border: 30px solid #000;

border-left: 5px solid #000;

border-right: 5px solid #000;

border-bottom: 15px solid #000;

clip-path: polygon(0px 25px, 26px 0px, calc(60% - 25px) 0px, 60% 25px, 100% 25px, 100% calc(100% - 10px), calc(100% - 15px) calc(100% - 10px), calc(80% - 10px) calc(100% - 10px), calc(80% - 15px) calc(100% - 0px), 10px calc(100% - 0px), 0% calc(100% - 10px));

padding: 12px;

}

input[type=“radio”].cyberpunk {

border-radius: 15%;

z-index: 100;

height: 14px;

width: 20px;

appearance: none;

outline: none;

background-color: #000;

cursor: pointer;

position: relative;

margin: 0px;

display: inline-block;

}

input[type=“radio”].cyberpunk:after {

content: “”;

display: block;

width: 8px;

height: 6px;

background-color: var(–yellow-color);

position: absolute;

top: 2px;

left: 2px;

transition: background 0.3s, left 0.3s;

}

input[type=“radio”].cyberpunk:checked:after {

background-color: var(–border-color);

left: 10px;

}

input[type=“checkbox”].cyberpunk {

border-radius: 15%;

z-index: 100;

height: 20px;

width: 20px;

appearance: none;

outline: none;

background-color: #000;

cursor: pointer;

position: relative;

margin: 0px;

margin-bottom: -3px;

display: inline-block;

}

input[type=“checkbox”].cyberpunk:before {

content: “”;

display: block;

width: 8px;

height: 8px;

border: 2px solid var(–yellow-color);

border-top: 2px solid transparent;

border-radius: 50%;

position: absolute;

top: 5px;

left: 4px;

}

input[type=“checkbox”].cyberpunk:after {

content: “”;

display: block;

width: 2px;

height: 7px;

background-color: var(–yellow-color);

position: absolute;

top: 3px;

left: 9px;

}

input[type=“checkbox”].cyberpunk:checked:before {

border-color: var(–border-color);

border-top-color: transparent;

}

input[type=“checkbox”].cyberpunk:checked:after {

background-color: var(–border-color);

}

标题和文本

赛博朋克风格网页在文本展示中,常常用到如下图所示的 输入光标闪烁 样式及屏幕 故障风格 的样式,我们可以统一为 h1 - h5 标题,hr 等元素增加下划线装饰和故障动画效果,下面来看看如何实现这样的文字效果的。

H1 title

H1 title glitched

h1.cyberpunk {

position: relative;

}

h1.cyberpunk:before {

content: “”;

display: block;

position: absolute;

bottom: 0px;

left: 2px;

width: 100%;

height: 10px;

background-color: #000;

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 100% 6px, 85px 6px, 80px 10px, 0px 10px);

}

h1.cyberpunk.glitched {

animation-name: glitched;

animation-duration: calc(.9s * 1.4);

animation-iteration-count: infinite;

animation-timing-function: linear;

}

@keyframes glitched {

0% { left: -4px; transform: skew(-20deg); }

11% { left: 2px; transform: skew(0deg); }

50% { transform: skew(0deg); }

51% { transform: skew(10deg); }

60% { transform: skew(0deg); }

100% { transform: skew(0deg); }

}

h1.cyberpunk.glitched:before {

animation-name: beforeglitched;

animation-duration: calc(.9s * 2);

animation-iteration-count: infinite;

animation-timing-function: linear;

}

@keyframes beforeglitched {

0% {

left: -4px;

transform: skew(-20deg);

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 100% 6px, 85px 6px, 80px 10px, 0px 10px);

}

11% {

left: 2px;

transform: skew(0deg);

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 100% 6px, 85px 6px, 80px 10px, 0px 10px);

}

50% {

transform: skew(0deg);

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 100% 6px, 85px 6px, 80px 10px, 0px 10px);

}

51% {

transform: skew(0deg);

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 40% 5px, calc(40% - 30px) 0px, calc(40% + 30px) 0px, calc(45% - 15px) 5px, 100% 5px, 100% 6px, calc(45% - 14px) 6px, calc(40% + 29px) 1px, calc(40% - 29px) 1px, calc(40% + 1px) 6px, 85px 6px, 80px 10px, 0px 10px);

}

60% {

transform: skew(0deg);

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 100% 6px, 85px 6px, 80px 10px, 0px 10px);

}

100% {

transform: skew(0deg);

clip-path: polygon(0px 0px, 85px 0px, 90px 5px, 100% 5px, 100% 6px, 85px 6px, 80px 10px, 0px 10px);

}

}

金属质感

在 赛博朋克2077 的网页里,为了突显科技感,很多页面元素都具有金属质感,如模态弹窗的背景、文本展示块的边框等。这部分内容看看如何实现简单的金属材质背景。

4个 button 元素,将被分别添加 金、银、铜、钛 的金属背景色效果。

gold 金

silver 银

bronze 铜

titanium 钛

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

数据结构与算法

这一块在笔试、面试的代码题中考核较多,其中常考的数据结构主要有:数组、链表、队列、栈、Set、Map、哈希表等,不同数据结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

[外链图片转存中…(img-B6rLkfKU-1711817495102)]

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐