Почему моя сетка не работает, когда мой медиа-запрос активируется? - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь создать простую навигационную панель. Я хотел разместить содержимое <nav> (навигационные ссылки) внутри заголовка, выровненное по lo go (случайное изображение из unspla sh .it). Я хочу, чтобы эта настройка активировалась выше 780 пикселей, поэтому я поместил код в медиа-запрос, но он не работает. Браузер даже не «видит», что я дал ему команду display: grid.

* {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  font-family: Century Gothic, Tahoma, sans-serif;
  font-size: 16px;
}

a {
  color: inherit;
  text-decoration: none;
}

body {
  background: black;
  margin-bottom: 1000px;
}


/* -----DROPDOWN MOBILE MENU----- */

header {
  background: rgba(217, 30, 24, 1);
  position: fixed;
  width: 100vw;
  z-index: 999;
  border: solid white 0px;
  display: flex;
  justify-content: center;
}

header .img {
  width: 10em;
  height: 3em;
  margin: 1em;
  border: solid black 1px;
  transform: scale(1, 1);
  transition: transform ease-in-out 250ms;
  border-radius: 5px;
}

header .img:hover {
  transform: scale(1.025, 1.025);
}

header nav {
  background: rgba(217, 30, 24, .85);
  width: 100vw;
  border: solid white 0px;
  position: absolute;
  top: 100%;
  left: 0;
  display: flex;
  justify-content: center;
}

header nav ul {
  width: 20%;
  border: solid white 0px;
  display: flex;
  flex-flow: column;
  align-items: center;
}

header nav ul li {
  list-style: none;
  color: white;
  padding: .5rem;
}

header nav ul li:hover {
  color: rgba(245, 245, 245, .7);
  cursor: pointer;
}


/* -----QUERY FOR LARGE SCREENS----- */

@media (min-width:780px) {
  header {
    border: solid white 1px;
    display: grid;
    grid-template-columns: 1fr auto 1fr 1fr;
    align-items: center;
  }
  header .img {
    border: solid blac 3px;
    border-radius: 5px;
    width: 10rem;
    height: 3rem;
    transform: scale(1, 1);
    transition: transform ease-in-out 250ms;
    grid-column: 2 / 3;
  }
  header .img:hover {
    transform: scale(1.025, 1.025);
  }
  header nav {
    background: rgba(217, 30, 24, 1);
    border: solid white 1px;
    width: 50vw;
    grid-column: 4 / 5;
  }
  header nav ul {
    display: flex;
    flex-flow: row;
    list-style: none;
    border: solid white 0px;
    width: 100%;
    justify-content: space-around;
    cursor: pointer;
  }
  header nav ul li::before {
    content: '';
    display: block;
    height: 2px;
    width: 0%;
    background: ivory;
    position: absolute;
    bottom: 0px;
    transition: ease-in-out .25s;
    -webkit-transition-duration: .25s;
    -o-transition-duration: .25s;
    -moz-transition-duration: .25s;
  }
  header nav ul li {
    color: white;
    display: flex;
    border: solid black 0px;
    justify-content: center;
    align-items: center;
    transition-duration: .5s;
    -webkit-transition-duration: .5s;
    -o-transition-duration: .5s;
    -moz-transition-duration: .5s;
    position: relative;
    padding: 0;
    padding-bottom: .5rem;
  }
  header nav ul li:hover {
    color: rgba(245, 245, 245, .7);
  }
  header nav ul li:hover::before {
    width: 100%;
  }
}


/* -----END LARGE SCREENS QUERY----- */
<header>
  <a href="#"> <img class="img" src="//unsplash.it/300/100">
  </a>
  <nav>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Products</a></li>
      <li><a href="#">Support us</a></li>
      <li><a href="#">Contacts</a></li>
    </ul>
  </nav>
</header>

1 Ответ

1 голос
/ 25 марта 2020

Ваш <nav> имеет

position: absolute

Как только вы удалите это, ваш <nav> будет go в сетке.

Для решения некоторых других проблем, которые вы упомянули в ваших комментариях, пожалуйста, попробуйте следующее:

Создание контейнера полей, который вы используете вокруг своего сайта, было бы лучше, если бы он содержал ваш сайт, чтобы он не касался краев. Вы можете сделать это, сделав класс с ограниченной шириной, полем: 0 автоматически и настройкой максимальной ширины. Однако учтите, что если поместить его в элемент сетки, он займет одну из дробей.

Я использую следующий маржинальный контейнер на своих сайтах:

.margins-container {
    width: 90%;
    max-width: 1244px;
    margin: 0 auto 0 auto;
    @media (max-width: $tablet) {
         margin: 0 auto 20px auto;
     width: 95%;
     }
}

Однако для Теперь вы можете просто добавить отступ в заголовок. В медиа-запрос добавьте следующее css:

header {
  border: solid white 1px;
  display: flex;
  justify-content: space-between;
  padding: 0 30px;
}

Это исправит элементы, соприкасающиеся с краями. Это также означает, что у вас будет меньше проблем с совместимостью сетки с браузерами, такими как IE. Чтобы узнать больше о flex, это очень подробное руководство: https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Я бы также удалите границу в этом медиазапросе.

header nav {
  background: rgba(217, 30, 24, 1);
  width: 50vw;
}
...