Force Bootstrap div to expand vertically when using absolutely positioned content - html

How can I force the middle div to expand vertically on screen sizes smaller than 1000px and not flow the text under the image in the third div?
Clearing floats doesn't have an effect.
This is Bootstrap 4.4.1.
https://jsfiddle.net/o4h0czv7/
HTML:
<div class="container-fluid">
<div class="row">
<div class="col-12 text-center">
<img class='img-fluid' src="https://placekitten.com/1400/300" />
<div class="title">
Kittens Kittens
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="col-12 text-center">
<div class="row">
<img class='img-fluid' src="https://placekitten.com/1400/400" />
<div class="text">
<p>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>
<p>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="col-12 text-center">
<div class="row">
<img class='img-fluid' src="https://placekitten.com/1400/250" />
<div class="text">
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium
</div>
</div>
</div>
</div>
CSS:
body {
height: 100%;
font-size: 16px;
color:#fff;
overflow: none;
}
.text {
position: absolute;
top:0;
left:0;
right: 0;
height: 100%;
}
.title {
position: absolute;
top:10%;
left:0;
right: 0;
height: 100%;
}

Added .middle-block class for a middle container and #media (max-width: 1000px) {...} to determine changes on screens less than 1000px.
Here you can see the .middle-block .text is now relative, and .middle-block .img-fluid is absolute. So now the height of the block depends on .middle-block .text height.
Because of position: absolute combined with object-fit: cover; - the .middle-block .img-fluid starts to act like background image with background-size: cover;
body {
height: 100%;
font-size: 16px;
color: #fff;
overflow: none;
}
.text {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 100%;
}
.title {
position: absolute;
top: 10%;
left: 0;
right: 0;
height: 100%;
}
#media (max-width: 1000px) {
.middle-block .text {
position: relative;
height: auto;
z-index: 2;
}
.middle-block .img-fluid {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
object-fit: cover;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js"></script>
<div class="container-fluid">
<div class="row">
<div class="col-12 text-center">
<img class='img-fluid' src="https://placekitten.com/1400/300" />
<div class="title">
Kittens Kittens
</div>
</div>
</div>
</div>
<div class="container-fluid middle-block">
<div class="col-12 text-center">
<div class="row">
<img class='img-fluid' src="https://placekitten.com/1400/400" />
<div class="text">
<p>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia
animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda
est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut
reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>
<p>
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia
animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda
est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut
reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.
</p>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="col-12 text-center">
<div class="row">
<img class='img-fluid' src="https://placekitten.com/1400/250" />
<div class="text">
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium
</div>
</div>
</div>
</div>

You must add the a new class to the div that you want to take the properties that you need, in this example is the middle one:
I added the class middleCat.
It uses the #media rule to include a block of CSS properties only if a certain condition is true.
How can I force the middle div to expand vertically on screen sizes
smaller than 1000px and not flow the text under the image in the third
div?
If you are talking about the horizontal pixels you will need:
#media only screen and (max-width: 1000px) {
.middleCat{
min-height:100vh;
}
}
Instead if you are refering to the vertical pixels you will need:
#media only screen and (max-height: 1000px) {
.middleCat{
min-height:100vh;
}
}

Related

Div with CSS Grid not behaving consistently in chrome and firefox

Facing this weird issue where i have a div with overflow scroll. It is behaving differently in firefox and chrome.
It works in chrome but not in firefox, I see empty lines in Firefox.
what is going on here?
https://stackblitz.com/edit/web-platform-rdzpnu?file=styles.css
.continer {
border: 1px solid #ddd;
padding: 12px;
max-height: 500px;
/** works in chrome **/
/* height: 500px; doesn't work */
display: flex;
flex-direction: column;
}
.logs-grid {
flex: 1;
min-height: 0;
display: grid;
grid-template-columns: 1fr;
column-gap: 1rem;
row-gap: 1rem;
overflow-y: scroll;
}
.log {
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-bottom: 1px solid gray;
}
<div class="continer">
<h3> Recent Logs
</h3>
<div class="logs-grid">
<div class="log">Voluptate nihil in quisquam nam eos ea placeat culpa veritatis.
</div>
<div class="log">Sit reiciendis non sit iste sequi.</div>
<div class="log">Omnis consequuntur et voluptatum veniam nam.</div>
<div class="log">Maxime quia quis laborum.</div>
<div class="log">Exercitationem enim perferendis hic ut qui tempore debitis omnis ab.</div>
<div class="log">Ea aut numquam odit officia dolores totam et.</div>
<div class="log">Quis laudantium a itaque molestiae corporis rerum sequi sed perspiciatis.</div>
<div class="log">Aut ducimus expedita qui.</div>
<div class="log">Sed eum inventore ex animi ut laudantium non unde.
</div>
<div class="log">Dignissimos facilis expedita distinctio eaque laudantium aliquam harum sit.</div>
<div class="log">Necessitatibus ab aliquid ab asperiores suscipit voluptas illum qui.</div>
<div class="log">Ut magni earum ut suscipit ipsa recusandae deserunt eius nihil.
</div>
<div class="log">Reiciendis minima ipsam occaecati.</div>
<div class="log">Quo mollitia laboriosam est ullam sequi.</div>
<div class="log">Saepe quos soluta praesentium placeat laudantium consequatur possimus autem modi.</div>
<div class="log">Non non ducimus fuga dolores soluta amet quaerat.</div>
<div class="log">Consequatur reiciendis nemo voluptatum aut ut.</div>
<div class="log">Sint nobis sit et et aut placeat.</div>
<div class="log">Quis quo libero sit odit.</div>
<div class="log">Accusantium in fugiat quia veniam dicta perspiciatis.
</div>
<div class="log">Unde nostrum quo ea iste consequatur et non reiciendis.
</div>
<div class="log">Expedita exercitationem fuga sint harum culpa asperiores sed officia.</div>
<div class="log">Sed voluptatem nostrum itaque harum iusto qui enim nam.
</div>
<div class="log">Consectetur vero ut ut aspernatur eos ea nesciunt.
</div>
<div class="log">Qui vero repellendus aut dolor quas voluptatem dolore.
</div>
<div class="log">Aut odit voluptatem fugiat error cum aut ea tempora sint.
</div>
<div class="log">Aperiam unde et molestias.</div>
<div class="log">Quasi vel ex facilis dolor sequi repudiandae quas explicabo.
</div>
<div class="log">Non ut sit autem sunt quia.</div>
<div class="log">Fugit veritatis in.</div>
<div class="log">Suscipit sequi et amet inventore vel et porro.</div>
<div class="log">Totam esse voluptatem qui.</div>
<div class="log">Aut hic suscipit.</div>
<div class="log">Quas molestias illum similique non ratione distinctio exercitationem nemo accusamus.</div>
<div class="log">Quia velit eos aut eveniet.</div>
<div class="log">Eum rem nostrum est.</div>
<div class="log">Aliquid ut molestiae totam aut.</div>
<div class="log">Maxime inventore sit nostrum voluptatibus quia quas explicabo.
</div>
<div class="log">Quos sed aut odio fugit delectus culpa aut.</div>
<div class="log">Voluptatem quod autem qui repellendus quia voluptate.
</div>
<div class="log">Aut vero dolores vero.</div>
<div class="log">Qui alias velit dolor minima perspiciatis enim facilis officiis aut.</div>
</div>
</div>
This looks like a bug in Firefox with nesting an overflowing grid container inside a flex container.
(By the way, nesting a column-direction flex container has the same problem.)
I would suggest you use standard block layout (display: block) for the nested div. It seems to work fine across browsers.
.continer {
border: 1px solid #ddd;
padding: 12px;
max-height: 500px;
display: flex;
flex-direction: column;
}
.logs-grid {
flex: 1;
overflow-y: scroll;
}
.log {
overflow-x: hidden;
white-space: nowrap;
text-overflow: ellipsis;
border-bottom: 1px solid gray;
margin-bottom: 10px;
}
<div class="continer">
<h3> Recent Logs
</h3>
<div class="logs-grid">
<div class="log">Voluptate nihil in quisquam nam eos ea placeat culpa veritatis.
</div>
<div class="log">Sit reiciendis non sit iste sequi.</div>
<div class="log">Omnis consequuntur et voluptatum veniam nam.</div>
<div class="log">Maxime quia quis laborum.</div>
<div class="log">Exercitationem enim perferendis hic ut qui tempore debitis omnis ab.</div>
<div class="log">Ea aut numquam odit officia dolores totam et.</div>
<div class="log">Quis laudantium a itaque molestiae corporis rerum sequi sed perspiciatis.</div>
<div class="log">Aut ducimus expedita qui.</div>
<div class="log">Sed eum inventore ex animi ut laudantium non unde.
</div>
<div class="log">Dignissimos facilis expedita distinctio eaque laudantium aliquam harum sit.</div>
<div class="log">Necessitatibus ab aliquid ab asperiores suscipit voluptas illum qui.</div>
<div class="log">Ut magni earum ut suscipit ipsa recusandae deserunt eius nihil.
</div>
<div class="log">Reiciendis minima ipsam occaecati.</div>
<div class="log">Quo mollitia laboriosam est ullam sequi.</div>
<div class="log">Saepe quos soluta praesentium placeat laudantium consequatur possimus autem modi.</div>
<div class="log">Non non ducimus fuga dolores soluta amet quaerat.</div>
<div class="log">Consequatur reiciendis nemo voluptatum aut ut.</div>
<div class="log">Sint nobis sit et et aut placeat.</div>
<div class="log">Quis quo libero sit odit.</div>
<div class="log">Accusantium in fugiat quia veniam dicta perspiciatis.
</div>
<div class="log">Unde nostrum quo ea iste consequatur et non reiciendis.
</div>
<div class="log">Expedita exercitationem fuga sint harum culpa asperiores sed officia.</div>
<div class="log">Sed voluptatem nostrum itaque harum iusto qui enim nam.
</div>
<div class="log">Consectetur vero ut ut aspernatur eos ea nesciunt.
</div>
<div class="log">Qui vero repellendus aut dolor quas voluptatem dolore.
</div>
<div class="log">Aut odit voluptatem fugiat error cum aut ea tempora sint.
</div>
<div class="log">Aperiam unde et molestias.</div>
<div class="log">Quasi vel ex facilis dolor sequi repudiandae quas explicabo.
</div>
<div class="log">Non ut sit autem sunt quia.</div>
<div class="log">Fugit veritatis in.</div>
<div class="log">Suscipit sequi et amet inventore vel et porro.</div>
<div class="log">Totam esse voluptatem qui.</div>
<div class="log">Aut hic suscipit.</div>
<div class="log">Quas molestias illum similique non ratione distinctio exercitationem nemo accusamus.</div>
<div class="log">Quia velit eos aut eveniet.</div>
<div class="log">Eum rem nostrum est.</div>
<div class="log">Aliquid ut molestiae totam aut.</div>
<div class="log">Maxime inventore sit nostrum voluptatibus quia quas explicabo.
</div>
<div class="log">Quos sed aut odio fugit delectus culpa aut.</div>
<div class="log">Voluptatem quod autem qui repellendus quia voluptate.
</div>
<div class="log">Aut vero dolores vero.</div>
<div class="log">Qui alias velit dolor minima perspiciatis enim facilis officiis aut.</div>
</div>
</div>
It seems like your .log elements have no height on firefox because of the overflow-x: hidden; on it.
You can give them a height, or make your grid cells heigh enough:
.logs-grid {
grid-auto-rows: max-content;
}

Make a shrinkable header with "sticky"

I'd like to make a part of my header stick on scroll while the top part disappear:
body {
/* Allows to scroll */
width: 15em;
}
header {
width: 100%;
}
header a {
display: block;
background-color: red;
}
#title {
position: sticky;
top: 0;
}
<body>
<header>
<h1>
<a href="index.html">
<div id="caption">Some text</div>
<div id="title">Main title</div>
</a>
</h1>
</header>
<p>Distinctio ut totam quos aliquam et voluptas delectus vitae. Aut optio inventore repudiandae nemo consequatur dolores impedit. Rerum fuga repellat illum culpa qui aut est qui. Qui deleniti mollitia incidunt deleniti officiis aliquid ipsam. Sed molestiae porro consequatur blanditiis deserunt temporibus. Natus autem veritatis illo totam cupiditate quidem qui.</p>
<p>Tempore dolor est omnis rem. Reiciendis architecto quisquam dolor. Dolorem minus ea expedita quo sunt. Adipisci totam cum omnis omnis. Voluptas similique amet magnam consequatur consequatur animi et nihil. Sequi tenetur tempora magnam quaerat est voluptatem.</p>
<p>Magni voluptas et cum. Voluptatum omnis libero odit eligendi. Consequuntur provident fuga qui eveniet similique. Non voluptatem et rerum. Iste corrupti perspiciatis atque.</p>
<p>Recusandae in est enim. Occaecati optio consequatur atque perferendis veritatis. Est aut cupiditate ea. Corrupti cumque quia accusamus ut perspiciatis qui ea.</p>
<p>Quisquam rerum voluptas voluptas corrupti quaerat. Tempore totam nemo numquam a modi similique. Veritatis eos nobis laudantium delectus. Laboriosam in incidunt esse quo provident ut necessitatibus consequuntur.</p>
</body>
But as you can see, that doesn't work as intended. How can I achieve that?
sticky need to be on the h1 element and you consider negative top value to achieve whant you want but you need to find the correct value based on the height of the caption
body {
/* Allows to scroll */
width: 15em;
}
header {
position: sticky;
top: -40px;
}
header a {
display: block;
background-color: red;
}
<body>
<header>
<h1>
<a href="index.html">
<div id="caption">Some text</div>
<div id="title">Main title</div>
</a>
</h1>
</header>
<p>Distinctio ut totam quos aliquam et voluptas delectus vitae. Aut optio inventore repudiandae nemo consequatur dolores impedit. Rerum fuga repellat illum culpa qui aut est qui. Qui deleniti mollitia incidunt deleniti officiis aliquid ipsam. Sed molestiae
porro consequatur blanditiis deserunt temporibus. Natus autem veritatis illo totam cupiditate quidem qui.</p>
<p>Tempore dolor est omnis rem. Reiciendis architecto quisquam dolor. Dolorem minus ea expedita quo sunt. Adipisci totam cum omnis omnis. Voluptas similique amet magnam consequatur consequatur animi et nihil. Sequi tenetur tempora magnam quaerat est voluptatem.</p>
<p>Magni voluptas et cum. Voluptatum omnis libero odit eligendi. Consequuntur provident fuga qui eveniet similique. Non voluptatem et rerum. Iste corrupti perspiciatis atque.</p>
<p>Recusandae in est enim. Occaecati optio consequatur atque perferendis veritatis. Est aut cupiditate ea. Corrupti cumque quia accusamus ut perspiciatis qui ea.</p>
<p>Quisquam rerum voluptas voluptas corrupti quaerat. Tempore totam nemo numquam a modi similique. Veritatis eos nobis laudantium delectus. Laboriosam in incidunt esse quo provident ut necessitatibus consequuntur.</p>
</body>
From the MDN : "stickily positioned element is treated as relatively positioned until it crosses a specified threshold, at which point it is treated as fixed until it reaches the boundary of its parent."
Here its parent is <a href="index.html"> so when you scroll, #title will scroll up with its parent.
If you want #title to stick to the top of the body you need the body to be its direct parent.
In the snippet I used both position: sticky; and position: -webkit-sticky; because Safari need the prefix.
body {
/* Allows to scroll */
width: 15em;
}
header {
width: 100%;
}
header a {
display: block;
background-color: red;
}
#title {
background-color: red;
position: -webkit-sticky;
position: sticky;
top: 0;
}
<body>
<header>
<h1>
<a href="index.html">
<div id="caption">Some text</div>
</a>
</h1>
</header>
<div id="title"><h1>Main title</h1></div>
<p>Distinctio ut totam quos aliquam et voluptas delectus vitae. Aut optio inventore repudiandae nemo consequatur dolores impedit. Rerum fuga repellat illum culpa qui aut est qui. Qui deleniti mollitia incidunt deleniti officiis aliquid ipsam. Sed molestiae porro consequatur blanditiis deserunt temporibus. Natus autem veritatis illo totam cupiditate quidem qui.</p>
<p>Tempore dolor est omnis rem. Reiciendis architecto quisquam dolor. Dolorem minus ea expedita quo sunt. Adipisci totam cum omnis omnis. Voluptas similique amet magnam consequatur consequatur animi et nihil. Sequi tenetur tempora magnam quaerat est voluptatem.</p>
<p>Magni voluptas et cum. Voluptatum omnis libero odit eligendi. Consequuntur provident fuga qui eveniet similique. Non voluptatem et rerum. Iste corrupti perspiciatis atque.</p>
<p>Recusandae in est enim. Occaecati optio consequatur atque perferendis veritatis. Est aut cupiditate ea. Corrupti cumque quia accusamus ut perspiciatis qui ea.</p>
<p>Quisquam rerum voluptas voluptas corrupti quaerat. Tempore totam nemo numquam a modi similique. Veritatis eos nobis laudantium delectus. Laboriosam in incidunt esse quo provident ut necessitatibus consequuntur.</p>
</body>

Div getting out of section's borders

My CSS is messed up, I've tried to fix it for the last 4 hours and I couldn't fix that.. I got a div inside another divs which are all under the same section.
The '.app' div gets out the of the section and moving down over another section
Here is a picture to explain better:
html:
<section id="portfolio" data-aos="fade-right">
<h1 data-aos="slide-right">My Projects</h1>
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="app">
<div class="image">
<img src="../assets/images/coupon.jpg" alt="" />
</div>
<ul>
<li><span> Name: </span> Coupon System</li>
<li><span>Description:</span> Final project in studies</li>
<li><span>Back-end:</span> Java,Spring Framework, Hibernate</li>
<li><span>Front-end:</span> Angular, CSS, Html</li>
<li><span>Database:</span> MySQL</li>
<li>
<span>Link:</span>
<button
onclick="window.open('http://coupon1.us-east-2.elasticbeanstalk.com','_blank')"
>
click here
</button>
</li>
</ul>
</div>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination"></div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</section>
css:
.swiper-container {
margin: 0 auto;
position: relative;
overflow: hidden;
list-style: none;
padding: 0;
z-index: 1;
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
}
.swiper-slide {
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative;
}
#portfolio {
background: #00ff40;
padding: 30px 10px 30px 10px;
}
.app {
position: absolute;
display: flex;
flex-wrap: wrap;
height: 100%;
background-color: #bc2a8d;
}
.app .image {
display: flex;
flex-direction: column;
min-width: 100%;
justify-content: center;
align-items: center;
height: 30%;
}
.app .image img {
flex-grow: 1;
max-width: 100%;
max-height: 100%;
}
As you can also see there is a big space between the picture and the text inside the main div which I would like to remove.
thanks by heart!
Update: to make it easier to fix I removed the '.app' div and used a new one with only paragraph inside:
<div class="swiper-container">
<div class="swiper-wrapper">
<div>
<p>
facilis nobis atque quod eum maxime non aspernatur, consequatur
ad. Ad, fuga vero? Aut pariatur deserunt nulla incidunt. Possimus
nesciunt vel at enim. Ea, iste. Doloremque, blanditiis explicabo
atque perferendis laboriosam excepturi cum consequuntur deleniti?
Cumque adipisci asperiores doloremque saepe optio nam temporibus
labore totam. Provident, amet officiis? Numquam dicta officia
nulla autem blanditiis ratione. Nam placeat doloribus veniam
perspiciatis corrupti ratione, odio deserunt repellat, adipisci
recusandae incidunt culpa fuga aspernatur et temporibus illum
suscipit reiciendis saepe quam. Iusto illo culpa veritatis
consequuntur alias quo a nulla soluta eveniet reprehenderit
sapiente veniam nam, commodi est officiis porro aliquid.
Laboriosam debitis eaque commodi nesciunt earum ipsam voluptates,
quo ab. Adipisci consequuntur ut hic repellendus? Eligendi
mollitia, voluptatum sed magni quo aliquam officiis blanditiis qui
tempore adipisci quasi deserunt, nam reiciendis, non nostrum nemo
doloremque eius quisquam eos ad corrupti. Labore accusantium totam
eaque natus iste incidunt praesentium? Voluptatum numquam dolorem
vitae mollitia quae! Molestias laboriosam, sapiente, earum
accusantium unde aperiam itaque corrupti culpa pariatur maiores
obcaecati sint illo veniam. Architecto optio minus voluptas
voluptatum quibusdam, neque odit nihil ex officiis explicabo
voluptates quod. Omnis, ab consequuntur! Quam inventore ut non
odio velit doloribus rem, cum amet iusto quia suscipit? Culpa
minus fuga harum saepe voluptatum ipsum non unde, nemo, deleniti
illo enim mollitia quaerat officia commodi optio laborum
blanditiis corporis laboriosam, tempora obcaecati ipsam eligendi
quam! A, inventore accusantium. Totam quibusdam quam dignissimos
quisquam reprehenderit quidem tenetur fuga voluptates minus
praesentium iste dicta illo eveniet rem eum, sunt omnis quae natus
ea! Quasi enim voluptatibus non. Doloribus, minus odit. Atque in
minus quidem sit, consectetur fugiat obcaecati veritatis,
architecto aperiam eaque sed delectus vero debitis accusantium
laboriosam corporis nemo exercitationem ex ad. Esse consequuntur,
provident non iusto dolorem inventore. Excepturi explicabo
quisquam qui commodi corporis dolore. Minima, beatae alias
perferendis quaerat deserunt, obcaecati eveniet consectetur, odio
quos dolor repellat? Aliquid, impedit quasi ratione blanditiis
ipsam esse odit soluta doloribus. Iste, harum repellendus quaerat
vel iusto ducimus ratione cumque a magni ipsa nihil, fugiat itaque
cupiditate quae non incidunt. Modi nesciunt fugiat quam ipsa magni
officia quasi a error accusamus? Cumque ad, iure necessitatibus
excepturi animi ipsum debitis distinctio maxime, cupiditate
impedit vel quis quo explicabo error deleniti accusamus autem
quae, rerum exercitationem deserunt illo repellat. Enim distinctio
reprehenderit quas? Quos reiciendis nemo provident porro adipisci
quam magni perferendis vero error necessitatibus, reprehenderit
corrupti labore deleniti ea non cumque nobis harum incidunt?
Commodi ratione quis obcaecati vel eligendi excepturi quasi.
Libero quae earum neque consequuntur vero tempora! Aliquid
officiis architecto sunt pariatur maiores consectetur officia
doloribus iste provident soluta ab, distinctio vel illum
voluptates nulla ea doloremque odio nemo voluptas.
</p>
</div>
result is still the same though:
.swiper-container {
margin: 0 auto;
position: relative;
overflow: hidden;
list-style: none;
padding: 0;
z-index: 1;
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-transition-property: -webkit-transform;
transition-property: -webkit-transform;
-o-transition-property: transform;
transition-property: transform;
transition-property: transform, -webkit-transform;
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
.swiper-container-multirow > .swiper-wrapper {
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.swiper-slide {
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative;
-webkit-transition-property: -webkit-transform;
transition-property: -webkit-transform;
-o-transition-property: transform;
transition-property: transform;
transition-property: transform, -webkit-transform;
}
#portfolio {
background: #00ff40;
padding: 30px 10px 30px 10px;
}
#portfolio h1 {
margin-bottom: 0px;
margin: 0;
text-align: center;
font-size: 20px;
border-bottom: 3px solid rgb(223, 0, 0);
}
.app {
position: absolute;
display: flex;
flex-wrap: wrap;
height: 100%;
background-color: #bc2a8d;
}
.app .image {
display: flex;
flex-direction: column;
min-width: 100%;
justify-content: center;
align-items: center;
height: 30%;
}
.app .image img {
flex-grow: 1;
max-width: 100%;
max-height: 100%;
}
<section id="portfolio" data-aos="fade-right">
<h1 data-aos="slide-right">My Projects</h1>
<!-- Swiper -->
<div class="swiper-container">
<div class="swiper-wrapper">
<div>
<p>
facilis nobis atque quod eum maxime non aspernatur, consequatur
ad. Ad, fuga vero? Aut pariatur deserunt nulla incidunt. Possimus
nesciunt vel at enim. Ea, iste. Doloremque, blanditiis explicabo
atque perferendis laboriosam excepturi cum consequuntur deleniti?
Cumque adipisci asperiores doloremque saepe optio nam temporibus
labore totam. Provident, amet officiis? Numquam dicta officia
nulla autem blanditiis ratione. Nam placeat doloribus veniam
perspiciatis corrupti ratione, odio deserunt repellat, adipisci
recusandae incidunt culpa fuga aspernatur et temporibus illum
suscipit reiciendis saepe quam. Iusto illo culpa veritatis
consequuntur alias quo a nulla soluta eveniet reprehenderit
sapiente veniam nam, commodi est officiis porro aliquid.
Laboriosam debitis eaque commodi nesciunt earum ipsam voluptates,
quo ab. Adipisci consequuntur ut hic repellendus? Eligendi
mollitia, voluptatum sed magni quo aliquam officiis blanditiis qui
tempore adipisci quasi deserunt, nam reiciendis, non nostrum nemo
doloremque eius quisquam eos ad corrupti. Labore accusantium totam
eaque natus iste incidunt praesentium? Voluptatum numquam dolorem
vitae mollitia quae! Molestias laboriosam, sapiente, earum
accusantium unde aperiam itaque corrupti culpa pariatur maiores
obcaecati sint illo veniam. Architecto optio minus voluptas
voluptatum quibusdam, neque odit nihil ex officiis explicabo
voluptates quod. Omnis, ab consequuntur! Quam inventore ut non
odio velit doloribus rem, cum amet iusto quia suscipit? Culpa
minus fuga harum saepe voluptatum ipsum non unde, nemo, deleniti
illo enim mollitia quaerat officia commodi optio laborum
blanditiis corporis laboriosam, tempora obcaecati ipsam eligendi
quam! A, inventore accusantium. Totam quibusdam quam dignissimos
quisquam reprehenderit quidem tenetur fuga voluptates minus
praesentium iste dicta illo eveniet rem eum, sunt omnis quae natus
ea! Quasi enim voluptatibus non. Doloribus, minus odit. Atque in
minus quidem sit, consectetur fugiat obcaecati veritatis,
architecto aperiam eaque sed delectus vero debitis accusantium
laboriosam corporis nemo exercitationem ex ad. Esse consequuntur,
provident non iusto dolorem inventore. Excepturi explicabo
quisquam qui commodi corporis dolore. Minima, beatae alias
perferendis quaerat deserunt, obcaecati eveniet consectetur, odio
quos dolor repellat? Aliquid, impedit quasi ratione blanditiis
ipsam esse odit soluta doloribus. Iste, harum repellendus quaerat
vel iusto ducimus ratione cumque a magni ipsa nihil, fugiat itaque
cupiditate quae non incidunt. Modi nesciunt fugiat quam ipsa magni
officia quasi a error accusamus? Cumque ad, iure necessitatibus
excepturi animi ipsum debitis distinctio maxime, cupiditate
impedit vel quis quo explicabo error deleniti accusamus autem
quae, rerum exercitationem deserunt illo repellat. Enim distinctio
reprehenderit quas? Quos reiciendis nemo provident porro adipisci
quam magni perferendis vero error necessitatibus, reprehenderit
corrupti labore deleniti ea non cumque nobis harum incidunt?
Commodi ratione quis obcaecati vel eligendi excepturi quasi.
Libero quae earum neque consequuntur vero tempora! Aliquid
officiis architecto sunt pariatur maiores consectetur officia
doloribus iste provident soluta ab, distinctio vel illum
voluptates nulla ea doloremque odio nemo voluptas.
</p>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination"></div>
<!-- Add Arrows -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
</div>
</section>
I think is the position in your CSS is causing overlapping.
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
}
.
.
.
.app {
position: absolute;
display: flex;
flex-wrap: wrap;
height: 100%;
background-color: #bc2a8d;
}
Try to add another div outside the class .app that have the hight match the content.
Or Just remove the position.
I'm not sure why you use the position here, so I can't give you an alternative.
If you just want to center it, you can try to use margin.

'Holy Grail' with CSS and inner scrolling

What is the best way to achieve this layout:
I believe that this HTML is good, I just need the CSS:
<div>
<header style="background:blue"></header>
<div>
<nav>
<header style="background:darkgreen"></header>
<ul style="background:green">...</ul>
</nav>
<div>
<header style="background:darkred"></header>
<main style="background:red"></main>
</div>
</div>
</div>
I've tried flexbox, but I'm finding myself doing weird css calc() to get the green and red div's to stretch to the bottom.
(I'm looking for a modern, solid way- not hacks)
I am not sure how to do with your HTML. And not sure what you mean by Holy Grail. I just did this, with semantic tags and which has no hacks, compatible over a range of browsers from Internet Explorer 7:
* {
margin: 0;
padding: 0;
list-style: none;
box-sizing: border-box;
}
body {
background-color: #fcc;
}
header {
position: fixed;
top: 0;
background-color: #66f;
left: 0;
right: 0;
height: 35px;
line-height: 35px;
}
aside {
position: fixed;
left: 0;
top: 35px;
width: 200px;
bottom: 0;
}
aside header {
position: absolute;
background-color: #f90;
}
aside .content {
position: absolute;
top: 35px;
bottom: 0;
left: 0;
right: 0;
overflow: auto;
background-color: #fc6;
}
main {
margin: 40px 10px 10px 210px;
}
main header {
top: 35px;
left: 200px;
background-color: #f33;
line-height: 20px;
height: 20px;
}
<header>
...
</header>
<aside>
<header>
...
</header>
<div class="content">
<p>Content goes here...</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repudiandae unde, eligendi dolores laborum aliquid voluptatem ducimus adipisci dolorem quod ipsum corrupti soluta. Eveniet repellendus sed cumque, consectetur eum magni saepe!</p>
<p>Tenetur debitis nemo, itaque ipsa, eum tempore doloribus mollitia quas nulla accusantium unde officia rerum optio quasi a dicta error distinctio iusto, provident deleniti? Commodi perspiciatis qui ratione autem sequi.</p>
<p>Placeat saepe libero sunt cupiditate. Expedita molestias, error sequi mollitia consequatur iste aliquid deserunt deleniti repellat saepe vitae necessitatibus eum. Soluta nemo dicta fugit repellendus! Dignissimos, aliquid. Iusto, voluptatum, voluptatibus.</p>
<p>Sequi eaque officiis ab dolores aliquid, harum, nemo nam et deleniti quo aliquam, placeat, est natus iusto. Impedit assumenda ullam, tempore saepe rem adipisci, id ex, iste, dignissimos doloribus corrupti!</p>
<p>Illum nemo nihil, exercitationem autem ullam, aliquam dolorum inventore laborum quasi similique neque vero aliquid ad perferendis asperiores iusto? Quo autem recusandae, obcaecati iusto quas minus dicta reprehenderit magni quaerat.</p>
<p>Excepturi magnam rerum facere culpa a harum explicabo nostrum aspernatur. Molestiae voluptates exercitationem hic assumenda nesciunt fugit error nemo sapiente nihil consequatur illo omnis ipsum reiciendis, veniam rerum, eaque asperiores!</p>
<p>Iusto fugit mollitia, non deserunt assumenda nobis saepe id, dolorum cum culpa magni ea consectetur odio possimus facere velit voluptatum aperiam quibusdam hic, esse animi debitis. In qui cupiditate iste!</p>
<p>Eveniet nam vero maiores reiciendis totam pariatur magni tempora, rerum magnam ex, blanditiis a, odit labore consectetur ea modi minus dolore aspernatur voluptates. Magnam, hic sed omnis vel delectus? Eligendi.</p>
<p>Eveniet nesciunt laborum a officiis, numquam magnam, incidunt libero unde dolorum voluptatum, ducimus illo in eum reiciendis ad dolor eos consequuntur saepe ex repellat porro quae. Voluptatum architecto cupiditate officia.</p>
<p>Voluptate, voluptatem culpa explicabo distinctio obcaecati quia molestiae blanditiis optio quis nihil, ipsam similique molestias exercitationem quas itaque, dignissimos quisquam modi. Impedit et dolorum, laboriosam modi aliquam dolor quasi possimus!</p>
<p>Ad dolores consequuntur accusantium laborum, provident laudantium quas voluptatibus exercitationem distinctio adipisci, corporis, amet alias optio nisi! Doloremque incidunt debitis molestiae eius similique facere nobis libero esse temporibus quisquam,
aperiam?</p>
<p>Quis accusamus itaque adipisci modi perspiciatis provident suscipit assumenda totam quo placeat reiciendis, nulla ad aperiam nobis sint velit ducimus eos culpa cupiditate in, quod veritatis nihil ut quidem! Ab.</p>
<p>Consequuntur maiores quas alias labore architecto laboriosam nisi voluptatum impedit rem. Doloribus cumque, unde ducimus possimus, voluptate cupiditate veniam est, sequi, libero velit ipsa ab deleniti earum odio? Minus, earum.</p>
<p>Molestiae iusto placeat vitae mollitia maxime ipsa ad in praesentium quasi cupiditate temporibus doloremque numquam, veritatis esse et odio dolores rerum iure alias quis, quisquam, amet maiores. Sequi, eaque reprehenderit.</p>
<p>Qui hic voluptatum adipisci reprehenderit repudiandae, libero illum aliquam iure, dolores tempora, quo consequuntur odit. Exercitationem blanditiis sunt, ea consequuntur, incidunt dolor harum neque fugiat natus tempore assumenda, deleniti dolorem?</p>
</div>
</aside>
<main>
<header>
...
</header>
</main>
Preview
If you want using flex for that do this:
<div style="display:flex;flex-direction:column;height: 100vh;">
<div style="background-color:blue;height:50px;"></div>
<div style="background-color:red;flex:1;display: flex;">
<div style="background-color: green;flex: 1;">
<div style="background-color: darkgreen;height: 80px;"></div>
<div style="overflow-y: scroll;"></div>
</div>
<div style="background-color: red;flex: 2;">
<div id="navBar" style="background-color:darkred;height:40px;"></div>
</div>
</div>
</div>
Sorry my code is not clean.

How can I make a scrolling div take up less than 100% of its parent?

I feel like this should be a really simple problem, but I can't seem to figure it out.
HTML:
<div class="outer">
<div class="inner">
<!-- lots of text -->
</div>
<div class="inner-bottom">
This text should be inside the blue background
</div>
</div>
CSS:
.outer {
height: 300px;
background: #99EEFF;
}
.inner {
height: 100%;
overflow: scroll;
}
.inner-bottom {
text-align: center
}
Fiddle
The goal is to have both inner divs display inside their parent, which has a background specified to visually organize them.
If I don't specify height: 100%; on .inner, it overflows, no matter which I set on the display property. In fact, some values of display even cause height: 100% to not work.
Anyway, I'd really like .inner's size to be dictated by .outer's size, rather than vice versa. How do I do this?
You can do this with Flexbox just use flex: 1 on .inner
body {
margin: 0px;
}
.outer {
height: 300px;
flex-direction: column;
display: flex;
background: #99EEFF;
}
.inner {
flex: 1;
overflow-y: scroll;
}
.inner-bottom {
text-align: center
}
<div class="outer">
<div class="inner">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veritatis fugiat nulla asperiores rerum sed dignissimos vitae odit consectetur perferendis! Suscipit qui hic iste est tempora blanditiis odit distinctio odio quas amet. Fuga mollitia maxime labore non odio laborum ea facilis distinctio blanditiis exercitationem atque et, facere illo repellat praesentium inventore iure. Minus error expedita veritatis doloribus esse, at cum molestias odit saepe animi harum similique, dolore distinctio est a quidem beatae! Aliquam, similique autem ipsa vitae eligendi iure consectetur. Quasi, odio expedita consequatur, maxime, libero maiores incidunt quia debitis hic provident cum, deleniti? Illo id pariatur, recusandae tenetur! Beatae cum, fuga! Nulla animi deserunt molestiae eum quia dolorum necessitatibus quod eos saepe sint eaque id est cupiditate impedit, doloribus consequuntur ipsum maiores consequatur alias. Magnam accusantium ab quia laudantium iste eum nobis sequi error, atque suscipit repellendus officiis laboriosam alias eos ullam. At inventore quam ullam officia sequi, aliquam. Aperiam dicta eum illo tempora, quas doloribus ducimus sequi placeat, aut id quaerat iure officiis nostrum accusamus atque odio repudiandae saepe autem distinctio. Qui expedita cum animi totam maxime minima labore vitae reprehenderit eligendi porro odio, voluptatem obcaecati sint enim, velit dolores, dolore fugit incidunt sit. Doloremque suscipit, quia libero. Odit nihil beatae eaque suscipit aperiam hic tempore ipsam non quam doloremque, nesciunt voluptate laboriosam a animi assumenda iste velit sunt cumque minima. Quos perferendis, labore. Consectetur quod sequi commodi nesciunt suscipit, molestiae, quia est cum. Beatae nulla, suscipit ducimus nobis voluptas illum enim dicta distinctio similique aliquam sapiente impedit ea non corrupti omnis est obcaecati labore laboriosam quaerat tempora molestias sunt laudantium doloremque? Perspiciatis dolore, excepturi, voluptate nulla nam culpa nostrum dolor, rerum quas iure dolorem incidunt consequatur dolores dolorum laborum ipsam eaque quasi accusamus voluptatum voluptates quisquam. Perspiciatis maxime, assumenda itaque eligendi dolore iste libero debitis ea sint expedita eius illum blanditiis inventore officiis voluptates minima iusto fuga nulla veritatis quo deserunt ad quisquam. Cumque numquam nihil tenetur itaque obcaecati soluta, libero possimus dolore ipsa eum neque amet sunt ad sapiente quos quae deleniti voluptas illo molestiae. Nihil officiis, commodi fugiat architecto blanditiis! Atque neque numquam nobis voluptates accusantium libero tempore veniam fugit officiis alias soluta rem enim, totam aut eos, nam. Fuga labore fugiat, suscipit consequatur ipsum quia praesentium. Reprehenderit praesentium maxime, ea maiores repellat, facere architecto quasi vitae a hic similique impedit commodi dolor, quas necessitatibus saepe ipsum. Nulla distinctio corporis dolor praesentium eum laudantium, asperiores magni minus tempora, iusto veritatis fuga. Totam ratione incidunt, neque blanditiis iure corporis consectetur ea dignissimos nesciunt tenetur ab placeat, harum eaque laboriosam numquam quas ipsum! Earum aperiam, voluptatibus assumenda quisquam dolorem ut eius non provident numquam nostrum rerum, magnam voluptatum beatae quibusdam quasi ad consequuntur perspiciatis fugiat soluta ipsa excepturi! Earum, accusamus quidem! Quos, eaque inventore perferendis quia officiis tempore sequi repellendus incidunt quo, numquam aut mollitia, atque earum architecto. Harum ipsa debitis necessitatibus quos sapiente ad deleniti quod non nihil libero iure voluptatem, omnis possimus tempore eos recusandae! Provident modi nulla dicta, aut possimus dolores nesciunt officiis sunt! Sunt!
</div>
<div class="inner-bottom">
This text should be inside the blue background
</div>
</div>
Flexbox is the way to go here, but if you want a non-flex answer: If you are assigning 300px to the outer div then you can assign fixed pixel values to the inner divs. how big do you want them to be? You can do:
.inner {
height: calc(100% - (insert height of .inner-bottom));
}
Or you can just use percentages that add up to 100 for the height of both elements. Or you can just use pixels that add up to 300. Your call.
You can set the height of the inner element , that is the best way
.inner {
height: 275px;
overflow-y: auto;
}
Use a padding bottom to the parent element, that is 'outer' class.
.outer {
height: 300px;
background: #99EEFF;
padding-bottom: 30px;
}
The text in the inner-bottom is out of the blue background, because the .inner div takes up all available height in the .outer DIV.
If you set the height of the .inner DIV to less than 100%, there will still be some space for the .inner-bottom to fit in the .outer DIV.
So, changing
height: 100%
to for example
height:65%
in the .inner should work.
PS. You can change the 65% to any value less than 100% and it should still work properly.
I figured out a simpler, more dynamic, and more cross-compatible approach using tables.
HTML:
<div class="table">
<div class="tr greedy">
<div class="td">
<div class="scrollable">
<!-- Lots of text -->
</div>
</div>
</div>
<div class="tr">
<div class="td centered">
Text should be inside the blue box
</div>
</div>
</div>
CSS:
.table {
display: table;
height: 300px;
background: #99EEFF;
}
.tr {
display: table-row;
}
.td {
display: table-cell;
}
.scrollable {
max-width: 100%;
max-height: 100%;
overflow: auto;
}
.greedy {
height: 100%;
}
.centered {
text-align: center;
}