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

本文同步我的技术文档

相关文章
|
15天前
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
86 24
|
17天前
|
人工智能 前端开发 JavaScript
前端基础之HTML
Web1.0、Web2.0 和 Web3.0 标志着互联网发展的三个阶段。Web1.0(静态互联网,1990年代初至2000年代初)以静态内容和单向信息流为主,用户仅能浏览。Web2.0(互动互联网,2000年代初至2010年代初)引入了用户生成内容和社交网络,内容动态且互动性强。Web3.0(语义互联网,2010年代至今)强调语义化、个性化、智能化及去中心化,结合AI、区块链等技术,提供沉浸式体验。HTTP和HTML作为互联网基础协议和技术,在各阶段不断演进,共同推动了现代互联网的发展。
前端基础之HTML
|
25天前
|
JavaScript 前端开发
页面滚动触发css3动画js插件
delighters.js是一款页面滚动触发css3动画js插件。该js插件可以在页面向下滚动时,为进入浏览器视口的元素制作各种炫酷的CSS3动画效果。
46 13
|
1月前
纸屑飘落生日蛋糕场景js+css3动画特效
纸屑飘落生日蛋糕CSS3动画特效是一款js+css3制作的全屏纸屑飘落,生日蛋糕点亮庆祝动画特效。
47 3
|
1月前
|
移动开发 缓存 前端开发
深入理解前端路由:原理、实现与应用
本书《深入理解前端路由:原理、实现与应用》全面解析了前端路由的核心概念、工作原理及其实现方法,结合实际案例探讨了其在现代Web应用中的广泛应用,适合前端开发者和相关技术人员阅读。
|
2月前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
51 6
|
2月前
|
存储 前端开发 JavaScript
前端中对象的深度应用与最佳实践
前端对象应用涉及在网页开发中使用JavaScript等技术创建和操作对象,以实现动态交互效果。通过定义属性和方法,对象可以封装数据和功能,提升代码的组织性和复用性,是现代Web开发的核心技术之一。
|
8月前
|
前端开发 JavaScript UED
【专栏:HTML与CSS移动端开发篇】移动端触摸事件与手势识别
【4月更文挑战第30天】本文探讨了移动端触摸事件和手势识别在网页开发中的重要性。介绍了基础触摸事件如`touchstart`, `touchmove`, `touchend`, `touchcancel`及相关属性。文章列举了处理触摸事件的方法,包括单点触摸、多点触摸、滑动、长按、捏合缩放、旋转检测和事件代理。建议使用第三方库如Hammer.js简化手势处理,并分享了最佳实践,如避免意外触摸、提供视觉反馈、考虑性能和跨设备测试。理解并有效利用这些技术能提升用户交互体验。
269 7
|
8月前
|
缓存 前端开发 JavaScript
【专栏:HTML与CSS移动端开发篇】移动端网页性能优化策略
【4月更文挑战第30天】本文探讨了移动端网页性能优化的重要性,并提出了优化策略。HTML方面,建议精简结构、使用语义化标签、异步加载脚本和压缩文件;CSS优化包括精简样式、使用CSS3动画、媒体查询和压缩文件。其他策略涉及图片和字体压缩、缓存利用、数据压缩、减少HTTP请求及根据网络状态调整加载。综合运用这些策略能提升网页性能和用户体验。
120 6
|
8月前
|
编解码 移动开发 前端开发
【专栏:HTML与CSS移动端开发篇】使用Viewport Meta标签优化移动端显示
【4月更文挑战第30天】本文介绍了HTML的Viewport Meta标签在移动端网页优化中的作用。Viewport Meta标签定义了视口属性,如宽度、高度、初始缩放等,解决移动设备因屏幕尺寸差异导致的显示问题。主要属性包括width(常用device-width)、initial-scale、maximum-scale、minimum-scale和user-scalable。
222 4