拓宽你的 前端知识:掌握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;
}

本文同步我的技术文档

相关文章
|
6天前
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
4天前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
7天前
|
存储 前端开发 JavaScript
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
22 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
|
7天前
|
Web App开发 JavaScript 前端开发
前端基础(一)_初识JavaScript
本文介绍了JavaScript的起源、核心组成(ECMAScript、DOM、BOM),并解释了JavaScript的三种引入方式:行内引入、内部引入和外部引入,以及`window.onload`的使用,最后讨论了网页、网站、浏览器和兼容性的概念。
13 2
前端基础(一)_初识JavaScript
|
7天前
|
前端开发
前端基础(九)_CSS的三大特征
本文详细解释了CSS的三大特性:层叠性、继承性和优先级,并通过实例演示了样式冲突、叠加和选择器优先级的应用。
12 2
前端基础(九)_CSS的三大特征
|
7天前
|
前端开发 JavaScript
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
本文介绍了JavaScript中的循环语句,包括for循环、for-in循环、for-of循环、while循环、do-while循环以及break和continue的使用。
26 1
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
|
7天前
|
存储 前端开发 JavaScript
前端基础(三)_JavaScript数据类型(基本数据类型、复杂数据类型)
本文详细介绍了JavaScript中的数据类型,包括基本数据类型(Number、String、Boolean、Undefined、Null)和复杂数据类型(Object),并解释了如何使用`typeof`操作符来识别变量的数据类型。同时,还讨论了对象、函数和数组等复杂数据类型的使用方式。
13 2
|
6天前
|
JavaScript 前端开发 开发者
深入浅出 Vue.js:构建响应式前端应用
Vue.js 是一个流行的前端框架,以其简洁、高效和易学著称。它采用响应式和组件化设计,简化了交互式用户界面的构建。本文详细介绍 Vue.js 的核心概念、基本用法及如何构建响应式前端应用,包括实例、模板、响应式数据和组件等关键要素,并介绍了项目结构、Vue CLI、路由管理和状态管理等内容,帮助开发者高效地开发现代化前端应用。
|
6天前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
7天前
|
前端开发 JavaScript
前端JS控制网页复制粘贴
前端JS控制网页复制粘贴
下一篇
无影云桌面