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

Каждый раз, когда я практикую CSS макеты, каждый раз, когда я изменяю размер окна браузера, экран в правой части сайта постоянно обрезается, поэтому будет пустое пространство с белым фоном. Может ли кто-нибудь помочь мне определить проблему, чтобы я мог избежать повторения этой проблемы? Вот код HTML:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  color: #fff;
}

header {
  background: url(http://www.moirmedia.co.uk/wp-content/uploads/2016/05/Backgroundlow.jpg) no-repeat center center/cover;
  background-position: inherit;
  height: 165vh;
}

nav {
  background: black;
  padding: 1.5rem 1rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

nav h2 {
  text-transform: uppercase;
  font-size: 2.5rem;
  padding-right: 2rem;
}

nav ul {
  display: flex;
}

nav ul li {
  list-style: none;
  position: relative;
  right: 5rem;
  padding: 0 4rem;
  font-size: 1.2rem;
}

nav ul li a {
  text-decoration: none;
}

.hero-text {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  height: 100%;
}

.hero-text h1 {
  font-size: 4rem;
  padding: 1rem;
}

.hero-text p {
  font-size: 1.3rem;
  text-align: justify;
}
<header>
  <nav>
    <h2 class="logo">Logo</h2>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Portfolio</a></li>
      <li><a href="#">Services</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>
  <div class="hero-text">
    <h1>Banner Text Heading</h1>
    <p>Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum <br> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum <br> Lorem ipsum</p>
  </div>
</header>

Ответы [ 2 ]

1 голос
/ 08 января 2020

Замените ваш css код из этого

nav ul {
  display: flex;
}

nav ul li {
  list-style: none;
  position: relative;
  right: 5rem;
  padding: 0 4rem;
  font-size: 1.2rem;
}

на другой

nav ul {
  display: flex;
  flex-wrap: wrap;
}

nav ul li {
  list-style: none;
  position: relative;
  padding: 0 2rem;
  font-size: 1.2rem;
}
0 голосов
/ 08 января 2020

Стили padding и right, которые вы установили для nav ul li pu sh содержимого вне родительского контейнера. Добавление некоторых отзывчивых точек останова с медиа-запросами решит вашу проблему и даст вам больший контроль над макетом при разных разрешениях экрана. В MDN есть статья Руководство для начинающих по медиа-запросам , содержащее дополнительную информацию по медиа-запросам.

Ниже приведен пример использования медиа-запросов с вашим кодом. Обратите внимание, что каждая точка останова указала значение padding-right, которое может потребоваться настроить так, чтобы ваш контент соответствовал ожидаемому. Тонкая настройка может быть процессом. Я использовал точки останова от Типичные точки останова устройства в качестве хорошей отправной точки.

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  color: #fff;
}

header {
  background: url(http://www.moirmedia.co.uk/wp-content/uploads/2016/05/Backgroundlow.jpg) no-repeat center center/cover;
  background-position: inherit;
  height: 165vh;
  width: 100%;
}

nav {
  background: black;
  padding: 1.5rem 1rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 100%;
}

nav h2 {
  text-transform: uppercase;
  font-size: 2.5rem;
  padding-right: 2rem;
}

nav ul {
  display: flex;
}

nav ul li {
  list-style: none;
  position: relative;
  padding: 0 0.5rem;
  font-size: 1.2rem;
}

nav ul li a {
  text-decoration: none;
}

.hero-text {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  height: 100%;
}

.hero-text h1 {
  font-size: 4rem;
  padding: 1rem;
}

.hero-text p {
  font-size: 1.3rem;
  text-align: justify;
}

/* Extra small devices (phones, 600px and down) */
@media only screen and (max-width: 600px) {
  nav ul li {
    padding-right: 0.5rem;
  }
}

/* Small devices (portrait tablets and large phones, 600px and up) */
@media only screen and (min-width: 600px) {
  nav ul li {
    padding-right: 0.8rem;
  }
}

/* Medium devices (landscape tablets, 768px and up) */
@media only screen and (min-width: 768px) {
  nav ul li {
    padding-right: 1.8rem;
  }
}

/* Large devices (laptops/desktops, 992px and up) */
@media only screen and (min-width: 992px) {
  nav ul li {
    padding-right: 3rem;
  }
}

/* Extra large devices (large laptops and desktops, 1200px and up) */
@media only screen and (min-width: 1200px) {
  nav ul li {
    right: 5rem;
    padding-right: 4rem;
  }
}
<header>
  <nav>
    <h2 class="logo">Logo</h2>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Portfolio</a></li>
      <li><a href="#">Services</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>
  <div class="hero-text">
    <h1>Banner Text Heading</h1>
    <p>Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum <br> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum <br> Lorem ipsum</p>
  </div>
</header>

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

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  color: #fff;
}

header {
  background: url(http://www.moirmedia.co.uk/wp-content/uploads/2016/05/Backgroundlow.jpg) no-repeat center center/cover;
  background-position: inherit;
  height: 165vh;
  width: 100%;
}

nav {
  background: black;
  padding: 1.5rem 1rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
  width: 100%;
}

nav h2 {
  text-transform: uppercase;
  font-size: 2.5rem;
  padding-right: 2rem;
}

nav ul {
  display: flex;
  flex: 1;
  justify-content: flex-end;
}

nav ul li {
  list-style: none;
  position: relative;
  font-size: 1.2rem;
}

nav ul li a {
  text-decoration: none;
  padding: 1rem 0.5rem;
}

nav ul li a:hover {
  text-decoration: underline;
}

.hero-text {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  height: 100%;
}

.hero-text h1 {
  font-size: 4rem;
  padding: 1rem;
}

.hero-text p {
  font-size: 1.3rem;
  text-align: justify;
}


/* Medium devices (landscape tablets, 768px and up) */

@media only screen and (min-width: 768px) {
  nav ul {
    justify-content: space-evenly;
  }
  nav ul li a {
    padding: 1rem;
  }
}
<header>
  <nav>
    <h2 class="logo">Logo</h2>
    <ul>
      <li><a href="#">Home</a></li>
      <li><a href="#">About</a></li>
      <li><a href="#">Portfolio</a></li>
      <li><a href="#">Services</a></li>
      <li><a href="#">Contact</a></li>
    </ul>
  </nav>
  <div class="hero-text">
    <h1>Banner Text Heading</h1>
    <p>Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum <br> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum <br> Lorem ipsum</p>
  </div>
</header>

Любой из этих вариантов по-прежнему не помещает все ваши элементы nav в одну строку на небольшом экране, например на мобильных устройствах. Я предлагаю вам изучить альтернативные шаблоны навигации , такие как складное меню, или даже просто обернуть свой контент с помощью flex-wrap: wrap;, как @ Yudiz_Webdesign отметил в своем ответе .

...