Это из-за ваших CSS единиц.em
равно текущему размеру шрифта.Это масштабируемая единица, но не то, что вы хотите.Ваш родитель должен иметь возможность масштабировать столько, сколько он хочет в соответствии с содержанием внутри него для отзывчивости.См. Здесь
figure { height: 30em; width: 45%; }
Ваша метка фигуры имеет ширину, будь она любой, что вы делаете неправильно, вы как бы запечатываете метку.Вы допускаете ширину 45%
, но ограничивает высоту.И тогда вы делаете это неправильно.
figure>img { width: auto; height: 100%; border-color: red; }
Делая изображение масштабируемым до полной высоты.Вот почему из-за ограниченности родительского элемента div и этого изображения height:100%
вы видите, что изображение выходит или оно выходит за пределы фигуры.Вы должны позволить родительскому элементу масштабироваться независимо и определять ширину дочерних элементов, которые изменяют внешний вид.
Все, что говорится, принимая все во внимание, вы получите это
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Stack Exchange Logo</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style>
* { box-sizing: border-box; border-style: solid; padding: .1em; }
figure { height: auto; width: 45%; }
figure>img { width: 100%; height: 100%; border-color: red; }
</style>
</head>
<body>
<figure>
<figcaption>Stack Exchange Logo</figcaption>
<img alt="SE logo" src="https://pbs.twimg.com/profile_images/1213884858/apple-touch-icon_400x400.png" />
</figure>
</body>
</html>