Использование CSS Flex и space-evenly не работает

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

Основная проблема в том, что justify-content: space-evenly внутри моего ul не действует, и я не понимаю, почему. Из всего, что я видел, это правильно и должно работать, я даже видел людей, использующих это в учебниках в одной и той же структуре.

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

Любые идеи, что я делаю неправильно здесь?

CSS

h1 {
    font-size: 6em;
    text-align: center;
}
nav {
    font-size: 1.5em;
    display: flex;
    justify-content: space-between;
}

ul {
    border: 1px solid red;
    display: flex;
    flex-grow: 1;
    justify-content: space-evenly;
    max-width: 50%;
}

ul,li {
    display: inline;
    margin: 0;
    padding: 0;
}

HTML

<html lang = "en">

<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Media Queries</title>
    <link href = "https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&display=swap" rel = "stylesheet">

    <link rel = "stylesheet" href = "app.css">
</head>

<body>
    <nav>
        <a href = "#home">Home</a>
        <ul>

            <li>
                <a href = "#Home">Learn More</a>
            </li>
            <li>
                <a href = "#Home">About</a>
            </li>
            <li>
                <a href = "#Home">Contact</a>
            </li>

        </ul>
        <a href = "#signup">Sign Up</a>
    </nav>
    <h1>Flex Box
</h1>

</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
54
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Здесь вы можете попробовать эту логику, она работает:

<html lang = "en">
  <head>
    <meta charset = "UTF-8" />
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0" />
    <title>Media Queries</title>
    <link
      href = "https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&display=swap"
      rel = "stylesheet"
    />

    <link rel = "stylesheet" href = "app.css" />
  </head>

  <style>
    h1 {
      font-size: 6em;
      text-align: center;
    }
    nav {
      font-size: 1.5em;
      display: flex;
      justify-content: space-between;
    }

    ul {
      border: 1px solid red;
      max-width: 50%;
    }

    ul,
    li {
      display: inline;
      margin: 0;
      padding: 0;
    }

    ul {
      display: flex;
      flex-grow: 1;
      justify-content: space-evenly;
    }
  </style>

  <body>
    <nav>
      <a href = "#home">Home</a>
      <ul>
        <li>
          <a href = "#Home">Learn More</a>
        </li>
        <li>
          <a href = "#Home">About</a>
        </li>
        <li>
          <a href = "#Home">Contact</a>
        </li>
      </ul>
      <a href = "#signup">Sign Up</a>
    </nav>
    <h1>Flex Box</h1>
  </body>
</html>

Вам нужно удалить «display: inline» из селекторов ul и li.

ul,li {
    margin: 0;
    padding: 0;
}

(и добавить li {display: inline;})

Cédric 02.12.2022 09:16

вы перезаписываете display: flex своего ul строкой кода под ней (display: inline). вот решение ниже с комментариями. используйте list-style: none, чтобы избавиться от маркеров на li

h1 {
    font-size: 6em;
    text-align: center;
}
nav {
    font-size: 1.5em;
    display: flex;
    justify-content: space-between;
}

ul {
    border: 1px solid red;
    display: flex;
    flex-grow: 1;
    justify-content: space-evenly;
    max-width: 50%;
}

ul,li {
  /* -- remove the below line. you're over-writing the display of ul
    display: inline;
    */
    
    /* -- add this below line to get rid of the bullet points */
    list-style: none;
    
    margin: 0;
    padding: 0;
}
<html lang = "en">

<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Media Queries</title>
    <link href = "https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&display=swap" rel = "stylesheet">

    <link rel = "stylesheet" href = "app.css">
</head>

<body>
    <nav>
        <a href = "#home">Home</a>
        <ul>

            <li>
                <a href = "#Home">Learn More</a>
            </li>
            <li>
                <a href = "#Home">About</a>
            </li>
            <li>
                <a href = "#Home">Contact</a>
            </li>

        </ul>
        <a href = "#signup">Sign Up</a>
    </nav>
    <h1>Flex Box
</h1>

</body>

</html>
Ответ принят как подходящий

Вы устанавливаете display: flex с помощью селектора ul, но после этого у вас есть другой селектор ul -> ul,li, где вы устанавливаете display: inline
Таким образом, вы переопределяете свое предыдущее свойство отображения

ul {
    display: flex;
    ...
}

ul,li {
    display: inline;
    ...
}

Итак, вы должны изменить второй селектор. Удалите ul из него.
Кроме того, элемент ul по умолчанию имеет отступ, удалите его с помощью padding: 0; в селекторе ul, чтобы он действительно располагался равномерно.

См. ниже пример, ваш space-evenly работает здесь

h1 {
    font-size: 6em;
    text-align: center;
}
nav {
    font-size: 1.5em;
    display: flex;
    justify-content: space-between;
}

ul {
    border: 1px solid red;
    display: flex;
    flex-grow: 1;
    justify-content: space-evenly;
    max-width: 50%;
    padding: 0;
}

li {
    display: inline;
    margin: 0;
    padding: 0;
}
<html lang = "en">

<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    <title>Media Queries</title>
    <link href = "https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&display=swap" rel = "stylesheet">

    <link rel = "stylesheet" href = "app.css">
</head>

<body>
    <nav>
        <a href = "#home">Home</a>
        <ul>

            <li>
                <a href = "#Home">Learn More</a>
            </li>
            <li>
                <a href = "#Home">About</a>
            </li>
            <li>
                <a href = "#Home">Contact</a>
            </li>

        </ul>
        <a href = "#signup">Sign Up</a>
    </nav>
    <h1>Flex Box
</h1>

</body>

тег не работает с display:flex; как использовали где-то. Вот почему вам нужно заставить тег ul использовать flex. Вы должны просто прямо--

ul {
    border: 1px solid red;
    display: flex !important;
    flex-grow: 1;
    justify-content: space-evenly;
    max-width: 50%;
}

вы должны использовать !important, и все будет работать так, как вы хотели.

Вам следует избегать использования important, когда это возможно, как вы можете видеть в других ответах, вы можете легко решить проблему без него.

Cédric 02.12.2022 09:21

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