#html #css #flexbox
#HTML #css #flexbox
Вопрос:
Div и ссылка отлично работают в мобильном режиме. Однако, когда я расширяюсь до рабочего стола, дочерний элемент исчезает, оставляя оба тега h1 расположенными в одном и том же месте?. Что я делаю не так?
Макет flex отлично работал до того, как я добавил ссылку внутри контейнера, поэтому я не знаю, в чем проблема.
HTML:
@media only screen and (min-width : 992px) {
.banner-container{
display: flex;
}
}
.main-banner{
width: 100%;
border-bottom: 10px solid #D9B784;
background-color: #D9B784;
margin: 1%;
min-height: 350px;
text-align: left;
position: relative;
transition: filter .3s ease-in-out;
-webkit-filter: grayscale(0%);
filter: grayscale(0%);
cursor: pointer;
margin-bottom: 5%;
}
.main-banner:hover{
-webkit-filter: grayscale(75%);
filter: grayscale(75%);
}
.clothing-banner{
background-image: url("../img/banner1.jpg");
background-size: 100%;
background-repeat: no-repeat;
}
.accessories-banner{
background-image: url("../img/acc.jpg");
background-size: 100%;
background-repeat: no-repeat;
}
h1{
color: #333;
font-family: 'EB Garamond', serif;
font-weight: 400;
position: absolute;
width: 50%;
bottom: 10px;
left: 30px;
}
<div class="banner-container">
<a href="https://www.redpostequestrian.co.uk/clothing/holland-cooper">
<div class="clothing-container">
<div class="main-banner clothing-banner">
<h1>Clothing</h1>
</div>
<a>
</div>
<div class="accessories-container">
<a href="https://www.redpostequestrian.co.uk/accessories/holland-cooper">
<div class="main-banner accessories-banner">
<h1>Accessories</h1>
</div>
</a>
</div>
</div>
Ответ №1:
Основная проблема:
У <a>
элемента привязки не было размера, поэтому он рухнул.
Это было связано с ошибками в вашей разметке. Вы забыли закрыть некоторые <div>
— и <a>
элементы.
Проблема с Flexbox:
Если вы хотите использовать flexbox
, вам нужно установить размер для элементов. В этом случае я устанавливаю flex
свойство для двух элементов: «Одежда» и «Аксессуары». Что-то вроде:
flex: 100% 1 0; /* shorthand for: flex-basis, flex-grow, flex-shrink */
Рекомендации:
Вы можете прочитать здесь для получения дополнительной информации о свойствах flexbox: flexbox-css-guide
Вы можете написать свою разметку немного более эффективно (это зависит от ваших целей). Например, вам не нужно переносить <div>
внутренний <a>
тег. Вместо этого вы можете использовать <a>
-element в качестве container
и <div>
полностью отказаться от него.
<a>
-элементы не block
являются элементами, поэтому вы можете либо настроить display: block
, чтобы они покрывали все child-elements
, либо использовать его как a child-element
container
, который использует либо flexbox
или grid
. В этом случае вам не нужно изменять свойство display для работы (как вы можете видеть в примере ниже).
Рабочий пример (с изменением разметки):
@media only screen and (min-width: 992px) {
.banner-container {
display: flex;
}
}
.main-banner {
width: 100%;
border-bottom: 10px solid #D9B784;
background-color: #D9B784;
margin: 1%;
min-height: 350px;
text-align: left;
position: relative;
transition: filter .3s ease-in-out;
-webkit-filter: grayscale(0%);
filter: grayscale(0%);
cursor: pointer;
margin-bottom: 5%;
}
.clothing, .accessories {
flex: 100% 1 0;
}
.main-banner:hover {
-webkit-filter: grayscale(75%);
filter: grayscale(75%);
}
.clothing-banner {
background-image: url("../img/banner1.jpg");
background-size: 100%;
background-repeat: no-repeat;
}
.accessories-banner {
background-image: url("../img/acc.jpg");
background-size: 100%;
background-repeat: no-repeat;
}
h1 {
color: #333;
font-family: 'EB Garamond', serif;
font-weight: 400;
position: absolute;
width: 50%;
bottom: 10px;
left: 30px;
}
<div class="banner-container">
<a href="https://www.redpostequestrian.co.uk/clothing/holland-cooper" class="clothing">
<div class="main-banner clothing-banner">
<h1>Clothing</h1>
</div>
</a>
</div>
<div class="accessories-container">
<a href="https://www.redpostequestrian.co.uk/accessories/holland-cooper" class="accessories">
<div class="main-banner accessories-banner">
<h1>Accessories</h1>
</div>
</a>
</div>
РЕДАКТИРОВАТЬ: добавлен простой макет с двумя столбцами
.container {
display: flex;
}
.col {
flex-basis: 50%;
padding: 15px;
border: 1px dashed black;
}
<div class="container">
<div class="col">col-1</div>
<div class="col">col-2</div>
</div>
Комментарии:
1. Как мне изменить его так, чтобы в представлении рабочего стола «одежда» и «аксессуары» разделялись на два столбца?
2. @JulienLittler Нет проблем. Если это ответило на ваш вопрос, пожалуйста, подумайте о том, чтобы отметить ответ как принятый. Я добавил простой пример того, как сделать простой макет из двух столбцов с помощью flexbox.