@yandex/ui
Version:
Yandex UI components
96 lines (74 loc) • 13.9 kB
Markdown
# Image
<a href='https://github.yandex-team.ru/search-interfaces/frontend/tree/master/packages/lego-components/src/Image' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Исходники]/[Github
][green]/badge.svg' /></a> <a href='https://search.yandex-team.ru/stsearch?text=Image.ts&facet.queue=ISL&facet.type=bug&facet.status=128' target='_blank'><img src='https://badger.yandex-team.ru/custom/[Известные проблемы]/[Startrek][blue]/badge.svg' /></a>
<!-- description:start -->
Компонент для красивой загрузки картинок
- Пока загружается картинка, пользователь будет видеть `<stub/>`
- После загрузки картинки она будет плавно отображена поверх `<stub/>`
- После плавного показана картинки `<stub/>` будет удалён из `DOM`
- Если картинка загружается из кэша, то пользователь увидит сразу картинку без показа `<stub/>`
- Если картинку не удалось загрузить, то покажется стандартная картинка из свойства `fallback`
<!-- description:end -->
## Пример использования
```ts
// src/App.ts
import React from 'react'
import { Image } from '@yandex-lego/components/Image/desktop'
// Использование компонента в вашем приложении
const App = () => (
<Image
src="https://yastatic.net/lego/_/Kx6F6RQnQFitm0qRxX7vpvfP0K0.png"
src2x="https://yastatic.net/lego/_/Kx6F6RQnQFitm0qRxX7vpvfP0K0.png"
alt="Alternative text"
/>
)
```
## Примеры
### Ширина, высота и скругления изображения
Чтобы задать ширину, высоту и скругления изображения, используйте свойства `width`, `height` и `borderRadius`.
{{%story::desktop:content-image-desktop--width-and-height%}}
### Адаптивное изображение
Изображение для ретины — `src2x`.
Чтобы более гибко настроить адаптивные изображения, используйте свойства `sizes` и `srcSet`.
{{%story::desktop:content-image-desktop--sizes-and-srcset%}}
### Заглушки для изображений
Компонент состоит из трех частей:
```html
<container>
<img/>
<stub/>
</container>
```
```typescript jsx
import React from 'react';
import { Image } from '@yandex-lego/components/Image/desktop';
const App: React.FC = () => {
return (
<Image className="my-image" stub={<MyImageStub/>} />
);
};
```
{{%story::desktop:content-image-desktop--load-error-stub%}}
## Свойства
<!-- props:start -->
| Свойство | Тип | Описание |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| innerRef? | `RefObject<HTMLImageElement>` | Ссылка на корневой DOM-элемент компонента |
| src? | `string` | Ссылка на изображение |
| srcSet? | `string` | Набор источников для создания [адаптивных изображений](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images). Подробнее об атрибуте `srcSet` в документации [MDN web docs](https://developer.mozilla.org/ru/docs/Web/HTML/Element/img#attr-srcset) |
| sizes? | `string` | Набор размеров для создания [адаптивных изображений](https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images). Подробнее об атрибуте `sizes` в документации [MDN web docs](https://developer.mozilla.org/ru/docs/Web/HTML/Element/img#attr-sizes) |
| src2x? | `string` | URL картинки для экранов с высокой плотностью пикселей = srcSet: "url 2x". srcSet имеет приоритет. |
| fallbackSrc? | `string` | Ссылка на изображение при неудачной загрузке |
| className? | `string` | Дополнительный класс |
| imageClassName? | `string` | Дополнительный класс для изображения |
| stub? | `string \| number \| false \| true \| {} \| ReactElement<any, string \| ((props: any) => ReactElement<any, string \| ... \| (new (props: any) => Component<any, any, any>)>) \| (new (props: any) => Component<any, any, any>)> \| ReactNodeArray \| ReactPortal` | Компонент для отображения во время загрузки картинки |
| alt? | `string` | Альтернативный текст |
| ariaLabel? | `string` | атрибут aria-label |
| onClick? | `(event: MouseEvent<HTMLElement, MouseEvent>) => void` | обработчик клика |
| loading? | `"lazy" \| "eager" \| "auto"` | атрибут [loading у изображения](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-loading) |
| width? | `string \| number` | Ширина изображения |
| height? | `string \| number` | Высота изображения |
| borderRadius? | `string \| number` | Скругления изображения |
<!-- props:end -->
## Смотрите также
- <a href='https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images' target="_blank">Adaptive Images</a>