Меню навигации с 100 % шириной

Я создаю в настоящее время меню навигации responsive с HTML5 и CSS. Для этого, моя идея, которая в версии рабочего стола меню полное, в full width, и что в подвижной версии явился label с checkbox, который открывает или закрывает меню в responsive.

Проблема состоит в том, что меню не занимает мне полную ширину страницы (на любом экране. У меня есть два в настоящее время, одна 1440px и другая 1920px для доказательств).

Я оставляю код далее:

Заметь: изображение - placehold 350 x 100 пикселей

body {
  margin: 0px;
}
/*Strip the ul of padding and list styling*/

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  position: absolute;
}
/*Hacer que la imagen no se mueva */

#img-nav {
  padding-top: 0px !important;
}
/*Create a horizontal list*/

li {
  display: inline-block;
  float: left;
}
/*Style for menu links*/

li a {
  display: block;
  min-width: 200px;
  height: 70px;
  text-align: center;
  line-height: 50px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  color: #fff;
  background: #2f3036;
  text-decoration: none;
  padding-top: 30px;
}
/*Hover state for top level links*/

li:hover a {
  background: #19c589;
}
/*Style for dropdown links*/

li:hover ul a {
  background: #f3f3f3;
  color: #2f3036;
  height: 40px;
  line-height: 40px;
}
/*Hover state for dropdown links*/

li:hover ul a:hover {
  background: #19c589;
  color: #fff;
}
/*Hide dropdown links until they are needed*/

li ul {
  display: none;
}
/*Make dropdown links vertical*/

li ul li {
  display: block;
  float: none;
}
/*Prevent text wrapping*/

li ul li a {
  width: auto;
  min-width: 100px;
  padding: 0 20px;
}
/*Display the dropdown on hover*/

ul li a:hover + .hidden,
.hidden:hover {
  display: block;
}
/*Style 'show menu' label button and hide it by default*/

.show-menu {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  text-decoration: none;
  color: #fff;
  background: #19c589;
  text-align: center;
  padding: 10px 0;
  display: none;
}
/*Hide checkbox*/

input[type=checkbox] {
  display: none;
}
/*Show menu when invisible checkbox is checked*/

input[type=checkbox]:checked ~ #menu {
  display: block;
}
/*Responsive Styles*/

@media screen and (max-width: 760px) {
  /*Make dropdown links appear inline*/
  ul {
    position: static;
    display: none;
  }
  /*Create vertical spacing*/
  li {
    margin-bottom: 1px;
  }
  /*Make all menu links full width*/
  ul li,
  li a {
    width: 100%;
  }
  /*Display 'show menu' link*/
  .show-menu {
    display: block;
  }
  #img-nav {
    display: none;
  }
}
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>CSS Only Navigation Menu</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="css/home.css">
</head>

<body>
  <nav>
    <label for="show-menu" class="show-menu">Show Menu</label>
    <input type="checkbox" id="show-menu" role="button">
    <ul id="menu">
      <li>
        <a href="#" id="img-nav">
          <img src="images/nav/logoplacehold.png" alt="">
        </a>
      </li>
      <li><a href="#">Inicio</a>
      </li>
      <li>
        <a href="#">Aula Virtual</a>
        <ul class="hidden">
          <li><a href="#">Test Online</a>
          </li>
          <li><a href="#">Test DGT</a>
          </li>
        </ul>
      </li>
      <li><a href="#">Resultado Teórico</a>
      </li>
      <li><a href="#">Nuestros Vehículos</a>
      </li>
      <li><a href="#">Permisos</a>
      </li>
    </ul>
  </nav>
</body>

</html>
3
задан 16.08.2016, 11:28
2 ответа

Прямо сейчас список не занимает 100 %, так что первое состояло бы в том, чтобы способствовать тому, чтобы он занял всю ширину окна:

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  position: absolute;
  width: 100%; /* añade esto */
}

С этим список займет уже всю ширину, сейчас, когда ты хочешь дело в том, что каждый элемент списка был распространен сходным способом. Для этого ты можешь делать, как предлагает Хосе ФГ в Вашем ответе и делать один calc:

li {
  display: inline-block;
  float: left;
  width: calc(100% / 6); /* añade esto, se divide por 6 porque hay 6 elementos */
}

Код остался бы таким:

body {
  margin: 0px;
}
/*Strip the ul of padding and list styling*/

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  position: absolute;
  width: 100%;
}
/*Hacer que la imagen no se mueva */

#img-nav {
  padding-top: 0px !important;
}
/*Create a horizontal list*/

li {
  display: inline-block;
  float: left;
  width: calc(100% / 6);
}
/*Style for menu links*/

li a {
  display: block;
  min-width: 200px;
  height: 70px;
  text-align: center;
  line-height: 50px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  color: #fff;
  background: #2f3036;
  text-decoration: none;
  padding-top: 30px;
}
/*Hover state for top level links*/

li:hover a {
  background: #19c589;
}
/*Style for dropdown links*/

li:hover ul a {
  background: #f3f3f3;
  color: #2f3036;
  height: 40px;
  line-height: 40px;
}
/*Hover state for dropdown links*/

li:hover ul a:hover {
  background: #19c589;
  color: #fff;
}
/*Hide dropdown links until they are needed*/

li ul {
  display: none;
}
/*Make dropdown links vertical*/

li ul li {
  display: block;
  float: none;
}
/*Prevent text wrapping*/

li ul li a {
  width: auto;
  min-width: 100px;
  padding: 0 20px;
}
/*Display the dropdown on hover*/

ul li a:hover + .hidden,
.hidden:hover {
  display: block;
}
/*Style 'show menu' label button and hide it by default*/

.show-menu {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  text-decoration: none;
  color: #fff;
  background: #19c589;
  text-align: center;
  padding: 10px 0;
  display: none;
}
/*Hide checkbox*/

input[type=checkbox] {
  display: none;
}
/*Show menu when invisible checkbox is checked*/

input[type=checkbox]:checked ~ #menu {
  display: block;
}
/*Responsive Styles*/

@media screen and (max-width: 760px) {
  /*Make dropdown links appear inline*/
  ul {
    position: static;
    display: none;
  }
  /*Create vertical spacing*/
  li {
    margin-bottom: 1px;
  }
  /*Make all menu links full width*/
  ul li,
  li a {
    width: 100%;
  }
  /*Display 'show menu' link*/
  .show-menu {
    display: block;
  }
  #img-nav {
    display: none;
  }
}
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>CSS Only Navigation Menu</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="css/home.css">
</head>

<body>
  <nav>
    <label for="show-menu" class="show-menu">Show Menu</label>
    <input type="checkbox" id="show-menu" role="button">
    <ul id="menu">
      <li>
        <a href="#" id="img-nav">
          <img src="images/nav/logoplacehold.png" alt="">
        </a>
      </li>
      <li><a href="#">Inicio</a>
      </li>
      <li>
        <a href="#">Aula Virtual</a>
        <ul class="hidden">
          <li><a href="#">Test Online</a>
          </li>
          <li><a href="#">Test DGT</a>
          </li>
        </ul>
      </li>
      <li><a href="#">Resultado Teórico</a>
      </li>
      <li><a href="#">Nuestros Vehículos</a>
      </li>
      <li><a href="#">Permisos</a>
      </li>
    </ul>
  </nav>
</body>

</html>

Сейчас, если ты хочешь сделать что-то сходным, но число меню может меняться, тогда это решение может быть беспокойством (потому что ты был бы должен обновлять CSS, если они добавляют / удаляют выборы меню).

Другой выбор, который у тебя есть, состоял бы в том, чтобы использовать flex. Таким образом меню приспособятся автоматически к ширине отца независимо от Вашего числа, а следовательно код подаст тебя независимо от числа выборов, которые у тебя будут:

ul {
    display:flex;
    width:100%;
}

ul li {
    display:flex;
    flex:1;
}

ul li a {
    width:100%;
}

Ты был бы должен делать какие-то настройки для субменю, я сделал какие-то, но также они не являются чудесными. И результат оказался бы таким:

body {
  margin: 0px;
}
/*Strip the ul of padding and list styling*/

ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  position: absolute;
}
/*Hacer que la imagen no se mueva */

#img-nav {
  padding-top: 0px !important;
}
/*Create a horizontal list*/

li {
  display: inline-block;
  float: left;
}
/*Style for menu links*/

li a {
  display: block;
  min-width: 200px;
  height: 70px;
  text-align: center;
  line-height: 50px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  color: #fff;
  background: #2f3036;
  text-decoration: none;
  padding-top: 30px;
}
/*Hover state for top level links*/

li:hover a {
  background: #19c589;
}
/*Style for dropdown links*/

li:hover ul a {
  background: #f3f3f3;
  color: #2f3036;
  height: 40px;
  line-height: 40px;
}
/*Hover state for dropdown links*/

li:hover ul a:hover {
  background: #19c589;
  color: #fff;
}
/*Hide dropdown links until they are needed*/

li ul {
  display: none;
}
/*Make dropdown links vertical*/

li ul li {
  display: block;
  float: none;
}
/*Prevent text wrapping*/

li ul li a {
  width: auto;
  min-width: 100px;
  padding: 0 20px;
}
/*Display the dropdown on hover*/

ul li a:hover + .hidden,
.hidden:hover {
  display: block;
  top: 100px;
  min-width: 200px;
  width: auto;
}
/*Style 'show menu' label button and hide it by default*/

.show-menu {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  text-decoration: none;
  color: #fff;
  background: #19c589;
  text-align: center;
  padding: 10px 0;
  display: none;
}
/*Hide checkbox*/

input[type=checkbox] {
  display: none;
}
/*Show menu when invisible checkbox is checked*/

input[type=checkbox]:checked ~ #menu {
  display: block;
}
/*Responsive Styles*/

ul {
    display:flex;
    width:100%;
}

ul li {
    display:flex;
    flex:1;
}

ul li a {
    width:100%;
}

@media screen and (max-width: 760px) {
  /*Make dropdown links appear inline*/
  ul {
    position: static;
    display: none;
  }
  /*Create vertical spacing*/
  li {
    margin-bottom: 1px;
  }
  /*Make all menu links full width*/
  ul li,
  li a {
    width: 100%;
    display: block;
  }
  /*Display 'show menu' link*/
  .show-menu {
    display: block;
  }
  #img-nav {
    display: none;
  }
}
<!doctype html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>CSS Only Navigation Menu</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="css/home.css">
</head>

<body>
  <nav>
    <label for="show-menu" class="show-menu">Show Menu</label>
    <input type="checkbox" id="show-menu" role="button">
    <ul id="menu">
      <li>
        <a href="#" id="img-nav">
          <img src="images/nav/logoplacehold.png" alt="">
        </a>
      </li>
      <li><a href="#">Inicio</a>
      </li>
      <li>
        <a href="#">Aula Virtual</a>
        <ul class="hidden">
          <li><a href="#">Test Online</a>
          </li>
          <li><a href="#">Test DGT</a>
          </li>
        </ul>
      </li>
      <li><a href="#">Resultado Teórico</a>
      </li>
      <li><a href="#">Nuestros Vehículos</a>
      </li>
      <li><a href="#">Permisos</a>
      </li>
    </ul>
  </nav>
</body>

</html>
4
ответ дан 24.11.2019, 13:38
  • 1
    Очень хорошая твой ответ! –  Adriana Hernández 16.08.2016, 16:25
  • 2
    Я попытался делать calc, как ты сказал, и все функционирует правильно. problemilla быть и # 237; в submen и # 250; что быть и # 237; в м и # 225; s сложный для того, чтобы быть вставленным. Оно не функционирует, попробовав делать calc (100 %/6) (я это сделал для того, чтобы выходило то же средство, которое достигает). Хороший soluci и # 243; n быть и # 237; чтобы применяться к submen и # 250; один display:flex, чтобы показывать два объединенных элемента (хотя во время responsive будут видны м и # 225; s большой, что элементы наверху, хотя он не остается плохо совсем). –  ramon guardia 18.08.2016, 14:34

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

Ты можешь делать что-то как:

width: calc(100% / N); // N es el número de elementos de la lista.

Так он приспособится всегда к ширине экрана.

1
ответ дан 24.11.2019, 13:38