Глиф Учебники

Урок 3. Картинки и пути к файлам

Курс «HTML и CSS» · урок 3 из 10 · 4 минуты чтения

Картинка на странице — отдельный файл, а в HTML пишется только ссылка на него. Поэтому главное в этом уроке — не сам тег, а путь: как указать, где лежит файл, чтобы он нашёлся и у вас на компьютере, и на сервере.

Тег img

HTML
<img src="images/cake.jpg" alt="Яблочный пирог на тарелке" width="600" height="400">

<img> — пустой тег, закрывающего </img> нет.

Чтобы картинка была ссылкой (например, маленькая открывает большую), её вкладывают в <a>:

HTML
<a href="images/cake-big.jpg">
  <img src="images/cake.jpg" alt="Яблочный пирог" width="300" height="200">
</a>

Картинку с подписью размечают тегами <figure> и <figcaption>:

HTML
<figure>
  <img src="images/cake.jpg" alt="Яблочный пирог" width="600" height="400">
  <figcaption>Пирог по рецепту из второго раздела</figcaption>
</figure>

Какой формат выбрать

ФорматДля чего
JPEG (.jpg)фотографии
PNG (.png)скриншоты, рисунки с прозрачным фоном
WebP (.webp)фотографии и рисунки: весит меньше JPEG и PNG, умеет прозрачность
SVG (.svg)логотипы, значки, схемы — векторный рисунок, чёткий при любом размере
GIF (.gif)простая анимация

Фотографию с телефона перед выкладкой уменьшите: снимок шириной 4000 пикселей весит несколько мегабайт, а на странице его всё равно покажут шириной 800–1200. Подойдёт любой графический редактор.

Как устроить папки

Держите все файлы сайта в одной папке, а картинки и стили — в своих подпапках:

Текст
site/
  index.html
  about.html
  css/
    style.css
  images/
    logo.png
    cake.jpg
  recipes/
    pie.html

Имена файлов и папок — латиницей, маленькими буквами, без пробелов: apple-pie.jpg, а не Яблочный пирог.JPG. Пробелы и русские буквы в адресах превращаются в коды вида %20, а при загрузке на сервер такие имена могут исказиться.

Относительные пути

Относительный путь отсчитывается от папки, где лежит сама страница. Разделитель — прямая косая черта /, как в адресах сайтов.

Со страницы index.html из схемы выше:

Нужен файлПуть
about.html в той же папкеabout.html
logo.png в папке imagesimages/logo.png
pie.html в папке recipesrecipes/pie.html

Со страницы recipes/pie.html картинки лежат уровнем выше. Подняться на папку вверх — ../:

HTML
<img src="../images/cake.jpg" alt="Яблочный пирог" width="600" height="400">
<a href="../index.html">На главную</a>

../../ поднимает на две папки, ./ означает текущую папку (./about.html — то же, что about.html).

site/ index.html about.html css/ style.css images/ logo.png cake.jpg recipes/ pie.html ../ со страницы index.html images/logo.png со страницы recipes/pie.html ../ images/cake.jpg ../ — на папку выше
Со страницы index.html путь images/logo.png сразу заходит в папку images, а со страницы recipes/pie.html путь ../images/cake.jpg сначала выходит из recipes на папку выше.

Абсолютные пути и их ловушки

открыт с диска на сервере относительный images/logo.png полный адрес https://example.com/images/logo.png от корня сайта /images/logo.png путь на диске C:\Users\Anna\Desktop\site\cake.jpg
Относительный путь и полный адрес работают и с диска, и на сервере, путь от корня сайта ломается при открытии с диска, а путь на диске компьютера — на сервере.

Большие и маленькие буквы

Windows не различает регистр: Cake.JPG и cake.jpg для неё один файл. Серверы в интернете почти всегда работают на Linux, а там это два разных файла. Страница, где написано cake.jpg, а файл называется Cake.JPG, на вашем компьютере работает, а на хостинге показывает пустое место. Проще всего называть все файлы маленькими буквами.

Windows на компьютере Cake.JPG и cake.jpg — один файл src="cake.jpg" Cake.JPG картинка видна Сервер на Linux Cake.JPG и cake.jpg — разные файлы src="cake.jpg" Cake.JPG файл не найден — пустое место
Windows находит файл Cake.JPG по пути cake.jpg, потому что не различает большие и маленькие буквы, а сервер на Linux считает это разными именами и файла не находит.

Ленивая загрузка

Атрибут loading="lazy" просит браузер загружать картинку, только когда до неё дошла прокрутка. Длинная страница с десятками фотографий открывается быстрее:

HTML
<img src="images/photo-25.jpg" alt="Выпускной вечер" width="800" height="533" loading="lazy">

Первой картинке на экране, которую видно сразу, этот атрибут не нужен.

Если картинка не показывается

Вместо неё виден значок или текст из alt. Проверьте по порядку:

  1. Имя файла и расширение совпадают до буквы: .jpg и .jpeg — разные имена.
  2. Путь верен относительно страницы, а не относительно корня папки.
  3. Файл действительно лежит там (и на сервере тоже, если сайт уже выложен).
  4. Откройте инструменты разработчика (F12), вкладку «Network» («Сеть») и обновите страницу: у ненайденного файла будет код 404 и путь, по которому браузер его искал.

Об авторских правах

Чужие фотографии и рисунки с других сайтов без разрешения брать нельзя. Используйте свои снимки или картинки, у которых явно указано разрешение на свободное использование, и соблюдайте его условия.

Коротко

Проверьте себя

1. Зачем нужен атрибут alt?
2. Страница лежит в recipes/pie.html, картинка — в images/cake.jpg в корне сайта. Какой путь верный?
3. На компьютере картинка видна, а на хостинге — нет. Файл называется Photo.JPG, в коде — photo.jpg. В чём дело?
4. Какой формат лучше подходит для логотипа, который должен быть чётким на любом экране?