Я пытаюсь создать страницу с помощью FlexBox, чтобы основное изображение всегда было центрировано с верхним логотипом и страницей. И добавьте текст "не по центру" рядом с левым.
Моя проблема сейчас в том, что я не могу сделать так, чтобы каждое поле (изображение + текст) оставалось на своем месте по вертикали, ящики плавают, и у них разное пространство между собой в зависимости от того, что я использую для просмотра (большой экран, ноутбук).
Я не эксперт по FlexBox, могу ли я это сделать?
Кроме того, я хочу добавить полосу после третьего поля, шириной 100% ... но она размещается посередине страницы между полями.
Любая помощь будет приветствоваться, и я буду продолжать учиться :)
body {
margin: 0;
}
.container {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
height: 100vh;
}
.top {
border: 1px solid white;
width: 50%;
height: 10%;
align-self: flex-start;
text-align: center;
}
.inner-container {
border: 1px solid white;
width: 50%;
height: 60%;
display: flex;
}
.center {
position: absolute;
width: 50%;
text-align: left;
align-self: flex-end;
}
.off-center {
position: absolute;
vertical-align: bottom;
text-transform: uppercase;
padding-left: 10px;
min-width: 200px;
align-self: flex-end;
}
.center, .off-center {
position: absolute;
}
.center img {width: 100%;}
.off-center h2 {font-size:12px; font-family: 'Open Sans', sans-serif; font-weight: 400;text-transform: uppercase; color:black; display: block!important;margin: 0px;}
.off-center p {font-size: 20px; font-family:'aileronbold', sans-serif; display: block!important;margin: 0px;text-transform: none;}
.row.subscriptionBar {display:flex; background-color: black; display: block; padding:20px;}
.subscriptionBar h2 {color:white;}
.firstPart {display: }
@media screen and (min-width: 769px) {
.off-center {
margin-left: 50%;
}
@media screen and (max-width: 768px) {
.off-center {
margin-top: 105px;
}
}<div class = "container">
<div class = "top"><img src = "https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width = "80px"></div>
<div class = "inner-container">
<div class = "center">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
<div class = "off-center">
<h2 class = "">ArtistName 1</h2>
<p>509476ZclHtqXy</p></div>
</div>
<div class = "inner-container">
<div class = "center">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
<div class = "off-center">
<h2 class = "">ArtistName 2</h2>
<p>Title lala 1</p></div>
</div>
<div class = "inner-container">
<div class = "center">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
<div class = "off-center">
<h2 class = "">ArtistName 3 444</h2>
<p>Title 093830</p></div>
</div>
</div>Конечно, спасибо. Проблемы: 1) Изображения / прямоугольники перемещаются вертикально, иногда над логотипом вверху. Я привык работать с Bootstrap и CSS, но с flexbox я не знаю, как устанавливать границы. 2) Та же проблема, что и в предыдущем пункте, я думаю, но как я могу установить горизонтальные изображения и вертикальные изображения, чтобы сохранить те же пропорции. Посмотрите пример / каркас, прикрепленный к моему сообщению. В настоящее время вертикальное изображение перекрывается с другими полями. 3) Горизонтальная полоса: посередине страницы, я хочу, чтобы она была после третьего поля.
Я не вижу горизонтальной полосы в вашем макете. Кроме того, вы можете упростить вопрос, немного разбив проблему. Может быть, сфокусируйтесь на этом вопросе на одной проблеме. Как только об этом позаботятся, сосредоточьтесь на следующем в новом вопросе. Это упростит понимание проблем и сделает их более привлекательными для участников.
Я думаю, что ваш макет был бы намного проще, если бы вы добавили flex-direction: column; в свой контейнер.






.wrapper {
display: flex;
flex-flow: row wrap;
font-weight: bold;
text-align: center;
}
.wrapper > * {
padding: 10px;
flex: 1 100%;
}
header{
background: tomato;
}
section{
display: flex
}
.main {
background: deepskyblue;
}
.main img{
max-width: 100%;
}
.full-width {
background: lightgreen;
}
.main { order: 2; flex: 3 0px; }
.aside { flex: 1 auto; }
.aside-1 { order: 1; background: gold; width: 10%}
.aside-2 { order: 3; background: hotpink; position: relative; width: 10%}
.aside-2 > span {
position: absolute;
bottom: 0;
left: 0;
}
.vertical {
width: 15%; /* Modify this value for different screen size*/
}
/* .full-width { order: 4; } */
/*@media all and (min-width: 600px) {
.aside { flex: 1 auto; }
}
@media all and (min-width: 800px) {
.main { flex: 3 0px; }
.aside-1 { order: 1; }
.main { order: 2; }
.aside-2 { order: 3; }
.footer { order: 4; }
}*/
body {
padding: 2em;
}<div class = "wrapper">
<header><img src = "https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width = "80px"></header>
<section>
<div class = "main">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
</div>
<aside class = "aside aside-1"></aside>
<aside class = "aside aside-2"><span>Aside Right</span></aside>
</section>
<section>
<div class = "main">
<img src = "https://picsum.photos/200/300" alt = "">
</div>
<aside class = "aside aside-1 vertical"></aside>
<aside class = "aside aside-2 vertical"><span>Aside Right</span></aside>
</section>
<section>
<div class = "main">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
</div>
<aside class = "aside aside-1"></aside>
<aside class = "aside aside-2"><span>Aside Right</span></aside>
</section>
<section class = "full-width">Full Width</section>
<section>
<div class = "main">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
</div>
<aside class = "aside aside-1"></aside>
<aside class = "aside aside-2"><span>Aside Right</span></aside>
</section>
</div>Я просто делаю небольшой образец, потому что неясно, что вы ищете. Если вы надеетесь двигаться в этом направлении, возможно, я смогу вам помочь.
Ты классный, спасибо! Это именно то, что мне нужно. Из того, что я вижу, одной из моих основных проблем была настройка flexbox, вы добавляли заказы в flexbox, а затем внутри каждого раздела вы использовали абсолютное позиционирование для позиционирования изображения + текста, и это имело смысл. Я буду работать над медиа-запросами. У меня есть только один вопрос, потому что я не вижу его в этом ответе: если я поставлю изображение с вертикальной ориентацией, я попытаюсь использовать 100% ширину. Если вы видите прилагаемый пример, разница между горизонтальным и вертикальным изображением. В настоящее время, когда используется vertica, растяните изображение до 100% ширины.
Вопрос: Насколько динамичной будет ваша страница? Какую точку соотношения вы собираетесь использовать для установки изображений? или он будет полностью статичным? Если вы не хотите, чтобы изображение использовало 100% ширину, вы можете установить его max-width: 100% вместо width: 100%. Если ваша страница будет статической, вы можете использовать модификацию, но она не идеальна, больше похожа на временное исправление, чтобы получить представление. Если он будет динамичным, есть другие способы справиться с этим. Дайте мне знать!
Не уверен, что вы имеете в виду под динамическим и статическим ... Чего я не хочу, так это использовать 100% ширину для вертикальных изображений ... потому что вертикально ориентированное изображение пытается использовать 100% ширины, и оно стало больше, чем горизонтальный, потому что приоритет отдается сохранению 100% ширины, и я не хочу этого ... по вертикали должна отображаться "меньшая" ширина, по центру ... проверьте мой исходный пост с изображениями, есть вертикальное изображение . Я попробую с max-width, чтобы посмотреть, поможет ли это. Спасибо!
О, я думаю, я понимаю ... он будет полностью статичным, это временный веб-сайт, и я могу управлять обновлениями с помощью кода.
Я забыл упомянуть об этом, но я обновил коды раньше, проверьте, если это то, что вы хотите
Спасибо, да, мне это помогает. Я сделал то же самое, что и вы, и это сработало (добавление вертикального класса и изменение размера), поскольку это 100% статический веб-сайт и временный, мы можем перейти к не очень динамичным / приятным параметрам, но они должны работать нормально. Спасибо!
У вас просто слишком много всего происходит с вашей комбинацией flexbox и абсолютного позиционирования. Ниже представлена версия вашего фрагмента, в которой большая часть ненужных css закомментирована (так что вы можете точно видеть, что это такое) плюс пара новых дополнений.
Наиболее важные изменения, кроме удаления некоторых из абсолютного позиционирования, - это удаление flex-wrap из вашего .container и добавление flex-direction: column, а также согласование ширины .center и .off-center, чтобы вы могли использовать position: absolute на .off-center (хорошее использование в этом случае) вместе с эквивалентом margin-left. на ширину, чтобы убедиться, что он расположен справа от контейнера изображений.
body {
margin: 0;
}
.container {
display: flex;
flex-direction: column;
align-items: center;
/*justify-content: center;
flex-wrap: wrap;
height: 100vh;*/
}
.top {
border: 1px solid white;
/*width: 50%;*/
height: 10%;
/*align-self: flex-start;*/
text-align: center;
}
.inner-container {
border: 1px solid white;
/*width: 50%;*/
height: 60%;
display: flex;
justify-content: space-around;
}
.center {
/*position: absolute;*/
width: 50%;
min-width: 200px;
text-align: left;
/*align-self: flex-end;*/
}
.off-center {
position: absolute;
/*vertical-align: bottom;*/
text-transform: uppercase;
padding-left: 10px;
width: 50%;
min-width: 200px;
align-self: flex-end;
margin-left: 50%;
}
/*.center, .off-center {
position: absolute;
}*/
.center img {
width: 100%;
}
.off-center h2 {
font-size: 12px;
font-family: 'Open Sans', sans-serif;
font-weight: 400;
text-transform: uppercase;
color: black;
display: block!important;
margin: 0px;
}
.off-center p {
font-size: 20px;
font-family: 'aileronbold', sans-serif;
display: block!important;
margin: 0px;
text-transform: none;
}
.row.subscriptionBar {
display: flex;
background-color: black;
display: block;
padding: 20px;
}
.subscriptionBar h2 {
color: white;
}
.firstPart {
display:
}
/*@media screen and (min-width: 769px) {
.off-center {
margin-left: 50%;
}
@media screen and (max-width: 768px) {
.off-center {
margin-top: 105px;
}
}*/<div class = "container">
<div class = "top"><img src = "https://www.oilandgasreinvented.com/img/logo-placeholder.svg" width = "80px"></div>
<div class = "inner-container">
<div class = "center">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = "">
</div>
<div class = "off-center">
<h2 class = "">ArtistName 1</h2>
<p>509476ZclHtqXy</p>
</div>
</div>
<div class = "inner-container">
<div class = "center">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
<div class = "off-center">
<h2 class = "">ArtistName 2</h2>
<p>Title lala 1</p>
</div>
</div>
<div class = "inner-container">
<div class = "center">
<img src = "http://hdimages.org/wp-content/uploads/2017/03/placeholder-image1.gif" alt = ""></div>
<div class = "off-center">
<h2 class = "">ArtistName 3 444</h2>
<p>Title 093830</p>
</div>
</div>
</div>Благодарю за ваш ответ. У меня это не работает, потому что у меня все еще проблемы с плаванием. Я не могу загрузить, как я это вижу, но поля отделяются друг от друга, если у вас рабочий стол меньшего размера ...
Должен быть какой-то другой CSS или конфликтующая библиотека, которая вызывает вашу проблему. Html и css во фрагменте ответа не вызовут разделения между изображениями на устройствах разных размеров (вы можете развернуть фрагмент до полной страницы, а затем протестировать устройства различной ширины в своем браузере, чтобы понять, о чем я говорю). Тем не менее, похоже, что вы нашли то, что вам нужно, в другом ответе, который очень хорошо составлен @KendraChu.
Да, отличный ответ от @KendraChu. Теперь у меня просто есть некоторые проблемы с отзывчивостью изображения ... если я удалю width:100% из .main img, я получу то, что мне нужно, а именно сохранение соотношений и пропорций изображений (вертикальное изображение не должно использовать ту же ширину, что и горизонтальное), НО если я это сделаю, изображение не будет реагировать.
Ваш код действительно очень близок к тому, чего вы пытаетесь достичь. Не могли бы вы подробнее объяснить, в чем проблема?