Размер адаптивной границы соответствует странице, а не области просмотра

Мне нужна сплошная рамка толщиной 4 пикселя вокруг моей веб-страницы. 30 пикселей от края. Он должен быть отзывчивым, поэтому, если веб-сайт прокручивает границу, она всегда должна быть на расстоянии 30 пикселей от края СТРАНИЦЫ, а не ВИДОМУ.

Я пытаюсь использовать div, расположенный абсолютно на 30 пикселей вокруг страницы с границей 4 пикселя. Но это не работает для нижнего колонтитула, поскольку он не остается внизу содержимого при прокрутке страницы. Иногда контент не заполняет область просмотра, поэтому я могу просто создать рамку вокруг основного контента.

#main {
  width: 70%;
  margin-left: auto;
  margin-right: auto;
  margin-top: 50px;
  margin-bottom: 50px;
}

#content2 {
  background: #232C44;
  color: white;
  padding: 30px;
}

#b1 {
  position: absolute;
  left: 30px;
  border-right: 4px solid #916E00;
  top: 30px;
  bottom: 30px;
}

#b2 {
  position: absolute;
  left: 30px;
  border-bottom: 4px solid #916E00;
  right: 30px;
  top: 30px;
}

#b3 {
  position: absolute;
  top: 30px;
  bottom: 30px;
  border-left: 4px solid #916E00;
  right: 30px;
}

#b4 {
  position: absolute;
  left: 30px;
  border-top: 4px solid #916E00;
  right: 30px;
  bottom: 30px;
}
<div id = "b1"></div>
<div id = "b2"></div>
<div id = "b3"></div>
<div id = "b4"></div>

<div id = "main">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla non pretium ipsum. Morbi sagittis eu odio at laoreet. Nullam aliquam porttitor pretium. Mauris at nunc nec tortor hendrerit euismod pharetra at dolor. In placerat, lectus vitae semper ultrices,
  mi dui gravida nisi, sit amet posuere metus dui quis leo. Mauris euismod, diam sed faucibus ullamcorper, urna magna tempus dolor, nec congue nulla dui nec tellus. Nullam dictum vestibulum est, id gravida nisi aliquet nec. Integer facilisis, nibh sed
  viverra volutpat, mi enim convallis tortor, eu tincidunt metus magna eget elit. Ut at magna quam. Duis vel lorem nec lectus rutrum auctor. Vivamus vitae rutrum mi, id mattis eros. In hac habitasse platea dictumst. uis, blandit eros. Class aptent taciti
  sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam feugiat augue purus, ut sollicitudin nibh egestas dapibus. Morbi vel nisl a magna aliquam mollis.
</div>

ЧАСТЬ 2

Хорошо, у нас есть ответы. Я хотел бы перейти ко второму этапу, который мне нужен для моего дизайна. Мне нужно два раздела на странице ВЕРХ и ВНИЗ. Цвет этих перетекает за границу. Как мне создать это в той же спецификации, что и первая часть вопроса.

Вот как это должно выглядеть:

Размер адаптивной границы соответствует странице, а не области просмотра

Вот как это сейчас выглядит:

Размер адаптивной границы соответствует странице, а не области просмотра

Не беспокойтесь о ширине и высоте. Как сделать весь верх белым, а нижний - синим. Пока еще делает его отзывчивым. Нижняя граница всегда на одинаковом расстоянии от края СТРАНИЦЫ (без области просмотра)? Даже когда страницу нужно прокрутить.

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

manAbl 21.06.2018 00:45

Но если они будут исправлены, контент останется позади них. Верхняя и нижняя границы должны оставаться относительно страницы, а не окна. Однако это хорошо работает с боковыми границами ... На самом деле это не так, так как при прокрутке по бокам будут зазоры.

pinkp 21.06.2018 00:49

2-я часть: интересно! Если не задана высота верхней части, я не верю, что есть решение на чистом CSS. В противном случае это можно сделать с помощью небольшого кусочка JS. Это сработало бы для вас?

zumek 22.06.2018 07:21

@zumek да JS в порядке. Я просто хочу, чтобы это было как можно проще. Но да, открыт для идей :) Я почти добился этого с помощью flexbox.

pinkp 24.06.2018 11:06

@pinkp привет, я добавил часть 2. Удачи в вашем проекте :)

zumek 27.06.2018 04:45
Улучшение производительности загрузки с помощью 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
5
107
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я думаю, вы слишком усложняете! Попробуй это?

<div style = "margin: 30px; border: 4px solid red;">
  <p style = "max-width: 700px; margin: 0 auto; padding: 30px;">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
  </p>
<div>

https://codepen.io/scottmledbetter/pen/MXVmbP

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

pinkp 21.06.2018 01:40

Я еще немного поработал над этим. Граница должна вести себя так, как вы сейчас хотите. Как вы думаете? codepen.io/scottmledbetter/pen/MXVmbP

Scott Ledbetter 21.06.2018 19:57

Я считаю, что это то, что вы хотите:

index.html

<div class = "b one"></div>
<div class = "b two"></div>
<div class = "b three"></div>
<div class = "b four"></div>

<div class = "main">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla non pretium ipsum. Morbi sagittis eu odio at laoreet. Nullam aliquam porttitor pretium. Mauris at nunc nec tortor hendrerit euismod pharetra at dolor. In placerat, lectus vitae semper ultrices,
  mi dui gravida nisi, sit amet posuere metus dui quis leo. Mauris euismod, diam sed faucibus ullamcorper, urna magna tempus dolor, nec congue nulla dui nec tellus. Nullam dictum vestibulum est, id gravida nisi aliquet nec. Integer facilisis, nibh sed
  viverra volutpat, mi enim convallis tortor, eu tincidunt metus magna eget elit. Ut at magna quam. Duis vel lorem nec lectus rutrum auctor. Vivamus vitae rutrum mi, id mattis eros. In hac habitasse platea dictumst. uis, blandit eros. Class aptent taciti
  sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam feugiat augue purus, ut sollicitudin nibh egestas dapibus. Morbi vel nisl a magna aliquam mollis.
</div>

main.css

.main {
  box-sizing: border-box;
  padding: 2rem;
  margin: 2rem;
}

.b {
  position: fixed;
  background: slateblue;
  width: 30px;
  height: 100%;
}
.two {
  right: 0;
}

.three, .four {
  width: 100%;
  height: 30px;
}

.three {
  top: 0;
}

.four {
  bottom: 0;
}

Рабочая ручка: https://codepen.io/manAbl/pen/ZRxejr?editors=1100;

Я считаю, что вы также можете реализовать то, что хотите, используя псевдоклассы: before &: after, чтобы вы использовали тег body и еще один дополнительный div для обертывания вашего контента. Используя оба псевдокласса в теле и дополнительный div (надеюсь, вы легко сможете понять это для себя отсюда ...)

Надеюсь помогает :)

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

pinkp 21.06.2018 09:08

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

Вот JSFiddle того, что я сделал.

По сути, вам понадобится еще один div-обертка, чтобы это работало. Если поставить padding: 30px на основной экран, эта граница будет на расстоянии не менее 30 пикселей от края экрана. Поместите границу на .content, а затем добавьте к ней отступ и min-height из 100vh.

Если вы не использовали сокращение для полей, отступов и т. д., Оно вводится по часовой стрелке, начиная сверху. Поэтому вместо настройки:

.class {
    margin-top: 5px;
    margin-right: 10px;
    margin-bottom: 5px;
    margin-left: 10px;
}

мы можем просто сделать:

.class {
    margin: 5px 10px 5px 10px;
}

Вы можете сократить это до margin: 5px 10px;, так как верх / низ и правый / левый одинаковы.

Пока не могу комментировать другие сообщения, так что придется это сделать. Что касается ответа Мануэля Бланко, хотя он может работать, нет необходимости иметь отдельные div, служащие границами. Это не очень чистое решение этой проблемы, поскольку есть способы заставить CSS делать это без этой особой головной боли.

jmulder5 21.06.2018 06:19

Что касается ответа KacosPro, он правильный, за исключением того, что для этого вам не нужно гибкость. Гибкость в его ответе буквально не влияет на вывод из-за min-height: 100vh. Конечно, вы можете использовать flex для растягивания до высоты контейнера, но это не то, что здесь происходит.

jmulder5 21.06.2018 06:20

Спасибо, но даже если у вас минимальный контент, нижняя граница по-прежнему проходит под окном просмотра при прокрутке страницы. 100vh + остальные отступы и границы выходят за пределы страницы.

pinkp 21.06.2018 09:03
Ответ принят как подходящий

Я рекомендую добавить рамку к элементу body. Пожалуйста, проверьте следующее

html, body {
  min-height: calc(100vh - 68px);
  }
body {
  border: 4px solid #916E00;
  margin: 30px;
}
#main {
  padding: 0 10%;
}
<div id = "main">
  
  <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Laborum accusamus possimus dolore iste aspernatur soluta quia ipsam perferendis magni, voluptatum libero ratione dignissimos cumque magnam rem quasi, at, explicabo eius?</p>
  <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Incidunt inventore libero illo laborum soluta modi nesciunt, iste minus, animi aliquid dolor, atque cumque vero fugiat hic amet ipsa exercitationem eum?</p>
  <p>Cumque ab libero voluptatem iste. Adipisci omnis a est mollitia neque perspiciatis excepturi incidunt unde, eius tempora vel? Commodi voluptate minima numquam, aliquid veritatis laborum velit rerum cupiditate accusamus repudiandae!</p>
  <p>Harum ab voluptate, id dolor autem minima nesciunt sunt aut in! Impedit in illum velit eligendi accusamus nostrum numquam maxime est, molestiae odit nam! Omnis illum ipsum reiciendis eligendi deserunt.</p>
  <p>Tempora enim nisi cupiditate perferendis asperiores placeat incidunt iste neque hic aliquid quos aperiam, sint amet! Quaerat nisi mollitia, officiis quis voluptate dignissimos cumque illum, explicabo, velit consequuntur quos nobis.</p>
  <p>Quas sed perferendis recusandae nesciunt asperiores nulla, eius dolores quisquam, blanditiis eaque ab illum perspiciatis ut. Reiciendis, at sunt explicabo esse dolores praesentium, unde maiores quibusdam porro perspiciatis repellendus fugit?</p>
  <p>Et inventore a itaque recusandae nostrum sed, quod, quae ab, vero accusamus nihil esse explicabo fuga illum quas? Iure ducimus iusto totam consequuntur, accusamus illum optio nesciunt ipsam ipsa deleniti.</p>

</div>

При этом граница будет выровнена по нижнему краю страницы, если содержимого недостаточно для заполнения области просмотра.


Решения ЧАСТИ 2, использующие JS - комментарии во фрагменте

var bottomMarginOffset = 90; //adjust as needed


function onResize() {
  $('.row2').css('margin-top', $('.row1').height() + bottomMarginOffset + 'px');
}

$(function() {
  // call resize on page load to set initial value
  onResize();
});

$(window).resize(onResize)
* {
  box-sizing: boder-box;
}

body {
  background-color: #00b3ff;
  padding: 0;
  margin: 0;
}

#main {
  min-height: calc(100vh - 68px);
  border: 4px solid #916E00;
  position: relative;
  padding: 0;
  margin: 30px;
}


/* 
Set top row to absolute and offset it (margin + border width) so that it sits outside its container.
Recommend using some CSS vars to set and calculate the values.
*/

.row:nth-child(1) {
  position: absolute;
  top: 0;
  left: 0;
  right: -34px; /* stretch it outside on right side */
  z-index: -1; /* stack under parent so the border stays on top */
  margin-left: -34px; /* pull left */
  margin-top: -34px; /* pull up */
  padding: 64px 64px 34px; /* add padding so that content is aligned with the rest of the child elements */
}

.row:nth-child(2) {
  padding: 30px;
}

.row:nth-child(odd) {
  background-color: #fff;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "main">
  <div class = "row row1"> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quae doloremque quaerat commodi consectetur quisquam similique, dignissimos tenetur, modi porro, cum voluptas expedita neque nisi dolorem sequi sed beatae? Repellendus, alias?</p>
    <p>A ut nam quidem nobis obcaecati fuga sunt. Recusandae perspiciatis repellat vero? Nostrum, architecto commodi. Officiis quos cum dolore error enim adipisci deserunt, blanditiis autem fugiat laboriosam suscipit laborum hic!</p>
  </div>
  <div class = "row row2"> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugit, officia sequi facilis exercitationem vero error voluptatibus libero magnam ducimus explicabo commodi quos itaque quas consequatur dolores veniam nam excepturi autem.</p>
    <p>Officiis ipsa quod dolores temporibus at porro corporis aut natus distinctio suscipit esse, nam soluta veniam earum quaerat laborum ab voluptatem voluptatibus laboriosam repellat quis. Labore aliquid illum cumque assumenda.</p>

    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa odit non unde nesciunt illo qui dolorum autem ad minus quisquam nemo rem tenetur vero velit ab in, veritatis recusandae voluptatum?</p>
    <p>Optio sunt inventore accusantium accusamus, eaque at voluptate libero fugit, ipsum impedit, modi labore autem molestiae. Porro tempora, corrupti, quo veritatis laudantium illum veniam nulla illo in quasi facere dolore?</p>
    <p>Expedita exercitationem ipsam explicabo similique est omnis reiciendis. Natus non similique veritatis, reprehenderit, sed delectus quo at molestiae expedita placeat quis accusamus iure? Soluta natus vel asperiores dignissimos, laboriosam expedita!</p>
    <p>Tempora doloribus neque dolores odio temporibus laboriosam nostrum, reiciendis suscipit provident cum officiis eaque culpa, quam est molestias minus enim harum adipisci autem expedita, laudantium quisquam ut nihil. Deserunt, voluptas.</p>
    <p>Qui accusantium ut atque esse excepturi praesentium minima quos harum! Voluptas quibusdam alias incidunt similique facilis architecto, qui nulla, quas voluptates laudantium quis modi saepe suscipit. Inventore, aliquid. Minima, dolor.</p>
    <p>Quidem, sunt facilis voluptates nihil neque doloremque deserunt? Magnam in adipisci ipsum voluptatem possimus quas mollitia, dicta soluta non magni praesentium ad ea. Dignissimos accusamus quaerat ab est. Magnam, asperiores!</p>
    <p>Dolores, quo. Officiis hic adipisci nihil obcaecati voluptates incidunt sit eum dolorem quasi dignissimos vero ullam maxime harum laborum quis ab praesentium corporis quos, tenetur, omnis non ex error doloribus?</p>
    <p>Officia, quisquam? Omnis unde reprehenderit, asperiores delectus quibusdam corrupti veniam dignissimos. Sunt natus ut illo aspernatur perspiciatis veritatis? Mollitia, eligendi aliquid. Natus, earum? Ipsam harum consequatur unde aliquid! Necessitatibus,
      beatae!</p>
    <p>Nostrum sunt quod consectetur debitis quam. Excepturi perspiciatis fugit voluptates corrupti fuga repellendus alias voluptatibus laudantium sed consectetur nam cum nihil in saepe repellat aspernatur accusantium sapiente, labore quae perferendis.</p>
    <p>Dolor tenetur voluptate eum, illo qui aut unde vitae quos. Error placeat recusandae, consectetur dolore, facilis iusto distinctio fugit eligendi iure quia ab voluptatem dolor corporis, repellat aliquid laboriosam minus!</p>
    <p>Rerum alias aspernatur, quae nostrum, cumque saepe voluptate dolore vitae distinctio veritatis fugiat, necessitatibus laborum! Quod vitae hic, totam consectetur labore ratione natus voluptatem, incidunt voluptatibus mollitia, expedita similique exercitationem!</p>
    <p>Ipsum veritatis optio dolorem, sed nihil aliquam reprehenderit culpa provident quam expedita ratione consectetur ipsa beatae explicabo atque amet iure. Voluptatibus praesentium molestiae neque dolor nemo ipsam nesciunt ab sit!</p>
    <p>Consequuntur ipsam assumenda quam laudantium ipsa fugit? Ad totam accusamus temporibus sunt eligendi cupiditate excepturi sequi voluptatem recusandae nesciunt laudantium deleniti id, est, nam nihil quidem veniam facilis tenetur adipisci.</p>
    <p>Voluptates ipsa voluptatem delectus quis consequuntur expedita vel quod atque minus, temporibus sint inventore repudiandae quas in illum incidunt mollitia officia, fugit quos voluptas repellat suscipit officiis doloremque explicabo? Sequi!</p>
    <p>Repellat possimus libero id in ut excepturi qui necessitatibus temporibus doloremque voluptatum autem facilis animi quisquam vel error incidunt eligendi esse, optio nemo consequatur quibusdam hic voluptas modi facere? Unde!</p>
    <p>Ut deserunt error, vitae quam itaque dolorem ea quibusdam minima porro facilis id ex aliquid aliquam a distinctio nam, qui adipisci eius deleniti natus impedit atque? Eius labore cumque sequi.</p>
    <p>Dolor dolorem ratione ullam repellendus ad vel praesentium obcaecati quisquam reiciendis, non, at natus deleniti velit aliquid magni. Debitis nulla quo minus quisquam nihil sequi aliquid reiciendis amet ratione cupiditate.</p>
    <p>Ex et ullam esse, provident nisi fugiat autem unde sunt minima, ratione recusandae expedita possimus, fuga ut sit eius asperiores eveniet incidunt quae iure? Eaque cum fugit temporibus impedit exercitationem.</p>
    <p>Nemo recusandae ratione reprehenderit labore cumque laborum placeat eius unde impedit modi maxime beatae vero eveniet repellat, quae non quisquam, sapiente ea laudantium eos iure blanditiis deserunt consequuntur. Modi, sed.</p>
    <p>Sunt ab libero fugiat nisi dolor tenetur perferendis eaque sapiente aperiam sit iste corporis, voluptatem, saepe modi possimus quae necessitatibus velit quas at. Corrupti voluptates libero, repellendus magnam repudiandae illum?</p>
  </div>

</div>

Обратите внимание на одну оговорку с этим решением: текст в верхней строке нельзя будет выбрать (из-за порядка наложения). Плохо для удобства использования и доступности. Вы можете обойти это, поместив текст в отдельный контейнер и расположив его соответствующим образом. Я оставлю это на ваше усмотрение.

Проблема здесь в 100vh + другие размеры, такие как padding и border, означают, что страница всегда прокручивается, даже если контент короткий. Граница должна располагаться внизу окна просмотра, когда содержимое слишком короткое для его заполнения.

pinkp 21.06.2018 09:10

Хорошо, конечно, вы можете учесть это с помощью вычисления с помощью calc - я обновил фрагмент. 68 пикселей = верхнее + нижнее поле + ширина границы * 2

zumek 21.06.2018 11:41

Я добавил к этому вопросу вторую часть, поскольку мой дизайн идет дальше, чем вопрос 1. Если у вас есть идеи, связанные с муравьями, мы приветствуем их.

pinkp 21.06.2018 18:06

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