Menu

Chèn ảnh trong HTML: thẻ img, alt và kích thước ảnh

Cách chèn ảnh trong HTML bằng thẻ <img>: src và alt, đặt kích thước ảnh bằng width và height, ảnh responsive, cắt ảnh bằng object-fit, chú thích với figure, lazy loading, và khoảng trống dưới ảnh.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Cách chèn ảnh trong HTML

Dùng phần tử <img>. src là tệp ảnh, alt mô tả ảnh, còn width và height cho biết kích thước theo pixel. <img> là phần tử rỗng (void element): nó không có thẻ đóng.

src ở đây là một SVG nhỏ được viết thẳng vào URL (data URI) để ví dụ chạy được khi không có mạng. Trên trang web thật, src là đường dẫn tới một tệp:

srcTải từ
photo.jpgphoto.jpg trong cùng thư mục với tệp HTML
images/photo.jpgThư mục images nằm cạnh tệp HTML
../photo.jpgThư mục cha, cao hơn một cấp
/images/photo.jpgThư mục images ở thư mục gốc của trang web
https://example.com/photo.jpgMột trang web khác (ảnh có thể bị chuyển đi hoặc biến mất)

Đường dẫn phân biệt chữ hoa chữ thường trên hầu hết máy chủ web: Photo.JPG và photo.jpg là hai tệp khác nhau.

Văn bản alt

Văn bản alt đứng thay cho ảnh. Trình đọc màn hình đọc to nó lên, và trình duyệt hiện nó khi ảnh không tải được. Cả hai ảnh ở đây đều trỏ tới những tệp không tồn tại:

Ảnh thứ nhất hiện văn bản alt của nó, "Coddy logo", ở chỗ lẽ ra là ảnh. Ảnh thứ hai có alt rỗng, nên không có chữ nào để hiện, và trình đọc màn hình bỏ qua nó. Cách viết alt:

  • Mô tả điều quan trọng trong ngữ cảnh. "Biểu đồ cột: doanh số tăng gấp đôi từ tháng 3 đến tháng 6" nói được nhiều hơn "biểu đồ".
  • Đừng bắt đầu bằng "Ảnh của". Trình đọc màn hình đã thông báo đây là một ảnh.
  • Dùng alt="" cho ảnh trang trí (đường phân cách, họa tiết nền) để trình đọc màn hình bỏ qua.
  • Đừng bao giờ bỏ alt. Khi thiếu nó, một số trình đọc màn hình sẽ đọc tên tệp, kiểu như "IMG gạch dưới 4032 chấm jpg".
  • Với ảnh nằm trong liên kết, hãy mô tả nơi liên kết dẫn tới: <a href="/"><img src="logo.svg" alt="Home"></a>.

Đặt kích thước ảnh

Thuộc tính width và height tính bằng pixel, không ghi đơn vị. Kích thước trong CSS sẽ ghi đè chúng. Cặp CSS hữu ích nhất cho ảnh là cặp dưới đây, cho phép ảnh co lại theo khối chứa nhưng không bao giờ giãn quá chiều rộng gốc:

Ảnh thứ nhất giữ nguyên 300 pixel và tràn ra khỏi khung 180 pixel. Ảnh thứ hai thu nhỏ xuống 180 x 120, giữ tỷ lệ 3:2. height: auto rất quan trọng: thiếu nó, thuộc tính height="200" sẽ giữ ảnh cao 200 pixel và làm ảnh bị bóp méo.

Luôn ghi width và height trong HTML, kể cả với ảnh responsive. Trình duyệt dùng chúng để giữ sẵn đúng khoảng trống trước khi tệp tải xong, nhờ vậy phần chữ bên dưới không bị nhảy xuống khi ảnh hiện ra.

Cắt ảnh bằng object-fit

Khi ảnh phải lấp đầy một khung có hình dạng khác (avatar vuông từ một ảnh rộng, các thẻ card cao bằng nhau), object-fit quyết định phần thừa sẽ ra sao:

Ảnh gốc là một hình tròn tỷ lệ 2:1, hiển thị trong các khung vuông:

  • fill (mặc định) kéo giãn ảnh cho vừa khung, nên hình tròn thành hình bầu dục.
  • contain đặt vừa cả ảnh vào trong, để lại các dải trống.
  • cover lấp đầy khung và cắt phần tràn ra, giữ hình tròn vẫn tròn. Đây là lựa chọn thường dùng cho ảnh thu nhỏ và avatar.

object-position chọn phần nào được giữ lại khi cắt, ví dụ object-position: top cho ảnh chân dung.

Chú thích với figure và figcaption

Chú thích đi kèm một ảnh nằm trong <figcaption>, và cả hai nằm trong <figure>. Cách này gắn chúng lại với nhau cho trình đọc màn hình, và figure có thể được định dạng như một khối:

Chú thích không thay thế alt. alt nói ảnh thể hiện gì; chú thích bổ sung những gì người nhìn thấy ảnh cũng cần biết.

Khoảng trống dưới ảnh

Ảnh nằm trên đường cơ sở của chữ, giống như một chữ cái, nên khối chứa chừa chỗ bên dưới nó cho phần đuôi của các chữ như g và y. Một đường viền giúp thấy rõ khoảng trống đó:

Khung viền thứ nhất có một dải trắng bên dưới ảnh màu xanh. display: block trên ảnh (khung thứ hai) bỏ được nó; vertical-align: middle cũng vậy nếu ảnh phải giữ là inline.

Lazy loading và nguồn ảnh responsive

Với những ảnh nằm xa phía dưới một trang dài, loading="lazy" hoãn việc tải cho đến khi người đọc cuộn tới gần:

<img src="gallery-7.jpg" alt="Harbor at dusk" width="800" height="533" loading="lazy">

Đừng lazy load ảnh chính ở đầu trang; nó làm chậm phần trang mà người đọc thấy đầu tiên.

Để gửi tệp nhỏ hơn cho màn hình nhỏ, liệt kê nhiều kích thước trong srcset và cho trình duyệt biết ảnh sẽ hiển thị rộng bao nhiêu bằng sizes. Trình duyệt sẽ tự chọn tệp:

<img
  src="photo-800.jpg"
  srcset="photo-400.jpg 400w, photo-800.jpg 800w, photo-1600.jpg 1600w"
  sizes="(max-width: 600px) 100vw, 600px"
  alt="Harbor at dusk" width="800" height="533">

<picture> đi xa hơn và đưa ra các định dạng khác nhau, với <img> làm phương án dự phòng, đồng thời mang thuộc tính alt:

<picture>
  <source srcset="photo.avif" type="image/avif">
  <source srcset="photo.webp" type="image/webp">
  <img src="photo.jpg" alt="Harbor at dusk" width="800" height="533">
</picture>

Định dạng ảnh

Định dạngPhù hợp cho
JPEGẢnh chụp
PNGẢnh chụp màn hình, ảnh cần cạnh sắc nét hoặc nền trong suốt
WebPẢnh chụp và đồ họa, nhỏ hơn JPEG và PNG, có hỗ trợ trong suốt
AVIFẢnh chụp, thường nhỏ hơn WebP
SVGLogo, biểu tượng và sơ đồ; co giãn mọi kích thước mà không bị mờ
GIFẢnh động ngắn, dù một <video> tắt tiếng, phát lặp thì nhỏ hơn nhiều

Lỗi thường gặp

  • Đường dẫn trên máy của bạn, như src="C:\Users\me\photo.jpg". Nó chỉ chạy trên máy của bạn. Đặt tệp cạnh tệp HTML và dùng đường dẫn tương đối.
  • Thiếu alt. Mọi <img> đều cần alt, để rỗng nếu chỉ để trang trí.
  • Đặt cả width và height trong CSS theo một tỷ lệ khác với ảnh. Ảnh sẽ bị kéo giãn. Đặt một chiều và để chiều kia là auto, hoặc dùng object-fit.
  • Không có thuộc tính width và height, nên trang bị nhảy khi ảnh tải.
  • Tệp rất lớn được thu nhỏ bằng CSS. Một ảnh 4000 pixel hiển thị ở 400 pixel vẫn bị tải đầy đủ. Hãy đổi kích thước tệp, hoặc dùng srcset.
  • Thẻ đóng </img>. <img> là phần tử rỗng; không có gì để đóng.

Ảnh trong các ví dụ trên là những SVG nhỏ viết thẳng vào trang. Để thử cùng đoạn code với ảnh của riêng bạn, hãy dán nó vào HTML playground.

Câu hỏi thường gặp

Làm sao chèn ảnh trong HTML?

Dùng thẻ <img> với tệp ảnh trong src và phần mô tả trong alt: <img src="photo.jpg" alt="A red bicycle" width="600" height="400">. <img> không có thẻ đóng.

Làm sao đổi kích thước ảnh trong HTML?

Đặt thuộc tính width và height theo pixel, hoặc dùng CSS như img { width: 300px; height: auto; }. Chỉ đặt một chiều và để chiều kia là auto sẽ giữ nguyên tỷ lệ ảnh.

Vì sao ảnh không hiển thị trong HTML?

Thường là do đường dẫn src sai: đường dẫn tính tương đối so với tệp HTML, tên tệp phân biệt chữ hoa chữ thường trên hầu hết máy chủ, và một đường dẫn như C:\photos\cat.jpg chỉ tồn tại trên máy của bạn. Mở trực tiếp URL của ảnh trong trình duyệt để kiểm tra.

Văn bản alt trong HTML là gì?

Thuộc tính alt là văn bản thay thế cho ảnh. Trình đọc màn hình đọc nó, và trình duyệt hiện nó khi ảnh không tải được. Hãy mô tả những gì ảnh thể hiện hoặc chức năng của ảnh; dùng alt="" cho ảnh chỉ để trang trí.

Làm sao để ảnh responsive?

Thêm max-width: 100%; height: auto; cho ảnh trong CSS. Khi đó ảnh co lại cho vừa khối chứa hẹp và không bao giờ to hơn chiều rộng gốc của nó.

Vì sao có khoảng trống bên dưới ảnh?

Ảnh mặc định là phần tử inline và nằm trên đường cơ sở của chữ, nên chừa chỗ bên dưới cho phần đuôi của các chữ cái. Đặt display: block cho ảnh, hoặc vertical-align: middle, để bỏ khoảng trống đó.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu