1. Растровая и векторная графика
3. Графика под ретину
4. Адаптивный <img>
2. Контентное или декоративное изображение
1. GIF
2. JPEG
3. PNG
4. WebP
(Graphics Interchange Format)
Рожден в 1987 году для передачи растровых изображений по интернету
Содержит палитру из 256 цветов
Поддерживает анимацию, т.е. состоит из нескольких кадров
НЕ подходит для полноцветных изображений и фотографий
(Graphics Interchange Format)
Где использовать?
1. Изображение не многоцветное
2. Нужна анимация
Рожден в начале 90-х годов
Поддерживает более 16 миллионов цветов
Можно ужимать в весе, но с потерей качества
Где использовать?
В полноцветных изображениях, фотографиях
quality = 2%
quality = 50%
quality = 100%
1920х1080
104 КБ
400 КБ
1.12 МБ
Позволяет сохранять изображения, в которых требуется особенная чёткость
Поддержка альфа-прозрачности
Где использовать?
1. Когда необходима повышенная точность полноцветных изображений
2. В зображениях с резкими переходами цветов.
3. Нужна полупрозрачность или полунепрозрачность
3.5 МБ
Рожден в 2010 году в
сжимает изображения без потерь лучше, чем PNG (на 26% по данным )
сжимает изображения с потерями лучше, чем JPEG (на 25–34% по данным )
Поддержка альфа-прозрачности
Векторная графика
Размер объектов SVG намного меньше размера растровых изображений
Изображения не теряют в качестве при масштабировании
Рожден в 1999 году
Можно управлять из CSS и из JS
Где использовать?
1. Если есть необходимость анимировать части изображения
2. Изменять цвет элементов изображения
3. Необходимо масштабировать изображение без потерь.
Нет никаких четкий регламентированных критериев по выбору того или иного формата.
Декоративные элементы, логотипы и тд в основном - векторная графика.
Контентные изображения, фоновые изображения в основном - растровая графика.
Старайтесь максимально ужимать изображения, но следите за качетсвом1!1!!!
jpeg & png
only png
для GULPa
Контентное изображение
или
декоративное изображение
.pictures__item {
width:700px;
height:400px;
}
.pictures__item--content > img {
display:block;
max-width:100%;
}
.pictures__item--decoration {
background-repeat:no-repeat;
background-position:center;
background-size:cover;
background-image:url('../my-picture.jpg');
}
<section class='pictures'>
<div class='pictures__item pictures__item--content'>
<img src='my-picture.jpg' alt='some-alt-text'
title='some-title' width='700px' height='400px'>
</div>
<div class='pictures__item pictures__item--decoration'>
</div>
</section>
.pictures__item--decoration {
position:relative;
}
.pictures__item--decoration::after {
content: "";
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background-repeat:no-repeat;
background-position:center;
background-size:cover;
background-image:url('my-picture.jpg');
}
Доносит пользователю дополнительную (визуальную) информацию.
Не несут дополнительной информации. Служат исключительно для оформления мелких декоративных элементов (в идеале вешать на ::after / ::before), оформления основного контента.
Контентное
Контентное
Контентное
Контентное
ДЕКОРАТИВНОЕ
ДЕКОРАТИВНОЕ
ДЕКОРАТИВНОЕ х2
ПО СИТУАЦИИ
???
Если вы убрали изображение и в контентe не хватает информации - это <img>
Если вы убрали изображение контент остался понятным и доступным - это {BGI}
РАБОТА
С
РЕТИНОЙ
БОЛЬ
ШТА ?!
ШТА ?!
ШТА ?!
ШТА ?!
Разрешение (resolution) — количество физических пикселей на экране устройства
Плотность пикселей (PPI "pixels per inch") - количество пикселей, которое вмещается в 1 дюйм.
- 5 PPI
10
Физические пиксели
(device pixel или physical pixel)
самые маленькие элементы любого дисплея, каждый из которых имеет свой цвет и яркость.
CSS-пиксели (CSS pixels) — абстрактная величина, используемая браузерами для точного отображения контента на страницах
Обычный экран
1280 пикселей в 15 дюймах
1 css pixels = 1 device pixels
Экран с повышенной плотностью пикселей
2560 пикселей в 15 дюймах
Пикселей больше, а их размер - меньше
1 css pixels = 4 device pixels
«Рождение Венеры»
ретина
ретина
ретина
@media (min-resolution: 144dpi),(min-resolution: 1.5dppx) {
...
}
Определяем экран на ретину
Если больше 1.5 физических пикселей на 1 css пиксел - экран ретиновый
Часть 1
level: so easy
.picture {
width: 100px;
background-repeat: no-repeat;
background-image: url('bg-200px.png');
background-size: 100px auto;
}
"По наименьшему сопротивлению"
Все устройства загрузят большую картинку.
Зачем?
.picture {
width: 100px;
background-repeat: no-repeat;
background-image: url('bg-100px.png');
background-size: 100px auto;
}
@media (min-resolution: 1.5dppx) {
.picture {
background-image: url('bg-200px.png');
}
}
Часть 2
Атрибут тега <img>
Дает возможность выбрать лучший подходящий вариант из предложенных.
Дает возможность рассказать браузеру о фактических размерах
предложенных картинок.
Вариант 1
<img width='200' src='200.png' srcset='400.png 2x, 800.png 3x'>
По модификатору
Экран | Картинка |
---|---|
НЕретина | 200.png |
Ретина 2х | 400.png |
Ретина 3х | 800.png |
X - соотношение css пикселей и физических пикселей.
Вариант 2
<img width='100' src='a.png'
srcset='b.png 300w, c.png 600w, d.png 900w'>
"Реши сам"
Экран | Картинка |
---|---|
Ретина 3х |
b.png
<img width='300' src='a.png'
srcset='b.png 300w, c.png 600w, d.png 900w'>
Экран | Картинка |
---|---|
Ретина 3х |
d.png
W - рассказываем размеры картинки до скачивания
Почти именно так
Mobile
Tablet
Desktop
<source>
<picture>
<source media='(min-width:1200px)' srcset='desktop.png'>
<source media='(min-width:768px)' srcset='tables.png'>
<img src='mobile.png'>
</picture>
<picture class='picture__wrapper'>
...
</picture>
<div class='picture__wrapper'>
<picture>
...
</picture>
</div>
<picture>
<source media='(min-width:1200px)' srcset='desktop.png'>
<source media='(min-width:768px)' srcset='tables.png'>
<img src='mobile.png'>
</picture>
экран | картинка |
---|---|
iphone 6 plus viewport == '414px' | mobile.png |
desktop viewport > '1200px' | desktop.png |
SO EASY
<picture>
<source media='(min-width:1200px)'
srcset='desktop.png 1x',
'desktop-2.png 2x',
'desktop-3.png 3x'
>
<source media='(min-width:768px)'
srcset='tables.png 1x',
'tables-2.png 2x',
'tables-3.png 3x'
>
<img src='mobile.png'
srcset='mobile-2.png 2x'
>
</picture>
экран | картинка |
---|---|
viewport 800px
retina 2x
viewport 600px
retina 1x
viewport 1440
retina 3x
tables.png 2x
mobile.png 1x
desktop.png 3x
EASY
<picture>
<source media='(min-width:1200px)'
type = 'image/webp'
srcset='desktop.webp 1x',
'desktop-2.webp 2x',
'desktop-3.webp 3x'
>
<source media='(min-width:1200px)'
srcset='desktop.jpg 1x',
'desktop-2.jpg 2x',
'desktop-3.jpg 3x'
>
<source media='(min-width:768px)'
type = 'image/webp'
srcset='tables.webp 1x',
'tables-2.webp 2x',
'tables-3.webp 3x'
>
<source media='(min-width:768px)'
srcset='tables.jpg 1x',
'tables-2.jpg 2x',
'tables-3.jpg 3x'
>
<img src='mobile.png'
srcset='mobile-2.png 2x'
>
</picture>
Неизвестная ширина <img>
<div class='picture'>
<img src='picture.png'>
</div>
.picture {
width:100%;
}
.picture > img {
width:100%;
max-width:100%;
}
@media (min-width:620px) {
.picture > img {
width:50%;
}
}
На момент чтения HTML - документа, браузер понятия не имеет кто такой .picture, так как CSS стили еще не загрузились.
Браузер не может выбрать нужный размер картинки, т к не знает размеры для отрисовки
атрибут <img>
<img
src="small.png"
srcset="small.png 200w,
medium.png 400w,
large.png 800w"
sizes="(min-width: 600px) 50vw : 100vw"
>
<img
src="small.png"
srcset="small.png 400w,
medium.png 800w,
large.png 1200w"
sizes="(min-width: 600px) 50vw : 100vw"
>
экран | картинка |
---|---|
retina x1 | small.png |
retina x2 | medium.png |
retina x3 | large.png |
viewport 400px
<img
src="small.png"
srcset="small.png 400w,
medium.png 800w,
large.png 1200w"
sizes="(min-width: 600px) 50vw : 100vw"
>
экран | картинка |
---|---|
retina x1 | small.png |
retina x2 | medium.png |
retina x3 | large.png |
viewport 600px
<img
src="small.png"
srcset="small.png 400w,
medium.png 800w,
large.png 1200w"
sizes="(min-width: 600px) 50vw : 100vw"
>
экран | картинка |
---|---|
retina x1 | |
retina x2 | |
retina x3 |
viewport 1000px
small.png || medium.png
medium.png || large.png
large.png
Полезности.
Спасибо