Как я могу исправить среднюю колонку без заполнения?

Я делаю сайт-подражатель Drudge Report для практики.

Во время кодирования я заметил, что заполнение не работает в среднем столбце. Рядом с <hr> / разделительными линиями нет пробелов, что очень портит общий вид.

a {
  color: black;
}

.container {
  font-size: 12.5px;
}

.top-list ul {
  margin: 0;
  margin-top: 70px;
  padding: 0;
  font-family: COURIER, sans-serif;
  font-weight: bolder;
  list-style: none;
  text-decoration: underline;
}

.top-list li:nth-child(3) a {
  color: red;
  text-decoration: underline;
  text-decoration-color: red;
}

.top-list li:nth-child(10) a {
  color: red;
  text-decoration: underline;
  text-decoration-color: red;
}

.main-image {
  margin-top: 30px;
  text-align: center;
}

.middle-text {
  font-family: ARIAL, VERDANA, HELVETICA;
  font-weight: bold;
  text-align: center;
  text-decoration: underline;
}

.middle-text p {
  margin: 0px;
  padding: 0px;
  font-size: 47px;
}

.middle-text img {
  margin-bottom: 45px;
}

.left-column {
  float: left;
  width: 33%;
  padding-right: 5px;
  font-family: COURIER, sans-serif;
  text-decoration: underline;
  font-weight: bolder;
  border-right: 1px solid #000;
  height: 2460px;
}

.left-column img {
  width: 200px;
}

.middle-column {
  text-align: center;
  width: 33%;
  padding-left: 5px;
  padding-right: 5px;
  font-family: COURIER, sans-serif;
  text-decoration: underline;
  font-weight: bolder;
}

.middle-column img {
  width: 200px;
}

.right-column {
  float: right;
  width: 33%;
  padding-left: 5px;
  font-family: COURIER, sans-serif;
  text-decoration: underline;
  font-weight: bolder;
  border-left: 1px solid #000;
  height: 2460px;
}

.right-column img {
  width: 200px;
}
<!-- Left Column -->

<div class = "left-column">
  <div class = "container">
    <a href = "http://www.zerohedge.com/">ZERO HEDGE</a>
    <hr>
  </div>
</div>

<!-- Right Column -->

<div class = "right-column">
  <div class = "container">
    <img src = "images/people.jpg">
    <p><a href = "https://apnews.com/article/donald-trump-pandemics-europe-basketball-meghan-markle-abc35f110e954524437eb7142912cd6a">In year dominated by pandemic, many other dramas unfolded...</a></p>
    <hr>
  </div>
</div>

<!-- Middle Column -->

<div class = "middle-column">
  <div class = "container">
    <img src = "images/person.jpg" alt = "Person">
    <hr>
    <p><a href = "https://www.independent.co.uk/news/world/americas/virgin-galactic-space-plane-test-abort-b1771292.html">GALACTIC forced to abort key test flight of space plane...</a></p>
    <p><a href = "https://apnews.com/article/space-tourism-new-mexico-us-news-coronavirus-pandemic-bccddfbcb8019dd7e3a58c320d5f79c4"><i>Rocket motor fails to ignite...</i></a></p>
  </div>
</div>

Полный HTML-код можно найти на PasteBin.

Синтаксическая ошибка в text-align: center width: 33%;. Не хватает точки с запятой.

Sebastian Simon 13.12.2020 01:10

Хм.. это, кажется, ломает его больше. Теперь средний текст идет ниже левого столбца и располагается по центру, а не по центру, но текст начинается слева (если это имеет смысл). Как бы мне это исправить?

69lol12345 13.12.2020 01:13

Пожалуйста, опубликуйте минимальный воспроизводимый пример. HTML всегда нужен для CSS.

Sebastian Simon 13.12.2020 01:17

Отредактировал исходный пост, чтобы добавить HTML, который вызывает это.

69lol12345 13.12.2020 01:27

почему вместо css-grid используется такая древняя техника проектирования? Более простое, чистое и современное решение.

tacoshy 13.12.2020 01:39

Я действительно не уверен, каков ожидаемый результат. Куда должен идти раздел «Персона»? В любом случае, с float трудно иметь дело; float: left;, float: right; и text-align: center; не соответствуют левому, правому и среднему столбцам соответственно. Вам понадобится float: left; для всех трех столбцов и иметь ширину 33 % за вычетом границ или отступов, если вы не используете правильный box-sizing, если вы не используете очень старый браузер… Есть лучшие альтернативы, например columns, Flex, Сетка.

Sebastian Simon 13.12.2020 01:43
Улучшение производительности загрузки с помощью 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
6
228
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Похоже, HTML/CSS выше использует свойство CSS float для создания макета из 3 столбцов.

Это старый и неэффективный способ (Flexbox предпочтительнее для колонок, Grid — для более сложных макетов).

Предупреждение об использовании float заключается в том, что middle-column не должно быть установлено width, а должны быть margin-left и margin-right, которые соответствуют размерам левого и правого столбцов. Вот пример.

.middle-column {
  /* width: 33%; do not apply width, it would not fit */
  margin-left: 33%; /* skip over left column */
  margin-right: 33%; /* skip over right column */
}

Приведенный выше стиль должен решить проблему. Но я бы порекомендовал посмотреть руководство по Flexbox.

Flexbox может справиться с этим и другими вариантами использования. Он хорошо поддерживается текущими браузерами.

Вот макет из 3 столбцов с использованием Flexbox:

.flex-row {
  display: flex;
  flex-direction: row;
}

.left-column {
  width: 33%;
}

.right-column {
  width: 33%;
}

.middle-column {
  width: 33%;
}
<div class = "flex-row">
  <div class = "left-column">
    Left column
  </div>

  <div class = "middle-column">
    Middle column
  </div>

  <div class = "right-column">
    Right column
  </div>
</div>

P.S.

Сетка CSS — это еще более продвинутая техника (как было предложено в комментариях). Он хорошо поддерживается современными браузерами, но имеет ограниченную функциональность в Internet Explorer.

CSS-Grid поддерживается всеми браузерами, за исключением древнего Internet Explorer. И на самом деле для макета с 3 столбцами, как здесь, он был бы даже короче. Все, что вам нужно добавить для CSS, это: body { display: grid; grid-template-columns: repeat(3, 1fr); } Тогда вам не нужно определять ширину дочерних элементов. Или для обмена образцами body с .flex-row

tacoshy 13.12.2020 01:50

Обновлено примечание о поддержке сетки.

Vitalii 13.12.2020 01:55

чтобы сократить код CSS, вы можете добиться того же результата с помощью: .flex-row { display: flex; flex-direction: row; } .flex-row div { width: 33%; }

tacoshy 13.12.2020 01:55

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