Как полностью отключить вертикальное сжатие элемента div

У меня есть div на моем веб-сайте, который я хотел бы оставить на высоте области просмотра, пока div не станет достаточно маленьким, чтобы дочерние элементы начали сталкиваться (или немного раньше). Я пробовал min-height и display:table;, но ничего не работает. Вот как это должно выглядеть:

Однако на экранах меньшего размера по вертикали это выглядит так:

Фрагмент кода прилагается:

* {
  margin: 0;
}

body {
  overflow-x: hidden;
  font-size: large;
  margin: 0;
}

.welcome {
  text-align: center;
  background-image: url("https://images.unsplash.com/photo-1587831990711-23ca6441447b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8ZGVza3RvcCUyMGNvbXB1dGVyfGVufDB8fDB8fA%3D%3D&auto=format&fit=crop&w=500&q=60");
  background-size: cover;
  background-repeat: no-repeat;
  min-height: 100%;
  color: white;
  position: absolute;
  top: 0px;
  width: 100%;
  padding: 0 auto;
}

.welcome * {
  clear: both;
}

.welcome-txt {
  position: absolute;
  top: 40%;
  left: 50%;
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  white-space: nowrap;
}

.welcome-content {
  animation-name: fadeInLoad;
  animation-duration: 3s;
  animation-timing-function: linear;
}

#child {
  position: absolute;
  top: 0;
  color: black;
  display: inline-block;
}

.info-content {
    position: relative;
    top: 83vh;
    text-align: center;
    background-image: url("img_5.jpg");
    background-repeat: no-repeat;
    background-size: cover;
    width: 100%;
    min-height: 105%;
    padding: 20px;
    padding-right: 20px;
    clear: both;
    overflow: hidden;
}

.info-content-blocks {
    background-color: rgba(204, 204, 204, 0.8);
    padding: 30px; 
    margin: 15px;
}

.diveder {
width: 100%;
min-height: 100px;
background-color: rgba(204, 204, 204, 0.8);
padding-top: 2%;
padding-bottom: 1%;
}
<div class = "welcome">
    <div class = "welcome-content">
        <h1 class = "welcome-txt">Classes<br>
            The Coders Club</h1>
        <img src = "/resources/Copy of The Coders Club.png" class = "logo">
        <p class = "tagline">Learn. Code. Create.</p>
        <div class = "arrow-background">
            <div class = "arrow bounce"></div>
        </div>
    </div>  
</div>
 <div class = "space"></div>   
<div class = "info-content">
   <div class = "diveder" style = "color: red;"><h2>Class Starts February 10</h2>
    <p>Signup by January 20th</p></div>
    <div class = "info-content-blocks" id = "classes">
    
    <h3>What Will Be Taught?</h3>
    <h4><b>Beginner Class</b></h4>
    <p>In the beginner class students will be taught the basics of HTML (Hyper Text Markup Language), CSS (Cascading Style Sheets). Students will be able to make websites like the one you are one now.</p>
    <button class = "standard-button"><a href = "/curriculem-beginer.html">View curriculum</a></button><br><br>
    <button class = "standard-button">Enroll</button>
    
    <h4>Intermediate Class Part 1 (New!)</h4>
    <p>In the Intermediate part 1 class students will learn the basics of JS. IE: variables, function, if/else statements, object, object oriented programing. Note: The HTML and CSS is not required for the intermediate class.</p>
    <button class = "standard-button">Enroll</button><br><br>
    <button class = "standard-button"><a href = "/curriculem-beginer.html">View curriculum</a></button><br><br>
</div>

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

Jayanika Chandrapriya 20.12.2022 02:33

@J Добавлены дополнительные подробности, а также предполагаемые результаты.

Ethan 20.12.2022 02:49

Фрагмент html пуст

Alvin 21.12.2022 02:25

@A Исправлено! Странно, что сниппет не сохранился

Ethan 21.12.2022 03:02
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
1
4
134
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я наткнулся на полезную статью здесь, которая использует JS для создания минимальной ширины на <meta name='viewport' />, и если устройство меньше этой минимальной ширины, оно отображает более «уменьшенную» версию страницы.

Я считаю, что это решение решит вашу проблему столкновения элементов.

Репозиторий github с кодом

Просто установите родительский min-height на fit-content, тогда вам решать, хотите ли вы, чтобы overflow был scroll или hidden.

* {
    margin: 0;
    padding: 0;
  }

.parent {
    width: 100vw;
    height: 100vh;
    min-height: fit-content;
    display: flex;
    background: lightblue;
    /* overflow: hidden; */
}

.child {
    width: 50%;
    height: 100px;
    text-align: center;
    background: lightcoral;
    border: 1px solid lightgray;
}

.parent :nth-child(3) {
    height: 300px;
}

  
<div class = "parent">
  <div class = "child">child1</div>
  <div class = "child">child2</div>
  <div class = "child">child3</div>
</div>
Ответ принят как подходящий

Если я правильно понял ваш вопрос, это может быть то, что вы хотите сделать. Во-первых, нужно добавить min-height: 100vh к .welcome, затем вместо использования абсолютного позиционирования в текстах мы можем использовать модель flexbox для его родителя .welcome.

* {
  margin: 0;
}

body {
  overflow-x: hidden;
  font-size: large;
  margin: 0;
}

.welcome {
  text-align: center;
  background-image: url("https://images.unsplash.com/photo-1587831990711-23ca6441447b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8ZGVza3RvcCUyMGNvbXB1dGVyfGVufDB8fDB8fA%3D%3D&auto=format&fit=crop&w=500&q=60");
  background-size: cover;
  background-repeat: no-repeat;
  min-height: 100vh;
  color: white;
  top: 0px;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.welcome * {
  clear: both;
}

.welcome-txt {
  white-space: nowrap;
}

.welcome-content {
  animation-name: fadeInLoad;
  animation-duration: 3s;
  animation-timing-function: linear;
  padding: 40px 0;
}

#child {
  position: absolute;
  top: 0;
  color: black;
  display: inline-block;
}

.info-content {
  position: relative;
  text-align: center;
  background-image: url("img_5.jpg");
  background-repeat: no-repeat;
  background-size: cover;
  width: 100%;
  min-height: 105%;
  padding: 20px;
  padding-right: 20px;
  clear: both;
  overflow: hidden;
}

.info-content-blocks {
  background-color: rgba(204, 204, 204, 0.8);
  padding: 30px;
  margin: 15px;
}

.diveder {
  width: 100%;
  min-height: 100px;
  background-color: rgba(204, 204, 204, 0.8);
  padding-top: 2%;
  padding-bottom: 1%;
}
<div class = "welcome">
  <div class = "welcome-content">
    <h1 class = "welcome-txt">Classes<br> The Coders Club</h1>
    <img src = "/resources/Copy of The Coders Club.png" class = "logo">
    <p class = "tagline">Learn. Code. Create.</p>
    <div class = "arrow-background">
      <div class = "arrow bounce"></div>
    </div>
  </div>
</div>
<div class = "space"></div>
<div class = "info-content">
  <div class = "diveder" style = "color: red;">
    <h2>Class Starts February 10</h2>
    <p>Signup by January 20th</p>
  </div>
  <div class = "info-content-blocks" id = "classes">

    <h3>What Will Be Taught?</h3>
    <h4><b>Beginner Class</b></h4>
    <p>In the beginner class students will be taught the basics of HTML (Hyper Text Markup Language), CSS (Cascading Style Sheets). Students will be able to make websites like the one you are one now.</p>
    <button class = "standard-button"><a href = "/curriculem-beginer.html">View curriculum</a></button><br><br>
    <button class = "standard-button">Enroll</button>

    <h4>Intermediate Class Part 1 (New!)</h4>
    <p>In the Intermediate part 1 class students will learn the basics of JS. IE: variables, function, if/else statements, object, object oriented programing. Note: The HTML and CSS is not required for the intermediate class.</p>
    <button class = "standard-button">Enroll</button><br><br>
    <button class = "standard-button"><a href = "/curriculem-beginer.html">View curriculum</a></button><br><br>
  </div>

Ключевым моментом здесь является фактически не использовать абсолютную позицию и вместо этого использовать модель flexbox, чтобы она рассматривалась как имеющая свою собственную высоту.

Это все еще не работает. Я добавил к фрагменту кода второй элемент, который может вызывать сжатие основного div.

Ethan 21.12.2022 02:04

@Ethan обновил ответ новым фрагментом

Damzaky 21.12.2022 03:41

В итоге я возился с дочерними элементами, чтобы получить желаемые результаты. Поскольку, когда размер окна превышал 600 пикселей, элементы начинали обрезаться в .welcome. Кроме этого отличного ответа.

Ethan 23.12.2022 04:33

я использую некоторые js для этого

<script>
let height = screen.height;
document.querySelector(".welcome").style.minHeight=height+"px";
</script>

вы можете удалить минимальную высоту из .welcome, так как мы используем js даже с небольшим вертикальным экраном он будет работать отлично вот полный код

<!DOCTYPE html>
<html>
<head>
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<style>
* {
  margin: 0;
}

body {
  overflow-x: hidden;
  font-size: large;
  margin: 0;
}

.welcome {
  text-align: center;
  background-image: url("https://images.unsplash.com/photo-1587831990711-23ca6441447b?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8ZGVza3RvcCUyMGNvbXB1dGVyfGVufDB8fDB8fA%3D%3D&auto=format&fit=crop&w=500&q=60");
  background-size: cover;
  background-repeat: no-repeat;
 
  color: white;
  position: absolute;
  top: 0px;
  width: 100%;
  padding: 0 auto;
}

.welcome * {
  clear: both;
}

.welcome-txt {
  position: absolute;
  top: 40%;
  left: 50%;
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  white-space: nowrap;
}

.welcome-content {
  animation-name: fadeInLoad;
  animation-duration: 3s;
  animation-timing-function: linear;
}

#child {
  position: absolute;
  top: 0;
  color: black;
  display: inline-block;
}

.info-content {
    position: relative;
    top: 83vh;
    text-align: center;
    background-image: url("img_5.jpg");
    background-repeat: no-repeat;
    background-size: cover;
    width: 100%;
    min-height: 105%;
    padding: 20px;
    padding-right: 20px;
    clear: both;
    overflow: hidden;
}

.info-content-blocks {
    background-color: rgba(204, 204, 204, 0.8);
    padding: 30px; 
    margin: 15px;
}

.diveder {
width: 100%;
min-height: 100px;
background-color: rgba(204, 204, 204, 0.8);
padding-top: 2%;
padding-bottom: 1%;
}
</style>
</head>
<body>

<div class = "welcome">
    <div class = "welcome-content">
        <h1 class = "welcome-txt">Classes<br>
            The Coders Club</h1>
        <img src = "/resources/Copy of The Coders Club.png" class = "logo">
        <p class = "tagline">Learn. Code. Create.</p>
        <div class = "arrow-background">
            <div class = "arrow bounce"></div>
        </div>
    </div>  
</div>
 <div class = "space"></div>   
<div class = "info-content">
   <div class = "diveder" style = "color: red;"><h2>Class Starts February 10</h2>
    <p>Signup by January 20th</p></div>
    <div class = "info-content-blocks" id = "classes">
    
    <h3>What Will Be Taught?</h3>
    <h4><b>Beginner Class</b></h4>
    <p>In the beginner class students will be taught the basics of HTML (Hyper Text Markup Language), CSS (Cascading Style Sheets). Students will be able to make websites like the one you are one now.</p>
    <button class = "standard-button"><a href = "/curriculem-beginer.html">View curriculum</a></button><br><br>
    <button class = "standard-button">Enroll</button>
    
    <h4>Intermediate Class Part 1 (New!)</h4>
    <p>In the Intermediate part 1 class students will learn the basics of JS. IE: variables, function, if/else statements, object, object oriented programing. Note: The HTML and CSS is not required for the intermediate class.</p>
    <button class = "standard-button">Enroll</button><br><br>
    <button class = "standard-button"><a href = "/curriculem-beginer.html">View curriculum</a></button><br><br>
    </div></div>
</body>
<script>
let height = screen.height;
document.querySelector(".welcome").style.minHeight=height+"px";
</script></html>

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