1 điểm bởi GN⁺ 2024-07-22 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Bạn biết bao nhiêu về box shadow?

Box shadow là gì?
  • Box shadow là một dạng drop shadow, tức một dạng bộ lọc hình ảnh
  • Drop shadow là bộ lọc tạo hiệu ứng bóng đổ bằng cách dịch chuyển các pixel của ảnh theo trục x và y
  • Trong CSS, có thể áp dụng drop shadow bằng thuộc tính filter
div { 
  filter: drop-shadow(xOffset yOffset rgba(0, 0, 0, 0.5));
}
  • CSS còn hỗ trợ thêm giá trị blur để áp dụng cho drop shadow
div { 
  filter: drop-shadow(xOffset yOffset blurSize rgba(0, 0, 0, 0.5));
}
Box shadow
  • Box shadow là một dạng drop filter chỉ hỗ trợ hình hộp
  • Box shadow có lợi thế về mặt hiệu năng
  • Cách triển khai box shadow trong CSS dùng các thủ thuật toán học để vẽ hộp bo tròn với chi phí thấp
  • Có thể xếp chồng nhiều box shadow để tạo ra nhiều thiết kế đa dạng
function randomizeAndColor(e) { 
  randomize(e); 
  const spread = Math.random() > 0.8 ? 2 : 0; 
  const x1 = Math.floor(3 - Math.random() * 6) / (1 + spread); 
  const y1 = Math.floor(3 - Math.random() * 6) / (1 + spread); 
  const y2 = 2 + Math.floor(Math.random() * 4); 
  const blur2 = 8 + Math.floor(Math.random() * 12); 
  e.style.boxShadow = `${x1}px ${y1}px 0px ${spread}px ${getRandomPastelColor()}, 0 ${y2}px ${blur2}px #0006`;
}
Cách dùng box shadow sai
  • Thông thường, nhà thiết kế bố trí các hình chữ nhật bằng cách dùng margin, padding và typography nhất quán
  • Có thể dùng box shadow để tạo ra các hiệu ứng nghệ thuật với nhiều hình dạng khác nhau
  • Có thể dùng box shadow để tạo hiệu ứng hoạt ảnh
const tick = (timestamp: number) => { 
  gameState.frame++; 
  gameState.deltaTime = Math.min((timestamp - gameState.prevFrameStartTime) / 1000, 0.1); 
  gameState.prevFrameStartTime = timestamp; 
  update(gameState); 
  render(gameState); 
  winContext._gameFrame = window.requestAnimationFrame(tick);
};
Cách dùng box shadow sai một cách nghiêm trọng
  • Có thể dùng box shadow để tạo hiệu ứng 3D
  • Có thể tạo hoạt ảnh quả bóng nảy
  • Có thể dùng box shadow để vẽ một đám mây điểm
const pixels = await getImagePixels("/images/starry_night_full.jpg", width);
const dx = window.innerWidth / pixels[0].length;
const dy = window.innerHeight / pixels.length;
for (let y = 0; y < pixels.length; y++) { 
  for (let x = 0; x < pixels[0].length; x++) { 
    const px = x * dx + dx / 2, py = y * dy + dy / 2, pz = 60 + Math.random() * 3; 
    state.particles.push({ size: pSize, x: px, y: py, z: pz, ox: px, oy: py, oz: pz, dx: Math.random() * 3, dy: Math.random() * 3, dz: Math.random() * 3, color: pixels[y][x] });
  }
}
Ray tracing bằng box shadow
  • Ray tracing là một phương pháp tạo ảnh chính xác nhưng chậm
  • Có thể triển khai ray tracing bằng box shadow
  • Có thể dùng web worker để triển khai đa luồng
const gameState = { 
  frame: 0, 
  prevFrameStartTime: 0, 
  deltaTime: 0, 
  renderContainerSize: 32, 
  cam: new PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 100), 
  spheres: [ 
    { position: new Vector3(0, 1.3, 0), radius: 1.3, material: CreateMat({ color: new Color(1, 0.2, 0.3) }) }, 
    { position: new Vector3(-3, 1.3, 0), radius: 1.3, material: CreateMat({ color: new Color(0.9, 0.9, 0.9), smoothness: 0.9 }) }, 
    { position: new Vector3(0, 10.8, 0), radius: 3.6, material: CreateMat({ color: new Color(0, 0, 0), emissive: new Color(1, 1, 1), emissiveStrength: 8 }) }
  ]
};

# Tóm tắt của GN⁺

  • Box shadow là một dạng drop shadow, hữu ích để tăng cảm giác chiều sâu cho hình ảnh
  • Có thể dùng CSS để triển khai nhiều hiệu ứng box shadow khác nhau, từ đó tạo ra các thiết kế sáng tạo
  • Có thể dùng box shadow để tạo hiệu ứng 3D và hoạt ảnh
  • Việc triển khai ray tracing bằng box shadow là không hiệu quả nhưng vẫn khả thi
  • Bài viết này khám phá những cách dùng box shadow sáng tạo và phi chuẩn, qua đó gợi mở các khả năng thiết kế mới

Chưa có bình luận nào.

Chưa có bình luận nào.