拓宽你的 前端知识:掌握JS、HTML、CSS那些少有人知的应用技巧

简介: 这篇文章的主题是拓宽你的 前端知识:掌握JS、HTML、CSS那些少有人知的应用技巧,帮你了解、熟悉一些鲜为人知的知识点,它或许在你的工作中不会那么有用,但是能够丰富你的阅历,在面试中脱颖而出。

Java Script

BigInt 数据类型:BigInt 是 ES2020 中新增的数据类型,用于表示任意精度的整数。它可以处理大于 Number.MAX_SAFE_INTEGER 的整数值。

const num = BigInt(9007199254740991);
console.log(num); // 9007199254740991n

Nullish 合并运算符:Nullish 合并运算符(??)用于检查变量是否为 nullundefined,如果是,则返回默认值。

const value = null;
const result = value ?? "Default Value";
console.log(result); // "Default Value"

可选链操作符:可选链操作符(?.)可以在访问对象的属性或调用方法时,避免出现 TypeError 错误,如果属性不存在或方法未定义,则返回 undefined

const obj = {
   
  prop: {
   
    value: "Hello World"
  }
};
const result = obj.prop?.value;
console.log(result); // "Hello World"

Promise.allSettled():Promise.allSettled() 方法返回一个 Promise,只有在所有给定的 Promise 都已经 fulfilled 或 rejected 后,它才会被 resolved,并返回包含每个 Promise 结果的数组。

const promise1 = new Promise((resolve, reject) => reject("Error"));
const promise2 = new Promise((resolve) => resolve("Success"));
Promise.allSettled([promise1, promise2])
  .then((results) => console.log(results));
// [{status: "rejected", reason: "Error"}, {status: "fulfilled", value: "Success"}]

Optional Chaining in Object Destructuring:在对象解构中使用可选链操作符。

const obj = {
   
  prop: {
   
    value: "Hello World"
  }
};
const {
    prop: {
    value } = {
   } } = obj;
console.log(value); // "Hello World"

Proxy 对象可以包装另一个对象并拦截对它的各种操作,例如属性访问、函数调用等。

const obj = {
   
  name: "Alice",
  age: 25
};

const proxyObj = new Proxy(obj, {
   
  get(target, prop) {
   
    console.log(`Getting ${
     prop}`);
    return target[prop];
  },
  set(target, prop, value) {
   
    console.log(`Setting ${prop} to ${value}`);
    target[prop] = value;
  }
});

console.log(proxyObj.name); // 输出:Getting name   Alice
proxyObj.age = 30; // 输出:Setting age to 30

Reflect(反射):
Reflect 是一个内置对象,提供了可用于操作 JavaScript 的低级别方法。

// 使用 Reflect 调用函数,可以实现更灵活的函数调用方式
function greet(name) {
   
  console.log(`Hello, ${
     name}!`);
}

Reflect.apply(greet, null, ["Alice"]); // 输出:Hello, Alice!

Generator(生成器):
Generator 函数是一种特殊的函数,可以通过迭代器协议来控制函数的执行过程。

function* generatorFunc() {
   
  yield "Hello";
  yield "World";
  yield "!";
}

const generator = generatorFunc();

console.log(generator.next().value); // 输出:Hello
console.log(generator.next().value); // 输出:World
console.log(generator.next().value); // 输出:!

Symbol(符号):
Symbol 是一种原始数据类型,表示唯一的标识符。它可以用作对象属性的键。

const sym = Symbol("mySymbol");
const obj = {
   
  [sym]: "Hello"
};

console.log(obj[sym]); // 输出:Hello

HTML

自定义数据属性(data attributes)
可以通过 data-* 属性为 HTML 元素添加自定义数据,以便在 JavaScript 中进行访问。

<div data-id="123" data-name="Alice"></div>
const div = document.querySelector("div");
console.log(div.dataset.id); // 输出:123
console.log(div.dataset.name); // 输出:Alice

contenteditable 属性
contenteditable 属性设置为 true 可以使元素可编辑,就像一个富文本编辑器一样。

<p contenteditable="true">可编辑的内容</p>

隐藏元素
使用 hidden 属性或 CSS 的 display: nonevisibility: hidden 将元素隐藏起来。

<p hidden>隐藏的文本</p>

富文本格式化
通过 <pre> 标签可以保留文本中的空格、换行符等格式。

<pre>
  多行文本
  格式被保留
</pre>

自动聚焦
使用 autofocus 属性在页面加载完成后自动将焦点设置到指定的表单元素上。

<input type="text" autofocus>

自定义右键菜单
通过 JavaScript 监听 contextmenu 事件,并取消默认菜单,可以创建自定义的右键菜单。

<div oncontextmenu="showCustomMenu(event)">
  右键点击我
</div>
function showCustomMenu(event) {
   
  event.preventDefault();
  // 自定义菜单的逻辑
}

自定义光标样式
可以使用 CSS 的 cursor 属性自定义鼠标悬停在元素上时的光标样式。

<style>
  .custom-cursor {
    
    cursor: url('custom-cursor.png'), auto;
  }
</style>

<div class="custom-cursor">
  鼠标悬停时会显示自定义光标
</div>

响应式图像
使用 srcset 属性可以根据设备的像素密度加载不同分辨率的图像。

<img src="low-res.jpg" 
     srcset="high-res.jpg 2x, extra-high-res.jpg 3x"
     alt="响应式图像">

自动播放音频/视频
使用 autoplay 属性可以使音频或视频在页面加载完成后自动播放。

<audio src="music.mp3" autoplay></audio>

<video src="video.mp4" autoplay></video>

禁止表单自动填充
通过设置 autocomplete 属性为 "off" 可以阻止浏览器自动填充表单字段。

<form autocomplete="off">
  <!-- 表单字段 -->
</form>

长按提示
使用 title 属性可以为元素添加长按提示文本,当用户长按该元素时会显示提示。

<button title="长按操作">长按我</button>

CSS

伪元素 ::first-letter
可以用 ::first-letter 选择器来选择文本块的首字母,并对其应用特定的样式。

p::first-letter {
   
  font-size: 2em;
  color: red;
}

选择器 :focus-within
使用 :focus-within 选择器可以选择包含有焦点元素的父级元素。

.container:focus-within {
   
  background-color: yellow;
}

变量(Variable)
使用 CSS 变量可以定义和重用值,使样式更易于维护和修改。

:root {
   
  --primary-color: blue;
}

h1 {
   
  color: var(--primary-color);
}

Flexbox 布局
Flexbox 是一种强大的布局模型,可以方便地在一维空间中对齐、分布和重新排序元素。

.container {
   
  display: flex;
  justify-content: center;
  align-items: center;
}

动画 @keyframes
使用 @keyframes 关键帧规则可以创建动画效果并控制其过渡和延迟。

@keyframes slide-in {
   
  from {
   
    transform: translateX(-100%);
  }
  to {
   
    transform: translateX(0);
  }
}

.box {
   
  animation: slide-in 1s ease-in-out;
}

滚动渐变(Scrolling Gradient)
使用渐变和背景图像属性结合,可以在滚动时创建渐变效果。

body {
   
  background: linear-gradient(to right, red, yellow) fixed;
  background-image: url('gradient-mask.png');
  background-size: cover;
  background-blend-mode: multiply;
}

通过使用 content 属性和属性值 "attr()" 结合,可以将元素的属性值自动复制到元素的内容中。

a::after {
   
  content: attr(href);
}

<input type="text" value="默认值" oninput="this.setAttribute('value', this.value)">

滤镜(Filter)
使用 CSS 滤镜属性可以对元素应用各种视觉效果,如模糊、饱和度、对比度等。

img {
   
  filter: blur(5px);
}

多列文本布局
通过使用 column-countcolumn-gap 属性,可以将文本分为多列进行布局。

.container {
   
  column-count: 3;
  column-gap: 20px;
}

粘性(Sticky)定位
使用 position: sticky; 可以创建一个在特定位置固定的元素,当用户滚动时会保持固定位置。

.nav {
   
  position: sticky;
  top: 0;
}

本文同步我的技术文档

相关文章
|
4天前
|
前端开发 测试技术 开发工具
探索前端框架React Hooks的优势与应用
本文将深入探讨前端框架React Hooks的优势与应用。通过分析React Hooks的特性以及实际应用案例,帮助读者更好地理解和运用这一现代化的前端开发工具。
|
18天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
4天前
|
缓存 安全 JavaScript
前端安全:Vue应用中防范XSS和CSRF攻击
【4月更文挑战第23天】本文探讨了在Vue应用中防范XSS和CSRF攻击的重要性。XSS攻击通过注入恶意脚本威胁用户数据,而CSRF则利用用户身份发起非授权请求。防范措施包括:对输入内容转义、使用CSP、选择安全的库;采用Anti-CSRF令牌、同源策略和POST请求对抗CSRF;并实施代码审查、更新依赖及教育团队成员。通过这些实践,可提升Vue应用的安全性,抵御潜在攻击。
|
1天前
|
JavaScript 前端开发 API
Node.js在前端的妙用:打造更出色的Web体验
Node.js在前端的妙用:打造更出色的Web体验
16 5
|
1天前
|
机器学习/深度学习 前端开发 JavaScript
探寻前端巨变:从HTML到现代框架的发展历程
探寻前端巨变:从HTML到现代框架的发展历程
11 2
|
1天前
|
前端开发 JavaScript Go
构建高性能Web应用:优化前端资源加载
在构建现代Web应用时,优化前端资源加载是至关重要的一步。本文将介绍一些提升Web应用性能的关键策略,包括减少HTTP请求、压缩和合并资源、使用CDN加速、以及异步加载技术等。通过实施这些优化策略,开发人员可以显著提升网站的加载速度和用户体验。
|
1天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
6 1
|
2天前
|
XML 前端开发 JavaScript
前端技术的演变与实战应用
前端技术的演变与实战应用
|
2天前
|
前端开发 JavaScript Java
前端与后端:构建现代Web应用的双翼
前端与后端:构建现代Web应用的双翼
|
10天前
|
JavaScript 前端开发
js怎么删除html元素
js怎么删除html元素
23 10