CSS Grid layout for dynamic content - css

I wonder how can I set (with CSS grid only) layout for content that could be dynamic.
Let's say I have a Header, Body, and a sidebar.
the sidebar can be displayed, or not.
How can I apply such behaviour with CSS grid?
I want the header and the chart content to stretch over the .sidebar area when the .sidebar is not displayed
// Comment OR uncomment the .sidebar HTML tag
html, body {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
display: flex;
}
.wrapper {
background: #fed;
height: 100%;
display: grid;
grid-template-columns: auto 300px;
grid-template-rows: 80px auto;
grid-auto-rows: 100px;
grid-template-areas:
"header sidebar"
"chart sidebar";
}
.header {
background: hotpink;
grid-column: 1/ 2;
grid-row: 1 /1;
overflow: auto;
}
.chart {
background: lightblue;
grid-column: 1/ 2;
grid-row: 2 / 2;
}
.sidebar {
background: rgba(255, 209, 62, 0.7);
grid-column: 2/ 2;
grid-row: 1 /span 2;
}
<div class="wrapper">
<div class="header"><div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio officiis deserunt cum, iusto veniam, perspiciatis atque dolore eum ab. Accusamus ratione repellat, laboriosam magnam exercitationem illum tempore quidem nam eveniet!</div>
<div>Iste nobis eveniet quibusdam aspernatur necessitatibus dolore perspiciatis fuga, quaerat ipsum minus eum placeat iure quas! Adipisci optio fugit laudantium voluptatem maiores, reiciendis laboriosam cupiditate blanditiis, quia consequatur voluptas! Nihil.</div>
<div>Nam dolorem atque, maxime ipsa aspernatur quo eveniet necessitatibus, dignissimos incidunt, sapiente quas eius tempore provident rem accusantium explicabo quia. Suscipit dolorem quo, voluptatum corporis. Enim minus repellat iure illum.</div>
<div>Ad voluptas, hic a vitae recusandae sit dignissimos beatae nemo eaque iusto culpa repudiandae quas asperiores repellendus nesciunt mollitia atque pariatur, reprehenderit rerum. Perspiciatis quod blanditiis deserunt iure consectetur tempore.</div>
<div>Placeat id, non quos incidunt rem, cumque, enim quidem consectetur obcaecati, dolor nihil beatae! Officiis necessitatibus nobis esse quaerat! Consectetur maiores praesentium libero hic at rem iste, assumenda vitae aperiam.</div>
<div>Illo tenetur libero nemo perspiciatis, quisquam minima sequi voluptate, dignissimos maiores hic aliquam et nobis quo iure, doloribus inventore repudiandae assumenda. Ad labore, quas alias explicabo excepturi saepe ullam repellendus!</div>
<div>Sint iure, hic quis eaque, deleniti asperiores quasi obcaecati cumque modi, iste laborum? Unde fugit quos itaque, molestias dolorum vero distinctio iste nisi ex repellat ut, voluptatem, ratione consectetur nihil?</div>
<div>Laudantium veniam aliquam provident doloremque excepturi eveniet iste illo consequatur eaque aut, ad, quae fugiat molestiae vitae autem laboriosam nulla accusantium. Tempora necessitatibus natus adipisci ab non, nihil quasi corporis!</div>
<div>Explicabo cumque unde tempore nihil, id. Nobis, iure veniam, dignissimos ullam nemo cumque voluptates voluptate atque eius unde tempora et, eos porro quo aut debitis. Consequatur neque, quaerat quae deleniti.</div>
<div>Repellat doloribus ipsa officia, debitis aspernatur blanditiis sit dignissimos nesciunt cum. Perspiciatis molestiae distinctio quas magni similique, mollitia obcaecati modi est ab quasi, ut. Sit libero adipisci sint consectetur molestias.</div></div>
<div class="chart">chart</div>
<!-- Comment / uncomment the sidebar -->
<div class="sidebar">sidebar</div>
</div>

No need to define the area for the sidebar. You can define the template to be one column and then force the sidebar to be on a second column which will create that column only when the sidebar is there (you will have an implicit defined grid)
// Comment OR uncomment the .sidebar HTML tag
body {
padding: 0;
margin: 0;
}
.wrapper {
background: #fed;
min-height: 100vh;
display: grid;
grid-template-rows: 80px auto;
grid-auto-rows: 100px;
}
.header {
background: hotpink;
overflow: auto;
}
.chart {
background: lightblue;
}
.sidebar {
background: rgba(255, 209, 62, 0.7);
grid-column: 2/ 2;
grid-row: 1 /span 2;
width:300px;
}
<div class="wrapper">
<div class="header"><div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio officiis deserunt cum, iusto veniam, perspiciatis atque dolore eum ab. Accusamus ratione repellat, laboriosam magnam exercitationem illum tempore quidem nam eveniet!</div>
<div>Iste nobis eveniet quibusdam aspernatur necessitatibus dolore perspiciatis fuga, quaerat ipsum minus eum placeat iure quas! Adipisci optio fugit laudantium voluptatem maiores, reiciendis laboriosam cupiditate blanditiis, quia consequatur voluptas! Nihil.</div>
<div>Nam dolorem atque, maxime ipsa aspernatur quo eveniet necessitatibus, dignissimos incidunt, sapiente quas eius tempore provident rem accusantium explicabo quia. Suscipit dolorem quo, voluptatum corporis. Enim minus repellat iure illum.</div>
<div>Ad voluptas, hic a vitae recusandae sit dignissimos beatae nemo eaque iusto culpa repudiandae quas asperiores repellendus nesciunt mollitia atque pariatur, reprehenderit rerum. Perspiciatis quod blanditiis deserunt iure consectetur tempore.</div>
<div>Placeat id, non quos incidunt rem, cumque, enim quidem consectetur obcaecati, dolor nihil beatae! Officiis necessitatibus nobis esse quaerat! Consectetur maiores praesentium libero hic at rem iste, assumenda vitae aperiam.</div>
<div>Illo tenetur libero nemo perspiciatis, quisquam minima sequi voluptate, dignissimos maiores hic aliquam et nobis quo iure, doloribus inventore repudiandae assumenda. Ad labore, quas alias explicabo excepturi saepe ullam repellendus!</div>
<div>Sint iure, hic quis eaque, deleniti asperiores quasi obcaecati cumque modi, iste laborum? Unde fugit quos itaque, molestias dolorum vero distinctio iste nisi ex repellat ut, voluptatem, ratione consectetur nihil?</div>
<div>Laudantium veniam aliquam provident doloremque excepturi eveniet iste illo consequatur eaque aut, ad, quae fugiat molestiae vitae autem laboriosam nulla accusantium. Tempora necessitatibus natus adipisci ab non, nihil quasi corporis!</div>
<div>Explicabo cumque unde tempore nihil, id. Nobis, iure veniam, dignissimos ullam nemo cumque voluptates voluptate atque eius unde tempora et, eos porro quo aut debitis. Consequatur neque, quaerat quae deleniti.</div>
<div>Repellat doloribus ipsa officia, debitis aspernatur blanditiis sit dignissimos nesciunt cum. Perspiciatis molestiae distinctio quas magni similique, mollitia obcaecati modi est ab quasi, ut. Sit libero adipisci sint consectetur molestias.</div></div>
<div class="chart">chart</div>
<!-- Comment / uncomment the sidebar -->
<div class="sidebar">sidebar</div>
</div>
Without sidebar:
// Comment OR uncomment the .sidebar HTML tag
body {
padding: 0;
margin: 0;
}
.wrapper {
background: #fed;
min-height: 100vh;
display: grid;
grid-template-rows: 80px auto;
grid-auto-rows: 100px;
}
.header {
background: hotpink;
overflow: auto;
}
.chart {
background: lightblue;
}
.sidebar {
background: rgba(255, 209, 62, 0.7);
grid-column: 2/ 2;
grid-row: 1 /span 2;
width:300px;
}
<div class="wrapper">
<div class="header"><div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Distinctio officiis deserunt cum, iusto veniam, perspiciatis atque dolore eum ab. Accusamus ratione repellat, laboriosam magnam exercitationem illum tempore quidem nam eveniet!</div>
<div>Iste nobis eveniet quibusdam aspernatur necessitatibus dolore perspiciatis fuga, quaerat ipsum minus eum placeat iure quas! Adipisci optio fugit laudantium voluptatem maiores, reiciendis laboriosam cupiditate blanditiis, quia consequatur voluptas! Nihil.</div>
<div>Nam dolorem atque, maxime ipsa aspernatur quo eveniet necessitatibus, dignissimos incidunt, sapiente quas eius tempore provident rem accusantium explicabo quia. Suscipit dolorem quo, voluptatum corporis. Enim minus repellat iure illum.</div>
<div>Ad voluptas, hic a vitae recusandae sit dignissimos beatae nemo eaque iusto culpa repudiandae quas asperiores repellendus nesciunt mollitia atque pariatur, reprehenderit rerum. Perspiciatis quod blanditiis deserunt iure consectetur tempore.</div>
<div>Placeat id, non quos incidunt rem, cumque, enim quidem consectetur obcaecati, dolor nihil beatae! Officiis necessitatibus nobis esse quaerat! Consectetur maiores praesentium libero hic at rem iste, assumenda vitae aperiam.</div>
<div>Illo tenetur libero nemo perspiciatis, quisquam minima sequi voluptate, dignissimos maiores hic aliquam et nobis quo iure, doloribus inventore repudiandae assumenda. Ad labore, quas alias explicabo excepturi saepe ullam repellendus!</div>
<div>Sint iure, hic quis eaque, deleniti asperiores quasi obcaecati cumque modi, iste laborum? Unde fugit quos itaque, molestias dolorum vero distinctio iste nisi ex repellat ut, voluptatem, ratione consectetur nihil?</div>
<div>Laudantium veniam aliquam provident doloremque excepturi eveniet iste illo consequatur eaque aut, ad, quae fugiat molestiae vitae autem laboriosam nulla accusantium. Tempora necessitatibus natus adipisci ab non, nihil quasi corporis!</div>
<div>Explicabo cumque unde tempore nihil, id. Nobis, iure veniam, dignissimos ullam nemo cumque voluptates voluptate atque eius unde tempora et, eos porro quo aut debitis. Consequatur neque, quaerat quae deleniti.</div>
<div>Repellat doloribus ipsa officia, debitis aspernatur blanditiis sit dignissimos nesciunt cum. Perspiciatis molestiae distinctio quas magni similique, mollitia obcaecati modi est ab quasi, ut. Sit libero adipisci sint consectetur molestias.</div></div>
<div class="chart">chart</div>
<!-- Comment / uncomment the sidebar
<div class="sidebar">sidebar</div>
-->
</div>

Related

How to fix a div relative to the parent div on scroll

I'm trying to position a div to the bottom right of the parent div. As shown in the image.
The parent div is filled with text so I have used the overflow-y property on the parent.
But when I tried to scroll the parent div, the child container started scrolling with it. I'm expecting the bottom container stay as it is at bottom right even on scroll.
Attatching the codesandbox link: https://codesandbox.io/s/relaxed-night-g96xce?file=/index.html
Code:
.text {
color: white;
font-size: 15px;
text-align: right;
}
.usage_body {
border: 1px solid #000;
width: 300px;
height: 300px;
padding: 10px;
overflow-y: scroll;
position: relative;
}
.chart-wrapper__graphLabel {
position: absolute;
bottom: 0;
right: 0;
width: 300px;
height: 30px;
background-color: #00f;
}
<div class="usage_body">
<div class="chart-wrapper">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Voluptas tempora nisi vitae tempore at voluptate similique recusandae? Modi quas qui nesciunt libero, autem, est officia ducimus nobis velit cum asperiores saepe, facilis nam corrupti ad eaque
laudantium provident nihil magnam. Delectus facere iure distinctio officiis, fuga rem molestiae magnam quam iusto enim. Repellat minima at, nostrum placeat consequuntur iusto quaerat molestias, pariatur aut odio, maiores cumque? Porro a sed nulla
architecto consequatur maxime praesentium asperiores ea, quasi enim veniam exercitationem neque necessitatibus, libero nemo modi, aspernatur ex sapiente quod. Nihil similique cum nobis quibusdam unde itaque et accusantium impedit. Veniam, illum! Eum
dolorum suscipit molestiae nihil officia nostrum deserunt laborum hic perferendis dolores asperiores illo perspiciatis, nemo tenetur harum recusandae explicabo quis ipsum amet ipsam vel fugiat assumenda eaque quia. Fugiat asperiores fugit voluptatum
aspernatur, animi facilis eos. Quod laudantium sunt eaque recusandae porro debitis consectetur nemo in placeat unde praesentium, obcaecati esse deserunt. Voluptate sit, ullam veniam doloribus optio blanditiis magni vero tempora sapiente! Explicabo
molestiae vel distinctio inventore, repellendus est mollitia tempora quae. Eius animi quisquam tenetur? Dolores placeat dolore sed nobis laboriosam. Dolore, unde! Recusandae amet natus odio totam cumque magnam unde mollitia pariatur iusto expedita.
Est?
</div>
<div class="chart-wrapper__graphLabel">
<p class="text">
position me
</p>
</div>
</div>
You can use position:sticky as per the comments but the padding is also applied to the sticky element so you also have to set the padding-bottom to 0 or use translate to fix it to the very bottom of the frame like this.
Padding-bottom
.text {
color: white;
font-size: 15px;
text-align: right;
margin:0;
}
.usage_body {
border: 1px solid #000;
width: 300px;
height: 300px;
padding: 10px;
padding-bottom:0;
overflow-y: scroll;
position: relative;
}
.chart-wrapper__graphLabel {
position: sticky;
bottom: 0;
right: 0;
width: 300px;
height: 30px;
background-color: #00f;
}
<div class="usage_body">
<div class="chart-wrapper">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Voluptas tempora nisi vitae tempore at voluptate similique recusandae? Modi quas qui nesciunt libero, autem, est officia ducimus nobis velit cum asperiores saepe, facilis nam corrupti ad eaque
laudantium provident nihil magnam. Delectus facere iure distinctio officiis, fuga rem molestiae magnam quam iusto enim. Repellat minima at, nostrum placeat consequuntur iusto quaerat molestias, pariatur aut odio, maiores cumque? Porro a sed nulla
architecto consequatur maxime praesentium asperiores ea, quasi enim veniam exercitationem neque necessitatibus, libero nemo modi, aspernatur ex sapiente quod. Nihil similique cum nobis quibusdam unde itaque et accusantium impedit. Veniam, illum! Eum
dolorum suscipit molestiae nihil officia nostrum deserunt laborum hic perferendis dolores asperiores illo perspiciatis, nemo tenetur harum recusandae explicabo quis ipsum amet ipsam vel fugiat assumenda eaque quia. Fugiat asperiores fugit voluptatum
aspernatur, animi facilis eos. Quod laudantium sunt eaque recusandae porro debitis consectetur nemo in placeat unde praesentium, obcaecati esse deserunt. Voluptate sit, ullam veniam doloribus optio blanditiis magni vero tempora sapiente! Explicabo
molestiae vel distinctio inventore, repellendus est mollitia tempora quae. Eius animi quisquam tenetur? Dolores placeat dolore sed nobis laboriosam. Dolore, unde! Recusandae amet natus odio totam cumque magnam unde mollitia pariatur iusto expedita.
Est?
</div>
<div class="chart-wrapper__graphLabel">
<p class="text">
position me
</p>
</div>
</div>
Translate with css variable
.text {
color: white;
font-size: 15px;
text-align: right;
margin:0;
}
.usage_body {
--padding: 10px;
border: 1px solid #000;
width: 300px;
height: 300px;
padding: var(--padding);
overflow-y: scroll;
position: relative;
}
.chart-wrapper__graphLabel {
position: sticky;
bottom: 0;
right: 0;
width: 300px;
height: 30px;
transform:translateY(var(--padding));
background-color: #00f;
}
<div class="usage_body">
<div class="chart-wrapper">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Voluptas tempora nisi vitae tempore at voluptate similique recusandae? Modi quas qui nesciunt libero, autem, est officia ducimus nobis velit cum asperiores saepe, facilis nam corrupti ad eaque
laudantium provident nihil magnam. Delectus facere iure distinctio officiis, fuga rem molestiae magnam quam iusto enim. Repellat minima at, nostrum placeat consequuntur iusto quaerat molestias, pariatur aut odio, maiores cumque? Porro a sed nulla
architecto consequatur maxime praesentium asperiores ea, quasi enim veniam exercitationem neque necessitatibus, libero nemo modi, aspernatur ex sapiente quod. Nihil similique cum nobis quibusdam unde itaque et accusantium impedit. Veniam, illum! Eum
dolorum suscipit molestiae nihil officia nostrum deserunt laborum hic perferendis dolores asperiores illo perspiciatis, nemo tenetur harum recusandae explicabo quis ipsum amet ipsam vel fugiat assumenda eaque quia. Fugiat asperiores fugit voluptatum
aspernatur, animi facilis eos. Quod laudantium sunt eaque recusandae porro debitis consectetur nemo in placeat unde praesentium, obcaecati esse deserunt. Voluptate sit, ullam veniam doloribus optio blanditiis magni vero tempora sapiente! Explicabo
molestiae vel distinctio inventore, repellendus est mollitia tempora quae. Eius animi quisquam tenetur? Dolores placeat dolore sed nobis laboriosam. Dolore, unde! Recusandae amet natus odio totam cumque magnam unde mollitia pariatur iusto expedita.
Est?
</div>
<div class="chart-wrapper__graphLabel">
<p class="text">
position me
</p>
</div>
</div>
Using margin on the child element
Possibly a more straightforward approach would be to apply a margin to the content div then you can just position the footer right where you want it
.text {
color: white;
font-size: 15px;
text-align: right;
margin:0;
}
.usage_body {
border: 1px solid #000;
width: 300px;
height: 300px;
overflow-y: scroll;
position: relative;
}
.chart-wrapper {
margin:10px;
}
.chart-wrapper__graphLabel {
--left-margin: 10px;
position: sticky;
bottom: 0;
/* note, setting right:0 does not appear to work on widths less than 100% so used left:0 and transform:translateX instead */
left: 0;
width: calc(100% - var(--left-margin));
height: 30px;
transform: translateX(var(--left-margin));
background-color: #00f;
}
<div class="usage_body">
<div class="chart-wrapper">
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Voluptas tempora nisi vitae tempore at voluptate similique recusandae? Modi quas qui nesciunt libero, autem, est officia ducimus nobis velit cum asperiores saepe, facilis nam corrupti ad eaque
laudantium provident nihil magnam. Delectus facere iure distinctio officiis, fuga rem molestiae magnam quam iusto enim. Repellat minima at, nostrum placeat consequuntur iusto quaerat molestias, pariatur aut odio, maiores cumque? Porro a sed nulla
architecto consequatur maxime praesentium asperiores ea, quasi enim veniam exercitationem neque necessitatibus, libero nemo modi, aspernatur ex sapiente quod. Nihil similique cum nobis quibusdam unde itaque et accusantium impedit. Veniam, illum! Eum
dolorum suscipit molestiae nihil officia nostrum deserunt laborum hic perferendis dolores asperiores illo perspiciatis, nemo tenetur harum recusandae explicabo quis ipsum amet ipsam vel fugiat assumenda eaque quia. Fugiat asperiores fugit voluptatum
aspernatur, animi facilis eos. Quod laudantium sunt eaque recusandae porro debitis consectetur nemo in placeat unde praesentium, obcaecati esse deserunt. Voluptate sit, ullam veniam doloribus optio blanditiis magni vero tempora sapiente! Explicabo
molestiae vel distinctio inventore, repellendus est mollitia tempora quae. Eius animi quisquam tenetur? Dolores placeat dolore sed nobis laboriosam. Dolore, unde! Recusandae amet natus odio totam cumque magnam unde mollitia pariatur iusto expedita.
Est?
</div>
<div class="chart-wrapper__graphLabel">
<p class="text">
position me
</p>
</div>
</div>

Why main scrollbar color doesn't change in Firefox?

I have a problem with styling the scrollbar for Firefox using var(...).
As we can see code below:
* {
&::-webkit-scrollbar {
width: 8px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
border-radius: 4px;
background: var(--sb-bgc);
}
scrollbar-color: var(--sb-bgc) transparent;
scrollbar-width: thin;
}
everything should work fine but the main scrollbar in Firefox is not reading property in var(...). Deep in site, other scrollbars in Firefox work correctly...
If I use color directly, such as red or some variable like $someVaraible everything works fine. The problem is only when I use var(...) - I need it to switch colors between light and dark themes.
EDIT:
I'm using Windows 10.
Add data-theme="light" or data-theme="dark" to the body tag.
In the body tag add some div with class root.
In some style.scss file copy (this doesn't' work on main page because of var(...) property:
.root {
height: 200vh;
}
$lightBlueColor: #2ac6c7;
$darkBlueColor: #17b9ba;
[data-theme='light'] {
--sb-bgc: #{$lightBlueColor};
}
[data-theme='dark'] {
--sb-bgc: #{$darkBlueColor};
}
* {
&::-webkit-scrollbar {
width: 8px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
&::-webkit-scrollbar-thumb {
border-radius: 4px;
background: var(--sb-bgc);
}
scrollbar-color: var(--sb-bgc) transparent;
scrollbar-width: thin;
}
As I mentioned before the problem is using var(...). If I use $lightBlueColor or #2ac6c7 directly in scrollbar-color there is no problem and everything works fine. When I'm using var(...) nothing happened.
So one more time. I know that I can write the code as below and it will work:
...
scrollbar-color: $lightBlueColor transparent;
...
or
...
scrollbar-color: #2ac6c7 transparent;
...
But it is no solution for me because the color needs to be changed when the theme change. And because of that, I need a working var(...) property solution.
Firefox use diffrent properties for scrollbar stylings you can add
.container {
white-space: nowrap;
overflow-y: hidden;
width: 500px;
**scrollbar-width: thin;
scrollbar-color: #e3e3e3 transparent;**
}
for styling this
for example you can check this link
https://codepen.io/reacraf/pen/ExaBZzZ
I suggest you look at the browser compatibility section on the scrollbar styling page on Mozilla's site.
Currently only Firefox scrollbar feature:
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars
Style the scrollbar for Chrome and other browsers:
https://developer.mozilla.org/en-US/docs/Web/CSS/::-webkit-scrollbar
https://webkit.org/blog/363/styling-scrollbars/
* {
box-sizing: border-box;
/* Firefox only */
scrollbar-width: thin;
scrollbar-color: rebeccapurple green;
}
html,
body {
block-size: 300%;
}
/* Chrome, Edge, Safari... */
::-webkit-scrollbar-button {
background: #5f13ca;
border: 3px solid gray;
border-radius: 4px;
}
::-webkit-scrollbar {
width: 20px;
height: 20px;
}
::-webkit-scrollbar-thumb {
background: #3b82f6;
border: 3px solid gray;
border-radius: 4px;
}
::-webkit-scrollbar-track {
background: #a1a1aa;
}
::-webkit-scrollbar-corner {
background: white;
border: 3px solid gray;
border-radius: 4px;
}
::-webkit-scrollbar-button:vertical:start:increment,
::-webkit-scrollbar-button:vertical:end:decrement,
::-webkit-scrollbar-button:horizontal:start:increment,
::-webkit-scrollbar-button:horizontal:end:decrement {
display: block;
}
.container {
block-size: 50vh;
background-color: #ffecaf;
overflow-y: scroll;
}
.container > .child {
background-color: aquamarine;
inline-size: 50%;
min-block-size: 300%;
margin: auto;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div class="container">
<div class="child">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Atque
molestias incidunt minus ea praesentium repellendus cum officia
quas eius quasi distinctio libero non neque id quis inventore
veritatis nemo, numquam nobis et voluptas voluptatum! Neque,
blanditiis! Dolores vitae architecto ullam accusamus voluptatem
ratione ab sit quae quaerat exercitationem fugiat sunt
laboriosam cupiditate minus omnis labore, facilis sed ut!
Possimus atque non nobis facilis numquam deleniti officiis
accusamus consequuntur nisi repudiandae. Veniam, molestias illum
saepe rerum fuga sapiente dolorum cupiditate pariatur porro ipsa
blanditiis repudiandae illo eligendi, tempora esse, placeat
officiis. Facilis, quasi. Facilis inventore hic, vel sint a
fugit nesciunt.
</div>
</div>
</body>
</html>
EDIT:
I edited the code on Firefox and realized that; If HTML and BODY elements are the same size, HTML's scrollbar is valid. Therefore, you can place the attribute named "data-theme" in HTML or reduce the width of BODY and add a scrollbar to BODY.
only firefox:
html,
body {
block-size: 200vh;
}
/* In case you want to add scrollbars to *HTML* and *BODY* elements separately.
html {
overflow: hidden;
background: white;
}
body {
overflow: auto;
background: rgba(240, 255, 157, 0.5);
inline-size: 50%;
block-size: 500px;
}
*/
[data-theme=light] {
--sb-bgc: red;
}
[data-theme=dark] {
--sb-bgc: blue;
}
* {
scrollbar-color: var(--sb-bgc) transparent;
scrollbar-width: thin;
}
.scrollable {
overflow-y: auto;
inline-size: min(300px, 50%);
block-size: 300px;
outline: 1px solid red;
}
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<p>
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Porro
labore animi officia, ipsam doloribus atque quis cupiditate sequi
omnis explicabo unde autem culpa, ratione quisquam odit placeat
veniam debitis, saepe temporibus? Sequi, aperiam modi excepturi
itaque, facilis exercitationem, consequuntur quidem obcaecati cumque
aut aspernatur esse quibusdam. Ipsam officia incidunt numquam
accusamus architecto maxime error labore a suscipit ipsa reiciendis
cum sunt voluptas adipisci rerum placeat minima molestias amet
dolorum nihil, possimus nam! Nesciunt perspiciatis, magni eum iure
dolor, harum sed, recusandae placeat quam aspernatur dolorem.
Debitis dolore laborum repellat cum non, fuga quibusdam animi
accusantium tempore nisi maxime repudiandae esse sed perspiciatis
quas minima reiciendis? Architecto nisi laborum inventore
perferendis iure repellat officia possimus quisquam, eveniet beatae
tenetur illum nostrum cum alias, vitae dolores earum, ut quaerat
error. Repellendus iure impedit inventore a nobis optio, voluptatum
excepturi dolorem illo earum iste accusantium quae numquam quis
eaque consequatur soluta? Recusandae dolore iste, nihil porro alias
esse earum libero suscipit accusantium consequuntur nobis deserunt
necessitatibus quos facere doloribus vitae, tempore enim culpa
officiis magni fuga placeat vero? Ratione ex quo quod exercitationem
quae nesciunt molestiae delectus aperiam magnam aliquam inventore,
tempora cum blanditiis deleniti id quibusdam possimus recusandae
accusantium nostrum eum alias libero incidunt nisi! Earum delectus
itaque deleniti perferendis, ullam nam recusandae, odio repellendus
repellat, suscipit laudantium voluptate id facere necessitatibus
distinctio explicabo quibusdam eos doloremque error qui sed officia
ratione dicta consectetur! Esse vero qui doloremque explicabo dicta
tempora delectus sapiente, corporis ab ipsam optio perferendis eius
dolorum. Libero vel sed ad impedit aspernatur maxime nostrum
repellat possimus dolorem ipsam exercitationem praesentium in, neque
sit molestiae obcaecati ullam ipsa ratione. Commodi ipsum deserunt
quisquam suscipit adipisci accusamus! Assumenda eius nesciunt error
adipisci ad id minus consequuntur, sed eveniet, perferendis a quos
illum necessitatibus fuga eum dolores harum at. Sint deserunt quae
doloremque obcaecati? Tempore, necessitatibus hic modi, minus sed
atque voluptatibus alias assumenda dicta blanditiis porro qui
reiciendis est. Provident ea odio nihil eligendi ad facere quas quis
animi suscipit hic dicta enim rem, a laboriosam dolorem culpa
placeat, delectus, corrupti aliquid! Accusamus nisi vitae
dignissimos cum praesentium nemo velit, nostrum enim voluptate,
mollitia voluptatibus repellendus necessitatibus. Earum dolorum
quasi maiores aliquam aspernatur facere recusandae, fugit
reprehenderit obcaecati laboriosam totam placeat a? Dolorem nobis
ratione quos provident! Rem reprehenderit velit est ullam expedita,
repellat dicta adipisci id alias? Tenetur amet soluta officia eos
neque repudiandae ullam aliquid unde quasi quibusdam dolore, itaque
qui nulla deserunt voluptas alias sapiente odit quisquam accusamus
quae rerum cumque sint quos nisi! Necessitatibus cum neque harum
sapiente labore tenetur exercitationem, ad magni eveniet maiores
praesentium dolores ratione dicta soluta consequatur dolorem alias
quos sed. Veritatis adipisci, nihil accusamus nostrum eaque
voluptatum aspernatur quaerat voluptate nisi nobis dolores illo
laboriosam ducimus quas facilis minima nesciunt ipsum. Repudiandae
amet veritatis est, illum expedita deserunt dicta, provident,
impedit deleniti possimus vel molestiae facilis explicabo atque.
Consectetur excepturi porro rem consequatur sequi quod atque
repellat unde quis recusandae harum earum incidunt soluta aut
ducimus modi illo esse, dolor repellendus?
</p>
<div class="scrollable" data-theme="dark">
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Corporis
nesciunt accusamus consequatur similique adipisci iusto tempore
aliquam sapiente esse perferendis deserunt minus modi placeat id
dolor, ut fuga? Hic, illum id! Laboriosam quaerat numquam ipsum iste
repellat nam obcaecati possimus, explicabo odio sed impedit vero
exercitationem quae animi veritatis dignissimos non quam
praesentium! Eveniet obcaecati ea ad exercitationem quia aperiam
aliquam fuga ullam maiores dicta laboriosam temporibus vitae alias
incidunt unde nobis sint, eligendi, recusandae debitis perspiciatis
voluptatibus magnam odio? Amet accusantium est quisquam sed aut
saepe, esse perferendis vitae minima necessitatibus, a, doloremque
earum repellat nulla error labore vero laborum beatae provident
incidunt neque. Provident, aperiam. Recusandae ipsum maiores
explicabo nihil, eius quaerat assumenda molestiae reprehenderit
laboriosam neque odit nemo asperiores totam repudiandae corrupti
natus obcaecati alias adipisci animi praesentium fugit quisquam cum
blanditiis eaque. Voluptate tempora magni, dicta maiores similique
aperiam dolorum totam soluta placeat consectetur commodi? Quos sed,
esse ea voluptatibus fugiat recusandae? Nam harum consequuntur
quisquam iusto itaque, molestiae exercitationem distinctio animi
ratione earum voluptatibus iste ab modi. Laudantium, repudiandae.
Perspiciatis ut voluptatem laborum nemo voluptas repellendus
necessitatibus, autem iusto dolor vel inventore ex quae facere
nulla, reiciendis temporibus facilis provident. Animi, illum
distinctio non quae ea a incidunt numquam, odio quo dolorum ipsa
vero ut praesentium deleniti, nisi voluptas! Deleniti voluptate
alias, repudiandae quod aperiam quasi ad? Fuga iusto consequuntur
architecto necessitatibus aliquid sed perspiciatis ullam veniam
reprehenderit sunt accusantium velit commodi officiis adipisci at
quas nihil quia sit nobis, veritatis eos et illum placeat ex. Alias
voluptatibus pariatur distinctio illo omnis ex fugit aut aliquid
animi. Veniam eveniet aperiam omnis amet adipisci hic, esse
doloribus, velit neque sequi cupiditate ea dicta architecto officia?
Autem, voluptatem tenetur aspernatur accusantium dolores deserunt
eius illum saepe ab id veniam deleniti neque corporis voluptate qui
cum eaque similique tempore voluptas sed iure modi perspiciatis ut!
Eaque vero voluptas repellendus facere, sint autem maxime unde
adipisci, numquam cumque accusantium fugit eligendi quam quidem
optio harum officiis consequatur porro natus, explicabo dolor
officia ipsam fugiat quaerat? Quod labore non itaque minus veniam
quam suscipit officia, praesentium asperiores! Unde nulla molestiae
consectetur sed cupiditate sit et minima, dignissimos quisquam esse
ipsam voluptatem optio vel eos. Maiores rerum nulla libero fugit
iure quidem neque, exercitationem tenetur eum natus aliquid
perferendis id corrupti veritatis inventore quibusdam nostrum
facilis voluptatum! Reprehenderit quam ipsam voluptatem quasi velit
dolore quod doloribus nihil, quis iusto veritatis deserunt laborum
voluptate ut excepturi alias consectetur? Iste delectus, neque
reiciendis est ipsam ullam at excepturi cupiditate harum deserunt
dolores illum alias, sed rerum quod corrupti quo possimus nulla
voluptate voluptas, officia eos vitae. Facere asperiores assumenda
voluptates aliquid. Laboriosam unde minus praesentium, corporis
animi esse repellendus mollitia iusto corrupti eum illum minima
accusamus at quia eos aliquam! Eum aperiam placeat temporibus quia,
nulla laborum, natus sed tempora consequuntur qui veniam. Nisi
ratione laudantium, maiores aliquid officiis magni! Facere nulla
fugit officiis aliquam provident neque ullam similique consequuntur
autem culpa! At repudiandae excepturi veniam aut nam facilis
voluptatum, quos nisi. Minus.
</div>
</body>
</html>
I'm currently testing this also with Windows 10 and Firefox 109.0.
For me this is working perfectly:
scrollbar-width: thin;
scrollbar-color: var(--lpClose) transparent;
scrollbar-color: var(--lpClose) var(--someAnotherVarHere); // This also works nicely
My best guess - Maybe there was a bug in an earlier Firefox version.
I cannot find any references to such a bug, though.

Is it possible to create a button using nothing but CSS that changes the appearance of a page?

I'm using a website that allows members to alter the appearance of their own page with CSS. No HTML permitted, only CSS. I've deliberately made my page as bright and clashing and "graphic design is my passion" as possible. This is not a serious site and I'm not taking it seriously.
However, I would like to implement a button that removes the most visually offensive elements of the design and makes it possible to actually read my page, should anyone want to.
I'm fairly confident this isn't possible with only CSS, but I thought I'd ask just to be certain.
This is an extension of my comment to the OP's question:
.content{
width: 500px;
background: #e1e1e1;
margin-top: 30px;
}
.remove-el{
width: 30px;
height: 30px;
background: red;
}
input[type="checkbox"]{
-webkit-appearance: none;
}
input[type="checkbox"] ~ label{
background: teal;
color: #fff;
padding: 5px;
}
input[type="checkbox"]:checked ~ label{
background: #e1e1e1;
color: #aaa;
}
input[type="checkbox"]:checked ~ .content .remove-el{
display: none;
}
<input type="checkbox" id="more-readable">
<label for="more-readable">Make it more readable</label>
<div class="content">
<div class="remove-el"></div>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Sunt nostrum quasi labore, neque incidunt enim soluta velit in possimus, amet cupiditate optio sequi ipsum natus aperiam quibusdam eos molestiae. Excepturi.</p>
<p>Rerum consequuntur provident, vel tempora dolore deleniti impedit quia ab exercitationem laboriosam quaerat perspiciatis doloremque accusamus, nesciunt sed veniam libero soluta quasi recusandae unde nostrum sapiente nam. Culpa, fugiat omnis!</p>
<div class="remove-el"></div>
<p>Quibusdam, voluptatibus ipsa reprehenderit reiciendis suscipit maxime vero praesentium nobis ex perspiciatis quo laudantium? Alias aliquam voluptatum, exercitationem ea modi corrupti aspernatur a. Illo sint distinctio quos quod quas quasi!</p>
<p>Autem praesentium inventore soluta atque ut, consectetur minima itaque perspiciatis sint nobis assumenda eum vitae culpa nemo fugiat facere in sapiente eaque a voluptatibus aut recusandae commodi ipsam? Iste, quae.</p>
<div class="remove-el"></div>
<p>Unde sequi nihil, molestias laudantium ex dolorem corporis dolore at minima perferendis consequuntur, nisi repellendus quibusdam sit reiciendis fugit officiis optio dicta veniam asperiores ab enim. Dolorem commodi illum saepe!</p>
<p>Eos labore quo, deserunt nobis hic molestias excepturi accusantium quidem aperiam quisquam sapiente delectus. Nulla enim delectus illum, sunt cupiditate et incidunt ducimus alias eligendi labore iste! Iste, sapiente ad.</p>
<div class="remove-el"></div>
<p>Sint, nisi sunt. Neque, libero est rerum adipisci cum commodi aliquid architecto eveniet natus culpa eligendi earum ratione? Excepturi sed hic impedit esse inventore fugit? Ut minus quia odio quis!</p>
<p>Corrupti nesciunt dolor amet sunt autem dicta minima expedita ducimus illum! Mollitia molestiae nihil veniam cupiditate! Veritatis explicabo voluptatem soluta, nemo libero illum. A magni molestiae provident possimus laudantium dolorum.</p>
<div class="remove-el"></div>
<div class="remove-el"></div>
<p>Itaque numquam, provident molestias odit eum deleniti ab temporibus iure earum non pariatur a aliquid minus? Eius adipisci quis delectus praesentium ab minus quaerat debitis inventore quo! Hic, facilis vel.</p>
<div class="remove-el"></div>
<p>Atque esse pariatur porro non quo minus nesciunt cumque perspiciatis vel ad deserunt culpa eius facere aut adipisci, fuga, mollitia nam enim dolore veritatis vitae, dolorem obcaecati? Eos, quidem in.</p>
</div>

Simple HTML/CSS alignment resize

The following code is working fine on every navigator and a screen resolution above 600px width. But, on small screens, my image is getting under the text when I'm resizing the window or viewing it on small smartphone screen...
<div id="messagedisp">
<div id="messagedisp-left">
<img src="http://lorempixel.com/400/200" width="86" height="185" id="messagedisp-inner">
</div>
<div id="messagedisp-right"><p>Long paragraph text about 500 chars</p>
</div>
</div>
You can exactly simulate the problem by resizing the width of your screen by hand. Here you have: https://jsfiddle.net/ch7fuc8o/1/
Do you have any idea how to fix this with the more "simple" way?
I have a couple of suggestions to make the code better and easier to mentain:
use semantics tags
use flexbox for organizing instead of floating.
use media query to adapt to phone screen
/* default appearance */
article > * {
padding: 20px;
}
/* Flexbox */
article {
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
flex-direction: column;
}
#media screen and (min-width: 600px) {
article {
-webkit-flex-direction: row;
flex-direction: row;
}
article > * {
-webkit-flex: 1;
flex: 1;
}
article > div {
-webkit-flex: 3;
flex: 3;
}
}
#media screen and (max-width: 600px) {
article {
-webkit-flex-direction: column;
flex-direction: column;
}
}
<article>
<img src="http://lorempixel.com/400/200" width="86" height="185" />
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dicta sint, quis animi! Eum illum mollitia odit at cupiditate quas qui animi, voluptas harum maxime? Architecto vitae sint id libero! Minima harum facere, corporis consequuntur ipsa dicta neque
incidunt illo ad inventore iusto, soluta, enim blanditiis tempora ratione? Deleniti nihil, aspernatur facilis fuga quasi ipsam earum animi optio asperiores ut temporibus explicabo nisi maxime dicta illo assumenda? Accusantium reiciendis quasi modi!
Qui voluptas, voluptatem aut reprehenderit magni cupiditate omnis odit? Blanditiis, suscipit, odit? Rerum distinctio quos veritatis necessitatibus recusandae fugit dolore, quia, incidunt, odit labore laborum accusamus aliquid similique voluptas libero
ratione ullam doloremque quaerat porro rem, blanditiis fugiat est. Aliquid dolorum fuga praesentium expedita odit, fugit ipsam ullam eligendi impedit, inventore qui veritatis odio cum sapiente at dolorem ex, excepturi. Tempore eum tenetur illum rerum
dolore aperiam id ex assumenda eligendi ad nulla repellendus expedita officia provident fuga ipsa quibusdam, nesciunt sequi delectus, adipisci veritatis suscipit qui. Atque a aliquam magni culpa eum vero autem distinctio provident, omnis exercitationem?
Saepe dolor voluptas voluptatum iusto quidem nostrum, rerum incidunt beatae alias ipsum sunt non in distinctio debitis provident minima hic deserunt soluta. Architecto unde eligendi iure esse omnis ab, nam accusamus recusandae! Sapiente, dolorum corporis
debitis laudantium fuga soluta rem sunt reiciendis similique? Esse vero vel obcaecati quam asperiores doloremque odit dolores pariatur ut assumenda ullam repellat dicta, iste modi est, dolorem consequuntur, molestias vitae. Voluptatem officia, explicabo!
Sint perspiciatis ab odit maxime totam id eum ipsum assumenda suscipit! Praesentium, a, aliquid sit laudantium minus odio excepturi nobis, nihil fugiat soluta quo tenetur debitis aperiam officia facilis! Porro in, ut et omnis. Earum pariatur quae,
nulla quibusdam quidem fuga molestias, vero eius harum praesentium ratione magni culpa quia distinctio ducimus ea eos doloremque unde similique asperiores repellat, necessitatibus dolorum sunt? Quidem, aliquam. Cum corrupti eveniet laborum! Ex porro
commodi adipisci, laudantium inventore temporibus tempora quo voluptate omnis saepe ab at aliquid, incidunt deleniti optio perspiciatis obcaecati! Veniam id, nostrum obcaecati rerum harum necessitatibus! Aliquid aspernatur nam saepe dolores ipsam
voluptas reiciendis molestiae modi neque sunt, nobis, consequatur sed aliquam. Ut, tenetur dolor delectus at, sit repellendus veniam nam cumque itaque tempore facilis et atque dignissimos consectetur libero harum! Consequatur iure sequi, ratione tempora.
Totam doloremque, sequi voluptate maiores. Illo natus corporis pariatur vel cumque molestiae hic saepe illum nemo voluptatem tempore, sequi repellat impedit optio molestias eaque iure quas dolor, assumenda veritatis laborum fugit porro sed. Necessitatibus
quisquam maiores ut neque soluta harum, odit deleniti labore, culpa illum ad explicabo doloremque! Beatae culpa debitis, natus excepturi adipisci magni, iste dolor dolorem odio rerum! Id suscipit itaque accusamus incidunt, laborum blanditiis deserunt
rem totam doloribus debitis non molestiae perferendis vitae necessitatibus corporis eum quas explicabo ab odio. Fuga porro iure corporis vitae cumque in quod deleniti autem ducimus alias perspiciatis cupiditate distinctio dignissimos doloribus ipsam,
delectus quam blanditiis accusantium inventore nesciunt. Excepturi reprehenderit laborum doloremque voluptatibus. Temporibus, sed, maiores. Illo dolorum cum culpa ratione, nam amet dicta vero ut reiciendis, dolor facilis.</div>
</article>
Should make the job.
CSS
.imagecss{
max-width: 100%;
}
HTML
<div id="messagedisp">
<div id="messagedisp-left">
<img src="http://lorempixel.com/400/200" class="imagecss" id="messagedisp-inner">
</div>
<div id="messagedisp-right"><p>Long paragraph text about 500 chars</p>
</div>
</div>

Block level elements acting like Flexbox elements

I've run into a curious problem when trying to create a flexbox accordion. The problem is that sometimes the contents of a given accordion will act like flexbox elements even if I set display to block. This is best described by showing an example:
http://codepen.io/jcummins/pen/KpWzNY
$('item div.header').click(function(e){
$( this ).parent().toggleClass( "active" );
});
body {
height:100%;
width:100%;
background-color: #ccc;
margin:0;
padding:0;
}
container {
display:block;
position:absolute;
height: 100%;
width: 100%;
/* Formatting styles: safe to remove */ background-color: #999;
}
items {
height:100%;
display: -webkit-box;
display: -moz-box;
display: box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
box-orient: vertical;
box-pack:top;
box-align:center;
/* Formatting styles: safe to remove */ background-color: #fc0;
}
item {
display:flex;
/* Formatting styles: safe to remove */
box-shadow:0 1px 3px rgba(0,0,0,.3);
margin-bottom: 6px;
margin-top: 6px;
margin-left: 8px;
margin-right: 8px;
border-bottom: 3px green solid;
background:#fff;
border-radius:5px;
padding-left: 20px;
padding-top: 10px;
padding-bottom: 10px;
font-family: Arial, sans-serif;
font-weight:bold;
}
.active {
-webkit-box-flex: 9;
-moz-box-flex: 9;
box-flex: 9;
}
.header {
display:block;
width:100%;
}
/* Hide the contents and only show it when the selected menu becomes active */
contents {
display:none;
overflow:scroll;
}
.active contents {
display:block;*/
/*width:100%;
overflow:scroll;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<container>
<items>
<item>
<div class="header">Item 1</div>
<contents>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem quos enim explicabo non ipsum dicta minima, architecto, aliquid iusto itaque repudiandae tenetur aliquam nihil odio. Distinctio alias maxime aperiam impedit.</div>
<div>Quasi aliquam inventore hic veniam nobis nesciunt ratione quod unde, excepturi reprehenderit, error. Fuga tempora excepturi voluptas nihil labore veniam animi! Possimus distinctio ea molestias voluptate aspernatur corrupti porro libero!</div>
<div>Nostrum deserunt quia modi necessitatibus id ipsum asperiores. Facilis suscipit, nisi culpa veritatis iusto autem iste eos dolore quibusdam ex quis dolorum blanditiis ipsa at architecto earum cum cumque dolor.</div>
<div>Eaque, libero, nihil. Accusantium corporis id fugit doloremque reiciendis temporibus, cumque minus, aliquid aperiam qui voluptates! Ipsum repudiandae inventore porro iusto mollitia, ex aliquid reiciendis quisquam odit ea, eligendi illo?</div>
<div>Enim, vitae natus distinctio adipisci rem possimus minus aliquid voluptas corporis velit, ipsa, est eligendi alias veniam fugit eius non hic quibusdam quod placeat dolorum laboriosam, quaerat explicabo. Sint, odio.</div>
</contents>
</item>
<item class="active">
<div class="header">Item 2</div>
<contents>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Itaque nobis soluta architecto similique molestiae saepe porro accusamus natus ab, eum nihil quidem tempore harum suscipit autem voluptates, quia quae aliquam.</div>
<div>Dolorum ut mollitia nisi. Sapiente necessitatibus, ducimus minima commodi suscipit dolor modi dolorum ipsa, dolores, aliquid porro neque voluptas a cupiditate blanditiis qui sed est iste dolore eos rerum doloremque!</div>
<div>Minima itaque ad officia quas dolore expedita, ab hic tempora, enim cum consectetur! Doloribus ut, reiciendis ipsam veniam voluptates, labore voluptatem perferendis earum illo voluptatum inventore a voluptas porro cum?</div>
<div>Perferendis quasi nesciunt laboriosam debitis veniam quisquam officiis est, cumque ut consectetur quod eligendi odio ab sapiente! Vel laboriosam quisquam odit, doloremque veritatis reiciendis perspiciatis molestiae illum repellendus, velit amet.</div>
<div>Numquam ipsum, dolorum, nihil perspiciatis aspernatur blanditiis explicabo corporis assumenda dolorem facilis debitis et est fuga sit. Totam, veniam unde soluta rem recusandae explicabo, enim, modi pariatur tempore repellendus quo!</div>
<div>In, nisi minima ex autem consequatur. Sequi mollitia, velit officiis nisi, eos laudantium quibusdam accusamus dolores dicta tenetur vitae pariatur rem consequatur a praesentium aliquam quidem at fuga eligendi quam!</div>
<div>Minima minus impedit iste, deleniti asperiores nulla est, nisi optio repudiandae ducimus, corporis aperiam. Quod neque magnam, provident minima minus corporis debitis officiis laborum voluptas consectetur accusantium numquam placeat eum.</div>
<div>Labore maxime exercitationem, pariatur quaerat, nisi repellat ad reprehenderit modi et sint eum veniam iure odio dignissimos, ullam. Culpa quos, est dolorum dolores asperiores quia commodi laudantium tempora doloribus soluta.</div>
<div>Aspernatur voluptatem, dolorem vel eligendi. Veritatis, ut eius officia cupiditate dicta quisquam dolores voluptatem, quo saepe. Sequi ducimus quo provident tempore accusamus alias ipsum soluta consequatur quidem, aut, et, dolorum.</div>
<div>Doloribus beatae excepturi, et sunt libero laborum. Eius perspiciatis vitae, corporis temporibus molestias eum sit dolorum eos a fugit maiores earum suscipit labore, adipisci magnam reiciendis animi rerum culpa inventore.</div>
<div>Optio itaque fugit dolorum, labore inventore. Illo beatae, quas eius dolorem quasi, quaerat. Voluptatibus laboriosam, laudantium, similique corrupti minus, tempora explicabo atque aspernatur ab, possimus quibusdam adipisci mollitia iste neque.</div>
<div>Accusamus vel dolorem libero consectetur facere, quo quod maiores, illum enim tenetur! Odio dicta repellendus, earum optio officiis consequatur dolore laboriosam fugit laudantium ad harum distinctio nesciunt accusantium vero, quaerat.</div>
<div>Eaque voluptatibus excepturi minima fuga ab voluptas ex dolore perspiciatis earum. Fugit eius natus, libero voluptates sunt autem quod consequuntur tempore! Velit rem tenetur est molestias quod quae modi inventore.</div>
<div>Quasi, quo nulla, hic ut veniam tempora dolorum veritatis eum animi repudiandae nisi eaque numquam temporibus consequatur odio voluptatum obcaecati mollitia neque amet, sunt quidem iure laboriosam eveniet. Quo, quas!</div>
<div>Officia fuga ipsum ullam deserunt rem praesentium quasi! Alias consectetur esse nobis commodi nam, placeat nesciunt, aspernatur quia asperiores officia fugiat delectus, nulla corporis saepe distinctio culpa aliquid adipisci amet.</div>
</contents>
</item>
<item>Item 3</item>
<item>Item 4</item>
<item>Item 5</item>
</items>
</container>
My expected behavior would be that Item 1 would be on one line and the <contents> would be on another line. Instead, it seems to be a 50-50 split.
Specifically it seems that this rule is not doing what I expect:
.header {
display: block;
width: 100%;
}
display: flex; applies to the containing element, and tells it that all of it's children should now be in a flex context.
Your style rule doesn't actually add anything, because by default the .header element is already a block element.
If you want a flex context for all elements except the header, you will likely want to wrap only those elements in an additional container, and set that container to be display: flex;, rather than overall main container
My expected behavior would be that Item 1 would be on one line and the
<contents> would be on another line.
That doesn't happen because the initial value of flex-wrap is nowrap. If you want multiple lines, use wrap:
item {
flex-wrap: wrap;
}
$('item div.header').click(function(e){
$( this ).parent().toggleClass( "active" );
});
body {
height:100%;
width:100%;
background-color: #ccc;
margin:0;
padding:0;
}
container {
display:block;
position:absolute;
height: 100%;
width: 100%;
/* Formatting styles: safe to remove */ background-color: #999;
}
items {
height:100%;
display: -webkit-box;
display: -moz-box;
display: box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
box-orient: vertical;
box-pack:top;
box-align:center;
/* Formatting styles: safe to remove */ background-color: #fc0;
}
item {
display:flex;
flex-wrap: wrap;
/* Formatting styles: safe to remove */
box-shadow:0 1px 3px rgba(0,0,0,.3);
margin-bottom: 6px;
margin-top: 6px;
margin-left: 8px;
margin-right: 8px;
border-bottom: 3px green solid;
background:#fff;
border-radius:5px;
padding-left: 20px;
padding-top: 10px;
padding-bottom: 10px;
font-family: Arial, sans-serif;
font-weight:bold;
}
.active {
-webkit-box-flex: 9;
-moz-box-flex: 9;
box-flex: 9;
}
.header {
display:block;
width:100%;
}
/* Hide the contents and only show it when the selected menu becomes active */
contents {
display:none;
overflow:scroll;
}
.active contents {
display:block;*/
/*width:100%;
overflow:scroll;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<container>
<items>
<item>
<div class="header">Item 1</div>
<contents>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem quos enim explicabo non ipsum dicta minima, architecto, aliquid iusto itaque repudiandae tenetur aliquam nihil odio. Distinctio alias maxime aperiam impedit.</div>
<div>Quasi aliquam inventore hic veniam nobis nesciunt ratione quod unde, excepturi reprehenderit, error. Fuga tempora excepturi voluptas nihil labore veniam animi! Possimus distinctio ea molestias voluptate aspernatur corrupti porro libero!</div>
<div>Nostrum deserunt quia modi necessitatibus id ipsum asperiores. Facilis suscipit, nisi culpa veritatis iusto autem iste eos dolore quibusdam ex quis dolorum blanditiis ipsa at architecto earum cum cumque dolor.</div>
<div>Eaque, libero, nihil. Accusantium corporis id fugit doloremque reiciendis temporibus, cumque minus, aliquid aperiam qui voluptates! Ipsum repudiandae inventore porro iusto mollitia, ex aliquid reiciendis quisquam odit ea, eligendi illo?</div>
<div>Enim, vitae natus distinctio adipisci rem possimus minus aliquid voluptas corporis velit, ipsa, est eligendi alias veniam fugit eius non hic quibusdam quod placeat dolorum laboriosam, quaerat explicabo. Sint, odio.</div>
</contents>
</item>
<item class="active">
<div class="header">Item 2</div>
<contents>
<div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Itaque nobis soluta architecto similique molestiae saepe porro accusamus natus ab, eum nihil quidem tempore harum suscipit autem voluptates, quia quae aliquam.</div>
<div>Dolorum ut mollitia nisi. Sapiente necessitatibus, ducimus minima commodi suscipit dolor modi dolorum ipsa, dolores, aliquid porro neque voluptas a cupiditate blanditiis qui sed est iste dolore eos rerum doloremque!</div>
<div>Minima itaque ad officia quas dolore expedita, ab hic tempora, enim cum consectetur! Doloribus ut, reiciendis ipsam veniam voluptates, labore voluptatem perferendis earum illo voluptatum inventore a voluptas porro cum?</div>
<div>Perferendis quasi nesciunt laboriosam debitis veniam quisquam officiis est, cumque ut consectetur quod eligendi odio ab sapiente! Vel laboriosam quisquam odit, doloremque veritatis reiciendis perspiciatis molestiae illum repellendus, velit amet.</div>
<div>Numquam ipsum, dolorum, nihil perspiciatis aspernatur blanditiis explicabo corporis assumenda dolorem facilis debitis et est fuga sit. Totam, veniam unde soluta rem recusandae explicabo, enim, modi pariatur tempore repellendus quo!</div>
<div>In, nisi minima ex autem consequatur. Sequi mollitia, velit officiis nisi, eos laudantium quibusdam accusamus dolores dicta tenetur vitae pariatur rem consequatur a praesentium aliquam quidem at fuga eligendi quam!</div>
<div>Minima minus impedit iste, deleniti asperiores nulla est, nisi optio repudiandae ducimus, corporis aperiam. Quod neque magnam, provident minima minus corporis debitis officiis laborum voluptas consectetur accusantium numquam placeat eum.</div>
<div>Labore maxime exercitationem, pariatur quaerat, nisi repellat ad reprehenderit modi et sint eum veniam iure odio dignissimos, ullam. Culpa quos, est dolorum dolores asperiores quia commodi laudantium tempora doloribus soluta.</div>
<div>Aspernatur voluptatem, dolorem vel eligendi. Veritatis, ut eius officia cupiditate dicta quisquam dolores voluptatem, quo saepe. Sequi ducimus quo provident tempore accusamus alias ipsum soluta consequatur quidem, aut, et, dolorum.</div>
<div>Doloribus beatae excepturi, et sunt libero laborum. Eius perspiciatis vitae, corporis temporibus molestias eum sit dolorum eos a fugit maiores earum suscipit labore, adipisci magnam reiciendis animi rerum culpa inventore.</div>
<div>Optio itaque fugit dolorum, labore inventore. Illo beatae, quas eius dolorem quasi, quaerat. Voluptatibus laboriosam, laudantium, similique corrupti minus, tempora explicabo atque aspernatur ab, possimus quibusdam adipisci mollitia iste neque.</div>
<div>Accusamus vel dolorem libero consectetur facere, quo quod maiores, illum enim tenetur! Odio dicta repellendus, earum optio officiis consequatur dolore laboriosam fugit laudantium ad harum distinctio nesciunt accusantium vero, quaerat.</div>
<div>Eaque voluptatibus excepturi minima fuga ab voluptas ex dolore perspiciatis earum. Fugit eius natus, libero voluptates sunt autem quod consequuntur tempore! Velit rem tenetur est molestias quod quae modi inventore.</div>
<div>Quasi, quo nulla, hic ut veniam tempora dolorum veritatis eum animi repudiandae nisi eaque numquam temporibus consequatur odio voluptatum obcaecati mollitia neque amet, sunt quidem iure laboriosam eveniet. Quo, quas!</div>
<div>Officia fuga ipsum ullam deserunt rem praesentium quasi! Alias consectetur esse nobis commodi nam, placeat nesciunt, aspernatur quia asperiores officia fugiat delectus, nulla corporis saepe distinctio culpa aliquid adipisci amet.</div>
</contents>
</item>
<item>Item 3</item>
<item>Item 4</item>
<item>Item 5</item>
</items>
</container>

Resources