UNPKG

@yandex/ui

Version:

Yandex UI components

96 lines (74 loc) 13.9 kB
# 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>