Chào mừng bạn đến với bài viết chuyên sâu về thẻ hình ảnh (<img>) trong HTML5 và các phương pháp tối ưu hóa hiệu quả. Hình ảnh đóng vai trò quan trọng trong việc thu hút người dùng và truyền tải thông tin trên website. Việc sử dụng thẻ <img> đúng cách và tối ưu hóa hình ảnh không chỉ cải thiện trải nghiệm người dùng (user experience - UX) mà còn nâng cao hiệu suất website, đặc biệt là tốc độ tải trang và thứ hạng trên các công cụ tìm kiếm (search engine optimization - SEO).

Giới thiệu về thẻ <img> trong HTML5

Thẻ <img> là một phần tử HTML (HTML element) được sử dụng để nhúng hình ảnh vào trang web. Đây là một thẻ đơn (self-closing tag), có nghĩa là nó không yêu cầu thẻ đóng (</img>). Thuộc tính quan trọng nhất của thẻ <img>src (source), chỉ định đường dẫn (URL) đến hình ảnh cần hiển thị. Ngoài ra, còn có các thuộc tính khác như alt (alternative text), width, height, srcset, và sizes, mỗi thuộc tính đóng một vai trò riêng trong việc hiển thị và tối ưu hóa hình ảnh.

Việc sử dụng thẻ <img> không chỉ đơn thuần là hiển thị hình ảnh. Nó còn liên quan đến việc đảm bảo khả năng truy cập (accessibility) cho người dùng, cải thiện hiệu suất website và tuân thủ các tiêu chuẩn SEO. Một hình ảnh được tối ưu hóa tốt sẽ giúp trang web tải nhanh hơn, giảm băng thông sử dụng và cải thiện trải nghiệm tổng thể cho người dùng.

Cấu trúc cơ bản của thẻ <img>

Cú pháp cơ bản của thẻ <img> như sau:

<img src="đường_dẫn_hình_ảnh" alt="Mô tả hình ảnh">

Trong đó:

  • src: Thuộc tính bắt buộc, chỉ định đường dẫn đến hình ảnh. Đường dẫn có thể là tuyệt đối (absolute URL) hoặc tương đối (relative URL).
  • alt: Thuộc tính quan trọng, cung cấp mô tả văn bản cho hình ảnh. Văn bản này sẽ hiển thị nếu hình ảnh không tải được hoặc khi người dùng sử dụng trình đọc màn hình (screen reader). alt là yếu tố quan trọng cho SEO và khả năng truy cập.

Các thuộc tính quan trọng của thẻ <img>

Ngoài srcalt, thẻ <img> còn hỗ trợ nhiều thuộc tính khác, cho phép bạn kiểm soát cách hình ảnh hiển thị và tương tác với trang web.

Thuộc tính src (Source)

Thuộc tính src là bắt buộc và chỉ định đường dẫn đến hình ảnh. Đường dẫn có thể là:

  • Đường dẫn tuyệt đối (Absolute URL): Chứa đầy đủ thông tin về địa chỉ của hình ảnh, bao gồm giao thức (ví dụ: http:// hoặc https://), tên miền và đường dẫn đầy đủ đến hình ảnh. Ví dụ: <img src="https://www.example.com/images/logo.png" alt="Logo công ty">
  • Đường dẫn tương đối (Relative URL): Chỉ định đường dẫn đến hình ảnh dựa trên vị trí của tệp HTML hiện tại. Ví dụ: nếu tệp HTML và hình ảnh nằm trong cùng một thư mục, bạn có thể sử dụng <img src="logo.png" alt="Logo công ty">. Nếu hình ảnh nằm trong một thư mục con, bạn có thể sử dụng <img src="images/logo.png" alt="Logo công ty">.

Khi sử dụng đường dẫn tương đối, hãy đảm bảo rằng bạn hiểu rõ cấu trúc thư mục của website để tránh lỗi hiển thị hình ảnh.

Thuộc tính alt (Alternative Text)

Thuộc tính alt cung cấp mô tả văn bản thay thế cho hình ảnh. Đây là một thuộc tính cực kỳ quan trọng vì nhiều lý do:

  • Khả năng truy cập (Accessibility): Trình đọc màn hình sử dụng văn bản alt để mô tả hình ảnh cho người dùng khiếm thị.
  • SEO: Công cụ tìm kiếm sử dụng văn bản alt để hiểu nội dung của hình ảnh và lập chỉ mục (index) hình ảnh đó.
  • Hiển thị thay thế: Nếu hình ảnh không tải được vì bất kỳ lý do gì (ví dụ: lỗi đường dẫn, kết nối mạng chậm), văn bản alt sẽ hiển thị thay thế.

Khi viết văn bản alt, hãy:

  • Mô tả chính xác: Văn bản alt nên mô tả chính xác nội dung và mục đích của hình ảnh.
  • Ngắn gọn và súc tích: Tránh viết văn bản alt quá dài dòng.
  • Chứa từ khóa liên quan: Nếu có thể, hãy sử dụng các từ khóa liên quan đến nội dung của trang web trong văn bản alt, nhưng hãy đảm bảo rằng chúng phù hợp với mô tả hình ảnh.
  • Để trống nếu hình ảnh mang tính trang trí: Nếu hình ảnh chỉ mang tính trang trí và không có ý nghĩa nội dung, bạn có thể để trống thuộc tính alt (alt=""). Điều này báo cho trình đọc màn hình biết rằng hình ảnh này không quan trọng và nên bỏ qua.

Thuộc tính width và height

Thuộc tính widthheight chỉ định chiều rộng và chiều cao của hình ảnh, tính bằng pixel. Việc chỉ định widthheight có một số lợi ích:

  • Cải thiện hiệu suất: Khi trình duyệt biết trước kích thước của hình ảnh, nó có thể dành không gian (reserve space) cho hình ảnh đó trước khi hình ảnh thực sự được tải xuống. Điều này giúp tránh hiện tượng "layout shift" (sự thay đổi bố cục) khi hình ảnh tải xong, cải thiện trải nghiệm người dùng.
  • Kiểm soát kích thước hiển thị: Bạn có thể sử dụng widthheight để thay đổi kích thước hiển thị của hình ảnh, nhưng hãy cẩn thận vì việc này có thể làm giảm chất lượng hình ảnh nếu bạn tăng kích thước quá lớn so với kích thước gốc.

Lưu ý quan trọng: Nên sử dụng CSS (Cascading Style Sheets) để điều chỉnh kích thước hình ảnh thay vì sử dụng trực tiếp thuộc tính widthheight trong thẻ <img>. CSS cho phép bạn kiểm soát kích thước hình ảnh một cách linh hoạt hơn và dễ dàng áp dụng các quy tắc kích thước khác nhau cho các thiết bị khác nhau (responsive design).

Ví dụ:

<img src="logo.png" alt="Logo công ty" width="200" height="100">

Trong ví dụ này, hình ảnh sẽ được hiển thị với chiều rộng 200 pixel và chiều cao 100 pixel.

Thuộc tính srcset và sizes (Responsive Images)

Thuộc tính srcsetsizes cho phép bạn cung cấp nhiều phiên bản của cùng một hình ảnh với các kích thước khác nhau. Trình duyệt sẽ tự động chọn phiên bản phù hợp nhất dựa trên kích thước màn hình và độ phân giải của thiết bị. Điều này giúp cải thiện hiệu suất website trên các thiết bị di động và các thiết bị có độ phân giải cao (Retina displays).

srcset: Liệt kê các đường dẫn đến các phiên bản hình ảnh khác nhau, cùng với kích thước tương ứng của chúng.

sizes: Chỉ định kích thước hiển thị của hình ảnh ở các điểm ngắt (breakpoints) khác nhau. Breakpoint là các giá trị chiều rộng màn hình mà tại đó bố cục của trang web thay đổi.

Ví dụ:

<img src="image-400.jpg"
       srcset="image-400.jpg 400w,
               image-800.jpg 800w,
               image-1200.jpg 1200w"
       sizes="(max-width: 600px) 100vw,
              (max-width: 900px) 50vw,
              33vw"
       alt="Hình ảnh đáp ứng">

Trong ví dụ này:

  • srcset chỉ định ba phiên bản của hình ảnh: image-400.jpg (400 pixel), image-800.jpg (800 pixel) và image-1200.jpg (1200 pixel).
  • sizes chỉ định rằng:
    • Trên màn hình có chiều rộng tối đa 600 pixel, hình ảnh sẽ chiếm toàn bộ chiều rộng của màn hình (100vw).
    • Trên màn hình có chiều rộng tối đa 900 pixel, hình ảnh sẽ chiếm một nửa chiều rộng của màn hình (50vw).
    • Trên màn hình có chiều rộng lớn hơn 900 pixel, hình ảnh sẽ chiếm một phần ba chiều rộng của màn hình (33vw).

Trình duyệt sẽ chọn phiên bản hình ảnh phù hợp nhất dựa trên kích thước màn hình và các quy tắc được chỉ định trong thuộc tính sizes.

Thuộc tính loading="lazy" (Lazy Loading)

Thuộc tính loading="lazy" cho phép bạn trì hoãn việc tải hình ảnh cho đến khi chúng gần hiển thị trên màn hình. Đây là một kỹ thuật quan trọng để cải thiện hiệu suất website, đặc biệt là trên các trang web có nhiều hình ảnh.

Khi bạn sử dụng loading="lazy", trình duyệt sẽ chỉ tải các hình ảnh nằm trong khung nhìn (viewport) hoặc sắp sửa hiển thị. Các hình ảnh khác sẽ chỉ được tải khi người dùng cuộn trang xuống gần chúng.

Ví dụ:

<img src="image.jpg" alt="Mô tả hình ảnh" loading="lazy">

Kỹ thuật lazy loading giúp giảm thời gian tải trang ban đầu và tiết kiệm băng thông, đặc biệt là trên các thiết bị di động.

Các định dạng hình ảnh phổ biến và cách lựa chọn

Có nhiều định dạng hình ảnh khác nhau, mỗi định dạng có ưu và nhược điểm riêng. Việc lựa chọn định dạng hình ảnh phù hợp là rất quan trọng để đảm bảo chất lượng hình ảnh tốt nhất với kích thước tệp nhỏ nhất.

JPEG (hoặc JPG)

JPEG (Joint Photographic Experts Group) là định dạng hình ảnh phổ biến nhất trên web. Đây là định dạng nén mất dữ liệu (lossy compression), nghĩa là một số dữ liệu hình ảnh sẽ bị loại bỏ trong quá trình nén để giảm kích thước tệp. JPEG phù hợp cho ảnh chụp và hình ảnh có nhiều màu sắc và độ chuyển màu.

Ưu điểm:

  • Kích thước tệp nhỏ, giúp tải trang nhanh hơn.
  • Được hỗ trợ rộng rãi bởi tất cả các trình duyệt và thiết bị.

Nhược điểm:

  • Nén mất dữ liệu có thể làm giảm chất lượng hình ảnh, đặc biệt là khi nén quá mức.
  • Không phù hợp cho hình ảnh có văn bản hoặc đồ họa sắc nét, vì có thể xuất hiện hiện tượng răng cưa (aliasing).

PNG (Portable Network Graphics)

PNG là định dạng hình ảnh nén không mất dữ liệu (lossless compression), nghĩa là không có dữ liệu hình ảnh nào bị loại bỏ trong quá trình nén. PNG phù hợp cho hình ảnh có văn bản, đồ họa sắc nét, logo và hình ảnh có nền trong suốt.

Ưu điểm:

  • Giữ nguyên chất lượng hình ảnh, không bị giảm chất lượng khi nén.
  • Hỗ trợ nền trong suốt.
  • Phù hợp cho hình ảnh có văn bản và đồ họa sắc nét.

Nhược điểm:

  • Kích thước tệp thường lớn hơn JPEG.

GIF (Graphics Interchange Format)

GIF là định dạng hình ảnh nén không mất dữ liệu, nhưng chỉ hỗ trợ tối đa 256 màu. GIF phù hợp cho hình ảnh động đơn giản, biểu tượng (icons) và hình ảnh có ít màu sắc.

Ưu điểm:

  • Hỗ trợ hình ảnh động.
  • Kích thước tệp nhỏ cho hình ảnh có ít màu sắc.

Nhược điểm:

  • Chỉ hỗ trợ tối đa 256 màu, không phù hợp cho ảnh chụp hoặc hình ảnh có nhiều màu sắc.

WebP

WebP là định dạng hình ảnh hiện đại do Google phát triển, cung cấp cả nén mất dữ liệu và nén không mất dữ liệu. WebP thường có kích thước tệp nhỏ hơn đáng kể so với JPEG và PNG, đồng thời vẫn duy trì chất lượng hình ảnh tốt.

Ưu điểm:

  • Kích thước tệp nhỏ hơn JPEG và PNG.
  • Hỗ trợ cả nén mất dữ liệu và nén không mất dữ liệu.
  • Hỗ trợ nền trong suốt và hình ảnh động.

Nhược điểm:

  • Không được hỗ trợ bởi tất cả các trình duyệt (mặc dù mức độ hỗ trợ ngày càng tăng).

Để sử dụng WebP một cách an toàn, bạn có thể sử dụng thẻ <picture> để cung cấp hình ảnh WebP và một hình ảnh dự phòng (fallback) ở định dạng JPEG hoặc PNG cho các trình duyệt không hỗ trợ WebP.

AVIF

AVIF (AV1 Image File Format) là một định dạng hình ảnh mới hơn, hứa hẹn hiệu quả nén tốt hơn cả WebP. Tuy nhiên, sự hỗ trợ của trình duyệt cho AVIF vẫn còn hạn chế hơn so với WebP.

Lời khuyên khi lựa chọn định dạng hình ảnh

  • Ảnh chụp và hình ảnh có nhiều màu sắc: JPEG hoặc WebP (nén mất dữ liệu).
  • Hình ảnh có văn bản, đồ họa sắc nét, logo và hình ảnh có nền trong suốt: PNG hoặc WebP (nén không mất dữ liệu).
  • Hình ảnh động đơn giản: GIF hoặc WebP.
  • Luôn cân nhắc sử dụng WebP nếu có thể, và cung cấp hình ảnh dự phòng ở định dạng JPEG hoặc PNG.

Các phương pháp tối ưu hóa hình ảnh

Tối ưu hóa hình ảnh là quá trình giảm kích thước tệp hình ảnh mà không làm giảm đáng kể chất lượng hình ảnh. Việc tối ưu hóa hình ảnh là rất quan trọng để cải thiện hiệu suất website, giảm thời gian tải trang và tiết kiệm băng thông.

Nén hình ảnh

Nén hình ảnh là phương pháp phổ biến nhất để giảm kích thước tệp hình ảnh. Có hai loại nén hình ảnh chính:

  • Nén mất dữ liệu (Lossy compression): Loại bỏ một số dữ liệu hình ảnh để giảm kích thước tệp. JPEG và WebP (nén mất dữ liệu) là các định dạng nén mất dữ liệu.
  • Nén không mất dữ liệu (Lossless compression): Không loại bỏ bất kỳ dữ liệu hình ảnh nào, nhưng sử dụng các thuật toán để giảm kích thước tệp. PNG và WebP (nén không mất dữ liệu) là các định dạng nén không mất dữ liệu.

Bạn có thể sử dụng nhiều công cụ khác nhau để nén hình ảnh, cả trực tuyến và ngoại tuyến. Một số công cụ phổ biến bao gồm:

  • TinyPNG/TinyJPG: Công cụ trực tuyến miễn phí để nén hình ảnh PNG và JPEG.
  • ImageOptim (macOS): Công cụ ngoại tuyến miễn phí để tối ưu hóa hình ảnh.
  • OptiPNG: Công cụ dòng lệnh để tối ưu hóa hình ảnh PNG.
  • JPEGoptim: Công cụ dòng lệnh để tối ưu hóa hình ảnh JPEG.
  • Squoosh.app: Công cụ trực tuyến của Google, cho phép so sánh các định dạng nén khác nhau.

Thay đổi kích thước hình ảnh

Thay đổi kích thước hình ảnh về kích thước thực tế cần hiển thị trên trang web cũng là một cách quan trọng để tối ưu hóa hình ảnh. Không nên tải lên hình ảnh có kích thước lớn hơn nhiều so với kích thước hiển thị, vì điều này sẽ làm tăng kích thước tệp và thời gian tải trang.

Bạn có thể sử dụng các phần mềm chỉnh sửa ảnh như Adobe Photoshop, GIMP hoặc các công cụ trực tuyến để thay đổi kích thước hình ảnh.

Sử dụng hình ảnh vector (SVG)

SVG (Scalable Vector Graphics) là định dạng hình ảnh vector, sử dụng các đường và hình dạng để mô tả hình ảnh. SVG có ưu điểm là có thể масштабировать (scale) (tăng hoặc giảm kích thước) mà không làm giảm chất lượng hình ảnh. SVG phù hợp cho logo, biểu tượng và các hình ảnh đồ họa đơn giản.

Ưu điểm của SVG:

  • Có thể масштабировать mà không làm giảm chất lượng.
  • Kích thước tệp thường nhỏ hơn so với hình ảnh raster (JPEG, PNG, GIF).
  • Có thể chỉnh sửa bằng code.

Nhược điểm của SVG:

  • Không phù hợp cho ảnh chụp hoặc hình ảnh có nhiều chi tiết phức tạp.

Tối ưu hóa cho Retina Displays

Retina displays (màn hình Retina) là các màn hình có mật độ điểm ảnh cao, đòi hỏi hình ảnh có độ phân giải cao hơn để hiển thị sắc nét. Để tối ưu hóa hình ảnh cho Retina displays, bạn cần cung cấp các phiên bản hình ảnh có độ phân giải gấp đôi (2x) hoặc gấp ba (3x) so với kích thước hiển thị.

Bạn có thể sử dụng thuộc tính srcsetsizes để cung cấp các phiên bản hình ảnh khác nhau cho các thiết bị khác nhau.

Sử dụng CDN (Content Delivery Network)

CDN (mạng phân phối nội dung) là một mạng lưới các máy chủ được phân bố trên toàn thế giới, lưu trữ các bản sao của nội dung website của bạn. Khi người dùng truy cập website của bạn, nội dung sẽ được phân phối từ máy chủ CDN gần nhất với vị trí của họ. Điều này giúp giảm thời gian tải trang và cải thiện trải nghiệm người dùng.

Sử dụng CDN là một cách hiệu quả để tăng tốc độ tải hình ảnh và các nội dung tĩnh khác trên website của bạn.

Kết luận

Thẻ <img> là một phần tử HTML quan trọng để hiển thị hình ảnh trên website. Việc sử dụng thẻ <img> đúng cách và tối ưu hóa hình ảnh là rất quan trọng để cải thiện trải nghiệm người dùng, nâng cao hiệu suất website và tuân thủ các tiêu chuẩn SEO. Bằng cách hiểu rõ các thuộc tính của thẻ <img>, lựa chọn định dạng hình ảnh phù hợp và áp dụng các phương pháp tối ưu hóa hình ảnh, bạn có thể tạo ra những trang web nhanh hơn, hấp dẫn hơn và thân thiện hơn với người dùng.

Hãy nhớ rằng, tối ưu hóa hình ảnh là một quá trình liên tục. Bạn nên thường xuyên kiểm tra và tối ưu hóa hình ảnh trên website của mình để đảm bảo hiệu suất tốt nhất.

Để lại bình luận

Trường (*) là bắt buộc