У меня есть гибкий контейнер с двумя элементами: изображением и элементом div, содержащим текст и поле поиска. Если окно достаточно широкое, я хочу, чтобы текстовый блок отображался справа от изображения, перенося текст и сужая поле поиска по мере необходимости. Если окно недостаточно широкое (как телефон, удерживаемый вертикально), я хочу, чтобы текстовый элемент div отображался под изображением.
Мне удалось выполнить перенос дисплея из стороны в сторону в режим «один поверх другого», но он не пытается сузить текстовое поле до того, как обернет его под изображением.
body {
background-color: #dbd2c3;
font-family: Arial, Helvetica, sans-serif;
font-size: 80%;
}
.hdr-container {
display: flex;
flex-wrap: wrap;
outline: 2px solid #e73;
}
.logo-div {
margin-right: 1em; /* gap for not wrapped */
margin-bottom: 1em; /* gap for wrapped */
outline: 2px solid green;
}
.logo-img {
max-width:100%; /* prevent clipping in narrow viewport */
object-fit: scale-down; /* shrink as needed to maintain max-width */
}
.menu-div {
align-self: center;
outline: 2px solid yellow;
}
.menu-div p {
margin: 0;
outline: 2px solid cyan;
}
.search-div {
margin-top: 1em;
width: 400px;
//min-width: 200px;
}
.search-text {
border-radius: 6px;
}<head>
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<div class = "hdr-container">
<div class = "logo-div">
<img src = "https://picsum.photos/400/175" alt = "header"
class = "logo-img"
title = "home" border = "1">
</div>
<div class = "menu-div">
<p>
<strong>SETLISTS: 
Lorem ipsum |
odor amet |
consectetuer adipiscing elit |
Senectus aliquet |
tempor laoreet
</p>
<p>
GALLERIES:
Lorem ipsum |
odor amet |
consectetuer adipiscing elit |
Senectus aliquet |
tempor laoreet
</p>
<p>
STUFF:
Lorem ipsum |
odor amet |
consectetuer adipiscing elit |
Senectus aliquet |
</strong>
</p>
<div class = "search-div">
<form action = "/scripts/search.pl" method = "post">
<input type = "text" class = "search-text" placeholder = "Search for things . . ." name = "terms">
<button type = "submit">GO
</button>
<a href = "/scripts/power-search.pl" title = "Advanced Search">Advanced Search</a>
</form>
</div>
<p><i>(Search for dates, years, songs, words, etc. Use % as a wildcard. Examples: 5/1/81, 12/31/%, 1972, dark star, midnites)</i></p>
</div>
</div>
<hr>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</body>Я не знаю, есть ли ответ на мой вопрос здесь или нет. Я недостаточно понял решение, чтобы попробовать его, и надеюсь, что моя проблема проще или, по крайней мере, другая.






Вопрос, на который вы ссылаетесь, определенно тот же вопрос. Ответ может сработать, но я согласен, что его сложно понять и это кажется хакерским способом сделать это.
Я бы порекомендовал стилизовать .hdr-container, используя сетку вместо гибкой. Сетка позволяет легко контролировать ширину области просмотра, при которой столбцы будут складываться для просмотра на мобильных устройствах (или ширину, при которой они будут разкладываться для просмотра на рабочем столе), а также легко управлять шириной столбцов (я задал им пропорциональную ширину 1:2). .
Я также удалил некоторые неразрывные пробелы и фиксированную ширину .search-div, чтобы облегчить перенос элементов.
body {
background-color: #dbd2c3;
font-family: Arial, Helvetica, sans-serif;
font-size: 80%;
}
.hdr-container {
display: grid;
gap: 1em;
outline: 2px solid #e73;
}
@media (min-width: 500px) {
.hdr-container {
grid-template-columns: 1fr 2fr;
}
}
.logo-div {
outline: 2px solid green;
}
.logo-img {
width: 100%;
border: 2px solid black;
box-sizing: border-box;
}
.menu-div {
align-self: center;
outline: 2px solid yellow;
}
.menu-div p {
margin: 0;
outline: 2px solid cyan;
}
.search-div {
margin-top: 1em;
}
.search-text {
border-radius: 6px;
}<div class = "hdr-container">
<div class = "logo-div">
<img src = "https://picsum.photos/400/175" class = "logo-img">
</div>
<div class = "menu-div">
<p>
<strong>SETLISTS:</strong>
Lorem ipsum |
odor amet |
consectetuer adipiscing elit |
Senectus aliquet |
tempor laoreet
</p>
<p>
<strong>GALLERIES:</strong>
Lorem ipsum |
odor amet |
consectetuer adipiscing elit |
Senectus aliquet |
tempor laoreet
</p>
<p>
<strong>STUFF:</strong>
Lorem ipsum |
odor amet |
consectetuer adipiscing elit |
Senectus aliquet |
</p>
<div class = "search-div">
<form action = "/scripts/search.pl" method = "post">
<input type = "text" class = "search-text" placeholder = "Search for things . . ." name = "terms">
<button type = "submit">GO
</button>
<a href = "/scripts/power-search.pl" title = "Advanced Search">Advanced Search</a>
</form>
</div>
<p><i>(Search for dates, years, songs, words, etc. Use % as a wildcard. Examples: 5/1/81, 12/31/%, 1972, dark star, midnites)</i></p>
</div>
</div>
<hr>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Эффектный ответ! Правильно, полезно и поучительно. Если вы согласны, не могли бы вы восстановить align-self:center в меню-div, как оно было у меня изначально? Я не думаю, что это что-то повредит.
Конечно, это сделано
Попробуйте добавить
max-width: 100%к.menu-div.