У меня есть сайт Gatsby.js, использующий gatsby-remark-images
для обработки изображений внутри моих статей уценки.
Статьи имеют фиксированную ширину, но изображения переполняются с обеих сторон:
margin: 0 -15rem;
Это прекрасно работает для больших изображений, охватывающих всю ширину, но меньшие изображения не центрированы в родительском .
Я бы хотел использовать решение flexbox, как в этот ответ , но он не работает, потому что gatsby-remark-images
опирается на display: block;
для правильного позиционирования заполнителя base64 и изображения в высоком разрешении.
Текущийсгенерированный html выглядит следующим образом:
<span class="gatsby-resp-image-wrapper">
<span class="gatsby-resp-image-background-image"> <!-- the base64 image is a background of this span -->
<img
class="gatsby-resp-image-image"
alt="My image"
src="/static/b07bc/my-image.jpg"
srcset="
/static/d942e/my-image.jpg 320w,
/static/c1221/my-image.jpg 640w,
/static/b07bc/my-image.jpg 1280w"
sizes="(max-width: 1280px) 100vw, 1280px"
>
</span>
</span>
И стили:
.gatsby-resp-image-wrapper {
position: relative;
display: block; /* for base64 image placeholder */
margin: 0 -15rem; /* overflowing parent container */
max-width: 1280px;
}
.gatsby-resp-image-background-image { /* this is the base64 image */
padding-bottom: 75%;
position: relative;
bottom: 0;
left: 0;
background-image: url('data:image/jpeg;base64,/some/url/');
background-size: cover;
display: block;
}
.gatsby-resp-image-image {
width: 100%;
height: 100%;
margin: 0;
vertical-align: middle;
position: absolute;
top: 0;
left: 0;
}
Как я могу горизонтально отцентрировать все это?
Я думаю, что есть два возможных способаЧтобы решить эту проблему:
- центрируйте изображение с помощью
margin: 0 auto;
и найдите другой способ переполнить родительский элемент - найдите способ центрировать изображение без
margin
и без flexbox
Есть идеи?