Почему <input type="text" и flex не работают вместе?

Я не понимаю, почему окно поиска становится больше, когда я добавляю display:flex в свой css. Может кто-нибудь сказать мне, почему окно поиска становится больше и как исправить его до нормальной высоты? Я хочу, чтобы панель поиска и значок поиска также были склеены. Спасибо вам за помощь!

* {
  font-family: "poppins";
  margin: 0;
  padding: 0;
  text-decoration: none;
  list-style: none;
  box-sizing: border-box;
}

header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
<!DOCTYPE html>
<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <link rel = "stylesheet" href = "css/style2.css" />
    <link
      href = "https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap"
      rel = "stylesheet"
    />
    <link
      rel = "stylesheet"
      href = "https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"
      integrity = "sha384-ejwKkLla8gPP8t2u0eQyL0Q/4ItcnyveF505U0NIobD/SMsNyXrLti6CWaD0L52l"
      crossorigin = "anonymous"
    />
    <title>Document</title>
  </head>
  <body>
    <header>
      <a href = "#">My Logo</a>
      <ul class = "navigation">
        <a href = "#"><li>Home</li></a>
        <a href = "#"><li>TV Shows</li></a>
        <a href = "#"><li>Movies</li></a>
        <a href = "#"><li>Latest</li></a>
        <a href = "#"><li>My List</li></a>
      </ul>
      <input type = "text" placeholder = "Search" />
      <i class = "bi bi-search"></i>
    </header>
  </body>
</html>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
60
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

* {
  font-family: "poppins";
  margin: 0;
  padding: 0;
  text-decoration: none;
  list-style: none;
  box-sizing: border-box;
}

header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-between;
}

header .navigation {
  display: flex;
}

header .navigation li {
  margin: 0 .3rem;
}
<!DOCTYPE html>
<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <link rel = "stylesheet" href = "css/style2.css" />
    <link
      href = "https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap"
      rel = "stylesheet"
    />
    <link
      rel = "stylesheet"
      href = "https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"
      integrity = "sha384-ejwKkLla8gPP8t2u0eQyL0Q/4ItcnyveF505U0NIobD/SMsNyXrLti6CWaD0L52l"
      crossorigin = "anonymous"
    />
    <title>Document</title>
  </head>
  <body>
    <header>
      <a href = "#">My Logo</a>
      <ul class = "navigation">
        <a href = "#"><li>Home</li></a>
        <a href = "#"><li>TV Shows</li></a>
        <a href = "#"><li>Movies</li></a>
        <a href = "#"><li>Latest</li></a>
        <a href = "#"><li>My List</li></a>
      </ul>
      <input type = "text" placeholder = "Search" />
      <i class = "bi bi-search"></i>
    </header>
  </body>
</html>

Вы проверили свой собственный фрагмент? Я сомневаюсь, что испортить весь макет - это то, чего хочет достичь ОП.

tacoshy 08.05.2022 02:44

Как сейчас написано, ваш ответ неясен. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 09.05.2022 15:13

Вы можете указать align-items

Может быть, вы хотите flex-start вместо stretch по умолчанию.

align-items - CSS: Каскадные таблицы стилей | МДН

ввод занимает всю высоту flexbox из-за значения растяжения по умолчанию для поперечной оси. Чтобы предотвратить это, вам нужно задать вводу определенную высоту, например min-content. В качестве альтернативы вы можете предотвратить это, добавив align-items: flex-start в flex-контейнер.

Использование чего-то другого, кроме стандартного align-items: strech;:

* {
  margin: 0;
  padding: 0;
  text-decoration: none;
  list-style: none;
  box-sizing: border-box;
}

header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
}
<header>
  <a href = "#">My Logo</a>
  <ul class = "navigation">
    <a href = "#">
      <li>Home</li>
    </a>
    <a href = "#">
      <li>TV Shows</li>
    </a>
    <a href = "#">
      <li>Movies</li>
    </a>
    <a href = "#">
      <li>Latest</li>
    </a>
    <a href = "#">
      <li>My List</li>
    </a>
  </ul>
  <input type = "text" placeholder = "Search" />
  <i class = "bi bi-search"></i>
</header>

Предоставление ввода определенной высоты:

* {
  font-family: "poppins";
  margin: 0;
  padding: 0;
  text-decoration: none;
  list-style: none;
  box-sizing: border-box;
}

header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-between;
}

input {
  height: min-content;
}
<header>
  <a href = "#">My Logo</a>
  <ul class = "navigation">
    <a href = "#">
      <li>Home</li>
    </a>
    <a href = "#">
      <li>TV Shows</li>
    </a>
    <a href = "#">
      <li>Movies</li>
    </a>
    <a href = "#">
      <li>Latest</li>
    </a>
    <a href = "#">
      <li>My List</li>
    </a>
  </ul>
  <input type = "text" placeholder = "Search" />
  <i class = "bi bi-search"></i>
</header>

Хорошо. а где значок поиска?!

Arman Ebrahimi 08.05.2022 06:22

он не отображается из-за удаленных зависимостей начальной загрузки. Я урезал код до минимально-воспроизводимого. Не было необходимости включать весь головной элемент

tacoshy 08.05.2022 18:28
Ответ принят как подходящий

Вы можете обернуть теги input и i в div:

* {
  font-family: "poppins";
  margin: 0;
  padding: 0;
  text-decoration: none;
  list-style: none;
  box-sizing: border-box;
}

header {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
<!DOCTYPE html>
<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <link rel = "stylesheet" href = "css/style2.css" />
    <link
      href = "https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap"
      rel = "stylesheet"
    />
    <link
      rel = "stylesheet"
      href = "https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"
      integrity = "sha384-ejwKkLla8gPP8t2u0eQyL0Q/4ItcnyveF505U0NIobD/SMsNyXrLti6CWaD0L52l"
      crossorigin = "anonymous"
    />
    <title>Document</title>
  </head>
  <body>
    <header>
      <a href = "#">My Logo</a>
      <ul class = "navigation">
        <a href = "#"><li>Home</li></a>
        <a href = "#"><li>TV Shows</li></a>
        <a href = "#"><li>Movies</li></a>
        <a href = "#"><li>Latest</li></a>
        <a href = "#"><li>My List</li></a>
      </ul>
      <div>
      <input type = "text" placeholder = "Search" />
      <i class = "bi bi-search"></i>
      </div>
    </header>
  </body>
</html>

это происходит из-за того, что по умолчанию свойство flex align-items настроено на растяжение, чтобы избежать этой проблемы, вы можете установить высоту в поле ввода или изменить значение свойства align-items на flex-start.

проверить https://www.w3schools.com/cssref/css3_pr_align-items.asp

Это происходит потому, что ваш класс навигации имеет большую высоту, а по умолчанию высота элемента ввода равна высоте контейнера.

Собираем все вместе: Я понял, что к этому есть 3 решение.

  1. Либо вы пишете высота ввода: минимальное содержание;

  2. сделайте .навигация равным гибкий дисплей, что уменьшит высоту этого компонента.

  3. Добавьте align-items : flex-start или центр к элементу заголовок, что уменьшит высоту элемента ввода.

input{
   height: min-content;
}
.navigation{
   display:flex;
}
header{
   ...other styles of this element 
   align-items:flex-start;
}

Вы можете использовать любой из вышеперечисленных стилей для решения вашей проблемы.

Другие вопросы по теме