Стилизация с помощью CSS - удаление стилей с плавающей запятой

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

-> https://medium.freecodecamp.org/how-to-easily-build-mashables-navigation-bar-with-html-and-css-9e5007af786

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

When using CSS to style the guide reference turning each элемент на блоки, используя свойство дисплей: блок, а затем плавающий их рядом друг с другом. Во многом похоже на следующее:

   nav {
      width: 100%;
      background-color: #0b98de;
    }
      nav a {
        
        display: block;
        text-align:center;
        
        font-family: sans-serif;
        font-size: 9px;
        color: white;
    
        padding-top: 20px;
        padding-right: 10px;
        padding-bottom: 10px;
        padding-left: 10px;
        
        text-decoration: none;   
     }
      nav a:hover {
        
        background-color: #17b0cf;
        
      }
<h1>HTML</h1>
  
 

    <div id = "navigation-bar">
      <header id = "header">
        <nav id = "nav-bar">
          <a href = "#">Tab1</a>
          <a href = "#">Tab2</a>
          <a href = "#">Tab3</a>
          <a href = "#">Tab4</a>
          <a href = "#">Tab5</a>
          <a href = "#">Tab6</a>
          <a href = "#">Tab7</a>
          <a href = "#">Tab8</a>
        </nav>
      </header>
     </div>

Но похоже, что при этом игнорируются свойства в блоке навигация и применяются только свойства в блоке навигация. Для этого примера он оставит панель навигации белой, показывая только черную границу, указанную в блоке навигации. Он игнорирует фон цвет, указанный в блоке навигации, и не распространяется на ширина: 100%. Я пробовал использовать идентификатор ID, а также класс.

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

CSS

nav {
  width: 100%;
  background-color: #0b98de;
}
  nav a {

    display: inline-block;
    float:left;
    border: 1px solid #000;

    font-family: sans-serif;
    font-size: 9px;
    color: white;

    padding-top: 20px;
    padding-right: 10px;
    padding-bottom: 10px;
    padding-left: 10px;

    text-decoration: none;   
 }
  nav a:hover {

    background-color: #17b0cf;

  }

Это потому, что nav имеет нулевую высоту. См. Мой ответ для простого объяснения и исправления.

john c. j. 29.07.2018 19:57
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
0
1
89
4

Ответы 4

То, что у вас есть, сводится к разнице между блочным элементом div и встроенным элементом a, span etc и т. д. Вам фактически не нужны ни float, ни display-inline, поскольку a является встроенным элементом.

После того, как вы добавили display: block, вы заставили все свои встроенные элементы (якоря) вести себя как div ... из-за этого появился float: left, который заставлял их выглядеть строковыми встроенными элементами один слева от другого, но испортил фактическую навигацию. По сути, вы сами создали свою проблему.

Я немного изменил / почистил CSS:

nav {
  background-color: #0b98de;
  padding: 10px 0px 10px 0px;
}

nav a {
  font-family: sans-serif;
  font-size: 9px;
  color: white;
  padding: 15px 10px 10px 10px;
  text-decoration: none;
}

nav a:hover {
  background-color: #17b0cf;
}
<div id = "navigation-bar">
  <header id = "header">
    <nav id = "nav-bar">
      <a href = "#">Tab1</a>
      <a href = "#">Tab2</a>
      <a href = "#">Tab3</a>
      <a href = "#">Tab4</a>
      <a href = "#">Tab5</a>
      <a href = "#">Tab6</a>
      <a href = "#">Tab7</a>
      <a href = "#">Tab8</a>
    </nav>
  </header>
</div>

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

https://codepen.io/anon/pen/xJPmyL

<div id = "navigation-bar">
  <header id = "header">
    <nav id = "nav-bar" class = "clearfix">
      <a href = "#">Tab1</a>
      <a href = "#">Tab2</a>
      <a href = "#">Tab3</a>
      <a href = "#">Tab4</a>
      <a href = "#">Tab5</a>
      <a href = "#">Tab6</a>
      <a href = "#">Tab7</a>
      <a href = "#">Tab8</a>
    </nav>
  </header>
 </div>
.clearfix::after {
    content: "";
    clear: both;
    display: table;
}

Объяснение Clearfix - https://www.w3schools.com/howto/howto_css_clearfix.asp

Надеюсь это поможет.

Я также рекомендую сделать эти ссылки элементами списка, поскольку они являются списком. <ul> <li> <a href = "#"> Tab1 </a> </li> <li> <a href = "#"> Tab2 </a> </li> </ul> и т. д. и т. д.

ConsoleLog 29.07.2018 19:55

Краткий ответ: потому что высота nav равна 0.

Он имеет нулевую высоту, потому что его содержимое перемещается. Плавающие элементы игнорируются при вычислении высоты их родительского элемента.

Хороший способ исправить это - добавить display: flex; к nav. В этом случае вложенные элементы будут автоматически отображаться как изогнутые, а не как плавающие.

Другой вариант - добавить float: left; к nav.

Flex лучше, потому что это современная, очень мощная и гибкая технология. Поплавки - это что-то из каменного века.

Ваш nav рушится на вас, поскольку не указаны ни высота, ни плавучесть. Просто добавьте это на свой nav:

nav {
  width: 100%;
  background-color: #0b98de;

  float: left; /* Either specify a height here or float - otherwise, this nav collapses on you */
}
  nav a {

    display: block;
    float:left;
    border: 1px solid #000;

    font-family: sans-serif;
    font-size: 9px;
    color: white;

    padding-top: 20px;
    padding-right: 10px;
    padding-bottom: 10px;
    padding-left: 10px;

    text-decoration: none;   
 }
  nav a:hover {

    background-color: #17b0cf;

  }

Используя это, вам не нужно беспокоиться о чистом классе, как упоминалось в других ответах - пишите меньше, делайте больше (я знаю, что это слоган jquery, но это также применимо здесь :))

Тогда ваш HTML будет выглядеть так:

<nav>
      <a href = "#">Tab1</a>
      <a href = "#">Tab2</a>
      <a href = "#">Tab3</a>
      <a href = "#">Tab4</a>
      <a href = "#">Tab5</a>
      <a href = "#">Tab6</a>
      <a href = "#">Tab7</a>
      <a href = "#">Tab8</a>
    </nav>

Для nav идентификатор не требуется, и, поскольку у вас не было никакого CSS, примененного для navigation-bar и header, я пошел дальше и удалил это из вашего HTML, но если у вас действительно есть эти идентификаторы в вашем CSS, просто добавьте их повторно ... который будет выглядеть так для вашего HTML тогда:

<div id = "navigation-bar">
  <header id = "header">
    <nav>
      <a href = "#">Tab1</a>
      <a href = "#">Tab2</a>
      <a href = "#">Tab3</a>
      <a href = "#">Tab4</a>
      <a href = "#">Tab5</a>
      <a href = "#">Tab6</a>
      <a href = "#">Tab7</a>
      <a href = "#">Tab8</a>
    </nav>
  </header>
 </div>

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