← Назад к вопросам
Как сделать чтобы картинка не выпирала за закругленные края div?
2.3 Middle🔥 141 комментариев
#Soft Skills и рабочие процессы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Картинка с закругленными краями: правильная реализация
Это частая проблема при верстке - картинка часто "выпирает" за границы блока с border-radius. Вот несколько способов это исправить.
Способ 1: overflow hidden (самый простой)
Самый надёжный способ - добавить overflow: hidden на контейнер:
.image-container {
width: 300px;
height: 300px;
border-radius: 16px;
overflow: hidden; /* Главное свойство! */
background-color: #f0f0f0;
}
.image-container img {
width: 100%;
height: 100%;
object-fit: cover; /* Чтобы картинка заполняла весь контейнер */
}
<div class="image-container">
<img src="photo.jpg" alt="Photo">
</div>
Способ 2: С использованием Tailwind CSS
<!-- ✅ Самый простой способ в Tailwind -->
<div class="w-80 h-80 rounded-2xl overflow-hidden">
<img src="photo.jpg" alt="Photo" class="w-full h-full object-cover">
</div>
<!-- Альтернатива с bg-cover -->
<div
class="w-80 h-80 rounded-2xl bg-cover bg-center"
style="background-image: url("photo.jpg")"
></div>
Способ 3: С position absolute (для более сложных случаев)
Если тебе нужен контроль над position картинки:
.image-wrapper {
position: relative;
width: 300px;
height: 300px;
border-radius: 16px;
overflow: hidden; /* Обязательно! */
}
.image-wrapper img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
object-fit: cover;
}
<div class="image-wrapper">
<img src="photo.jpg" alt="Photo">
</div>
Способ 4: Используя CSS mask (продвинутый метод)
Если overflow: hidden не подходит (например, нужна тень за картинкой):
.image-masked {
width: 300px;
height: 300px;
border-radius: 16px;
/* CSS mask создаёт маску вместо overflow */
-webkit-mask-image: radial-gradient(
circle,
black 0%,
black calc(100% - 16px),
transparent 100%
);
mask-image: radial-gradient(
circle,
black 0%,
black calc(100% - 16px),
transparent 100%
);
}
.image-masked img {
width: 100%;
height: 100%;
object-fit: cover;
}
Способ 5: SVG маска (для сложных форм)
Если нужны нестандартные скруглённые края:
<svg style="display: none;">
<defs>
<mask id="rounded-mask">
<rect width="300" height="300" fill="white" rx="16" ry="16"/>
</mask>
</defs>
</svg>
<div class="image-container">
<img
src="photo.jpg"
alt="Photo"
style="mask: url(#rounded-mask); -webkit-mask: url(#rounded-mask);"
>
</div>
Способ 6: React компонент с правильной реализацией
// components/RoundedImage.tsx
import React from "react";
interface RoundedImageProps {
src: string;
alt: string;
borderRadius?: string;
width?: string | number;
height?: string | number;
objectFit?: "cover" | "contain" | "fill";
className?: string;
}
export function RoundedImage({
src,
alt,
borderRadius = "16px",
width = "300px",
height = "300px",
objectFit = "cover",
className = "",
}: RoundedImageProps) {
return (
<div
className={`overflow-hidden ${className}`}
style={{
width,
height,
borderRadius,
}}
>
<img
src={src}
alt={alt}
style={{
width: "100%",
height: "100%",
objectFit,
display: "block",
}}
/>
</div>
);
}
// Использование
<RoundedImage
src="photo.jpg"
alt="Profile"
borderRadius="12px"
width="200px"
height="200px"
/>
Способ 7: С box-shadow и border (для более сложного дизайна)
.image-card {
position: relative;
width: 300px;
border-radius: 16px;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.image-card img {
display: block;
width: 100%;
height: auto;
border-radius: 16px;
}
/* Если картинка меньше контейнера */
.image-card img {
object-fit: cover;
width: 100%;
height: 100%;
}
Важные моменты
1. Всегда используй display: block на картинке:
/* ❌ Плохо - img это inline элемент, создаёт отступ */
.container img {
width: 100%;
}
/* ✅ Хорошо */
.container img {
display: block;
width: 100%;
}
2. Используй object-fit для контроля масштабирования:
img {
width: 100%;
height: 100%;
/* cover - картинка заполняет контейнер, может обрезаться */
object-fit: cover;
/* contain - вся картинка видна, может быть пустое место */
object-fit: contain;
/* fill - растягивает картинку на весь контейнер */
object-fit: fill;
}
3. Для фоновых картинок используй background-size:
.background-image {
width: 300px;
height: 300px;
border-radius: 16px;
background-image: url("photo.jpg");
background-size: cover; /* Аналог object-fit: cover */
background-position: center;
overflow: hidden; /* На случай, если нужно совсем точно */
}
Проверочный чеклист
- Добавлен
overflow: hiddenна контейнер? - Картинка имеет
display: block? - Используется
width: 100%иheight: 100%? - Установлены
border-radiusна контейнер? - Если нужен контроль обрезки - используется
object-fit?
Самое простое и надёжное решение - overflow: hidden + object-fit: cover.