← Назад к вопросам
Как поместить в div картинки разных размеров?
1.7 Middle🔥 151 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Размещение картинок разных размеров в контейнере
Это одна из частых задач в адаптивной верстке. Существует несколько проверенных подходов для управления изображениями разных размеров.
1. Object-Fit: Масштабирование с сохранением пропорций
Самый простой и надежный способ:
import Image from "next/image";
function ImageGallery() {
return (
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="relative w-full h-64 bg-gray-200 rounded-lg overflow-hidden">
<Image
src="/large-image.jpg"
alt="Large image"
fill
className="object-cover"
/>
</div>
<div className="relative w-full h-40 bg-gray-200 rounded-lg overflow-hidden">
<Image
src="/small-image.jpg"
alt="Small image"
fill
className="object-cover"
/>
</div>
</div>
);
}
Свойства object-fit:
cover- заполняет контейнер, может обрезать краяcontain- вся картинка видна, могут быть пустые областиfill- растягивает картинку на весь контейнерscale-down- показывает картинку в оригинальном размере или меньше
2. Responsive Images с next/image
Next.js автоматически оптимизирует картинки для разных размеров экрана:
function ResponsiveImage() {
return (
<div className="w-full">
<Image
src="/responsive-image.jpg"
alt="Responsive"
width={1200}
height={600}
sizes="(max-width: 640px) 100vw,
(max-width: 1024px) 80vw,
1200px"
className="w-full h-auto"
/>
</div>
);
}
Параметр sizes указывает, какой ширины картинка реально на разных экранах. Next.js автоматически подгружает нужное разрешение.
3. CSS Grid для галереи разных размеров
Для Pinterest-подобного макета:
function ImageGallery({ images }) {
return (
<div className="grid gap-4 grid-cols-2 md:grid-cols-3 lg:grid-cols-4">
{images.map((img) => (
<div
key={img.id}
className={img.featured ? "col-span-2 row-span-2" : ""}
>
<div className="relative w-full h-48 rounded-lg overflow-hidden bg-gray-200">
<Image
src={img.src}
alt={img.alt}
fill
className="object-cover hover:scale-105 transition"
/>
</div>
</div>
))}
</div>
);
}
4. Aspect Ratio для предсказуемых пропорций
Для сохранения пропорций без искажений:
function CardWithImage({ src, alt }) {
return (
<div className="bg-white rounded-lg overflow-hidden shadow">
<div className="relative w-full aspect-video">
<Image
src={src}
alt={alt}
fill
className="object-cover"
/>
</div>
<div className="p-4">
<h3 className="font-bold">Card Title</h3>
<p className="text-gray-600">Description</p>
</div>
</div>
);
}
5. Lazy Loading и Placeholder
Для производительности:
function OptimizedImage({ src, alt }) {
return (
<Image
src={src}
alt={alt}
width={800}
height={400}
placeholder="blur"
blurDataURL="data:image/jpeg;base64,..."
loading="lazy"
className="w-full h-auto"
/>
);
}
6. CSS Flex для выравнивания
Для простых случаев:
function ImageRow() {
return (
<div className="flex gap-4 items-stretch">
<div className="flex-1 h-48 bg-gray-200 rounded-lg overflow-hidden">
<Image
src="/img1.jpg"
alt="Image 1"
width={400}
height={300}
className="w-full h-full object-cover"
/>
</div>
<div className="flex-1 h-48 bg-gray-200 rounded-lg overflow-hidden">
<Image
src="/img2.jpg"
alt="Image 2"
width={600}
height={300}
className="w-full h-full object-cover"
/>
</div>
</div>
);
}
7. Контейнер с Fixed Ratio
Для видео или других медиа:
function ResponsiveVideo() {
return (
<div className="w-full" style={{ paddingBottom: "56.25%", position: "relative" }}>
<Image
src="/thumbnail.jpg"
alt="Video thumbnail"
fill
className="object-cover"
/>
</div>
);
}
Best Practices
- Всегда используйте
next/imageвместо<img>- она автоматически оптимизирует - Указывайте
widthиheightдля избежания layout shift - Используйте
object-coverдля галерей иobject-containдля контента - Кэшируйте оптимизированные картинки на CDN
- Используйте
sizesдля адаптивных изображений - Добавляйте
loading="lazy"для картинок ниже fold
В PrepBro используем эти подходы для эффективного отображения картинок профессионалов, вопросов и интервью без проблем с производительностью.