On the web, how can I flow text to fill the vertical space in a fixed height container before filling the horizontal space? (ideally, without Javascript)
css:
h1 {
text-align: center;
font-family: 'Bowlby One SC', cursive;
}
JS:
jQuery("h1").fitText(0.38);
You would need to do it with inline css and it wouldn't be simple or perfect.
Basically, you would need to estimate the number of characters that could fit the entire container. Then, every time you show, count the characters you have and do something like current_chars/max_chars
e.g.
max_chars = 1000
Current_chars = 500
500/1000 = 0.5
padding-left: 25%
padding-right: 25%
Something like that
It's doubtful you can pull this off in CSS.
For reference, here's a working JS solution. It may have some extra fluff, but it's functional.
Basically checking paragraph height against the parent, adjusting it by 1px incrementally until it fits within the fixed-height. If no more horizontal room is available, like in a mobile view, it scrolls automatically via overflow: auto;.
Codepen
var container = document.getElementById('container');
var paragraph = document.getElementById('paragraph');
var containerHeight = container.offsetHeight - 40; /* 40 is for 2 x parent padding */
var paragraphHeight = paragraph.offsetHeight;
/* This is needed to extract and seperate number from "px"; FYI there are other ways to do this, but this works for demo purposes. */
var paragraphStyle = window.getComputedStyle ? getComputedStyle(paragraph, null) : paragraph.currentStyle;
var paragraphInitialMaxWidth = parseInt(paragraphStyle.maxWidth, 10);
console.log("-------------");
console.log("Container initial height: " + containerHeight);
console.log("Paragraph initial height: " + paragraphHeight);
console.log("Paragraph initial max-width: " + paragraphInitialMaxWidth);
checkHeight();
function checkHeight() {
paragraphHeight = paragraph.offsetHeight;
if (paragraphHeight > containerHeight) {
while (paragraphHeight > containerHeight) {
paragraph.style.maxWidth = parseInt(paragraphStyle.maxWidth, 10) + 1 + "px";
paragraphHeight = document.getElementById('paragraph').offsetHeight;
}
} else {
paragraph.style.maxWidth = paragraphInitialMaxWidth + "px";
paragraphHeight = paragraph.offsetHeight;
}
console.log("New paragraph computed height: " + paragraph.offsetHeight);
console.log("New paragraph max-width: " + parseInt(paragraphStyle.maxWidth, 10));
}
document.getElementById('button1').onclick = function() {
paragraph.innerHTML = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tincidunt euismod augue, ut aliquam velit dapibus at. Nullam ultrices accumsan nulla, non pharetra metus. Phasellus finibus blandit sem, ac ultrices arcu posuere in. Phasellus nibh leo, vulputate quis est a, auctor tincidunt arcu. Mauris rutrum turpis sed magna lacinia, quis placerat magna vulputate. Integer augue eros, feugiat et ipsum sit amet, ullamcorper lacinia nisi. Cras id urna ac massa laoreet ornare quis at lacus. Pellentesque in erat eros. Aliquam dignissim mollis mi, a placerat nibh sollicitudin vel. Vivamus accumsan ultricies eleifend. Suspendisse semper feugiat ex. Curabitur sagittis tempor lorem. Cras a volutpat erat. Quisque mattis ultrices orci vel condimentum. Donec imperdiet mauris vitae nisl sodales, non fermentum dolor eleifend.";
checkHeight();
}
document.getElementById('button2').onclick = function() {
paragraph.innerHTML = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tincidunt euismod augue, ut aliquam velit dapibus at. Nullam ultrices accumsan nulla, non pharetra metus. Phasellus finibus blandit sem, ac ultrices arcu posuere in. Phasellus nibh leo, vulputate quis est a, auctor tincidunt arcu. Mauris rutrum turpis sed magna lacinia, quis placerat magna vulputate. Integer augue eros, feugiat et ipsum sit amet, ullamcorper lacinia nisi. Cras id urna ac massa laoreet ornare quis at lacus. Pellentesque in erat eros. Aliquam dignissim mollis mi, a placerat nibh sollicitudin vel. Vivamus accumsan ultricies eleifend. Suspendisse semper feugiat ex. Curabitur sagittis tempor lorem. Cras a volutpat erat. Quisque mattis ultrices orci vel condimentum. Donec imperdiet mauris vitae nisl sodales, non fermentum dolor eleifend. Suspendisse rhoncus turpis lacus, ac vestibulum ante facilisis id. Vivamus vestibulum tellus quis odio elementum aliquam. Quisque id magna nibh. Phasellus ac dignissim mauris. Curabitur rhoncus ultricies libero non efficitur. Nulla posuere, lectus tristique tincidunt dapibus, diam velit maximus ligula, nec gravida nisl sem sed nisl. Nam in vulputate libero. Quisque aliquet, quam non sagittis luctus, libero elit iaculis risus, et sollicitudin ligula augue id erat. Mauris consectetur risus vitae arcu condimentum pulvinar. Curabitur sit amet orci vel massa eleifend tempus non id elit. Integer a ante a arcu fringilla congue. Maecenas ante sapien, imperdiet ac dictum ut, sodales ut erat. Phasellus et scelerisque tortor. Nunc pulvinar nisl id massa imperdiet, ut ullamcorper ipsum consectetur. Maecenas porttitor tristique volutpat. Integer a justo vitae felis pellentesque pretium. Etiam congue, turpis in vulputate tristique, orci enim tincidunt sapien, ac dictum lacus ex ut ex. Duis nec gravida magna, feugiat volutpat eros. In hac habitasse platea dictumst. Morbi sit amet orci a nisi viverra molestie. Quisque sodales velit a ex tincidunt vehicula. Etiam sodales efficitur velit, sed auctor tellus auctor eu. Curabitur aliquam dui ac tellus feugiat, nec mollis leo auctor. Maecenas malesuada rhoncus arcu sed condimentum. Cras sem arcu, tempus eu arcu ac, condimentum efficitur augue. Cras posuere magna quis nisl blandit tincidunt. Maecenas elementum turpis et risus viverra semper. Nullam libero elit, fermentum ullamcorper placerat quis, malesuada vel velit. Fusce tempus lacinia velit nec consequat. Donec gravida, dui eget elementum posuere, massa mi posuere nisi, vel tempus sem turpis vitae metus. Morbi egestas elit quis velit aliquam, et imperdiet felis condimentum. Sed eget euismod massa. Phasellus id dictum elit. Pellentesque imperdiet, mauris semper vehicula porta, nisi nulla sagittis turpis, vitae posuere nisl magna vel urna.";
checkHeight();
}
#container {
background-color: pink;
border: 3px solid red;
height: 400px;
padding: 20px;
overflow: auto;
}
#paragraph {
max-width: 300px;
margin: 0 auto;
text-align: center;
}
<button id="button1">Short text</button>
<button id="button2">Long text</button>
<div id="container">
<p id="paragraph">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tincidunt euismod augue, ut aliquam velit dapibus at. Nullam ultrices accumsan nulla, non pharetra metus. Phasellus finibus blandit sem, ac ultrices arcu posuere in. Phasellus nibh leo, vulputate quis est a, auctor tincidunt arcu. Mauris rutrum turpis sed magna lacinia, quis placerat magna vulputate. Integer augue eros, feugiat et ipsum sit amet, ullamcorper lacinia nisi. Cras id urna ac massa laoreet ornare quis at lacus. Pellentesque in erat eros. Aliquam dignissim mollis mi, a placerat nibh sollicitudin vel. Vivamus accumsan ultricies eleifend. Suspendisse semper feugiat ex. Curabitur sagittis tempor lorem. Cras a volutpat erat. Quisque mattis ultrices orci vel condimentum. Donec imperdiet mauris vitae nisl sodales, non fermentum dolor eleifend.</p>
</div>
Related
I'm building a react app with flexbox and I'm struggling getting all the pieces as I want them.
I want a fixed header at the top with a body that has its content centered and that can be scrolled (the scrollbar has to start in the body, not the header). This body can't go to the edges of the page so I'm using max-width to prevent this. The problem is that when I use the max-width, the scrollbar gets placed next to the body and it looks awful. I want it to stay at the far right of the page. Finally I want some space between the end of the body and the page (a bit of padding, if you will) so the content doesn't look like it's getting cut with the end of the site.
I've done this mockup in Photoshop
I mostly got the code working, minus the max-width and bottom padding. Here's what I got:
html, body {
margin: 0;
height: 100%;
}
#container {
display: flex;
flex-direction: column;
height: 100%;
}
header {
background: white;
height: 50px;
}
main {
flex: 1;
overflow: auto;
}
<div id="container">
<header>top</header>
<main>
...
</main>
</div>
I understand that this question has been asked in multiple ways a lot of times, but I've been looking for a while and I can't find the right one that fixes every thing I need.
Thank you for the help.
What you can do is add another element within the <main> tag. I use a <div> tag in my example, but it could be whatever you want. Keep the
overflow: auto;
on the <main> tag, so when the inner div overflows, you can scroll the <main> tag to move the <div>
Here's an example where I added some background color to show separation and some Lorem Ipsum text:
html, body {
margin: 0;
height: 100%;
}
#container {
display: flex;
flex-direction: column;
height: 100%;
}
header {
background: white;
height: 50px;
text-align: center;
}
#stuff {
border-radius: 5px;
background: pink;
padding: 5px;
margin: 20px;
flex: 1;
}
main {
overflow: auto;
}
<div id="container">
<header>top</header>
<main>
<div id="stuff">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut nec magna porta, commodo magna ut, porta erat. Phasellus tristique leo vitae ante efficitur, sed fermentum mi auctor. In condimentum mi a urna cursus vestibulum. Nunc posuere metus turpis, faucibus viverra purus aliquam nec. Curabitur ultrices, sem nec aliquet congue, ligula justo sagittis arcu, quis blandit urna sem nec sem. Cras accumsan, turpis ac placerat porta, libero ex semper tellus, non mattis dui ligula id odio. Cras lobortis ex in ex consequat, eu viverra nibh luctus. Nulla facilisi. Nulla odio arcu, suscipit eu dui eget, cursus sodales ipsum. Nulla vestibulum nisl eget ante pellentesque, vel porttitor magna dapibus. Suspendisse at ligula nunc. Phasellus scelerisque urna sit amet scelerisque pharetra. Quisque risus metus, tincidunt vitae ultricies in, convallis tempus justo. Sed finibus laoreet dolor sit amet tincidunt. Sed efficitur volutpat aliquet.
Suspendisse condimentum euismod quam id tempor. Vestibulum rhoncus metus eu tortor rhoncus eleifend. Nam sagittis ex ex, eget varius ante semper a. Aenean vulputate eget ligula vel sodales. Vivamus vel nisi dignissim, eleifend sem non, bibendum dolor. Ut pulvinar malesuada nisi sit amet suscipit. Sed ultrices maximus tellus, nec congue felis.
Duis urna orci, consequat et lacinia lobortis, varius sed sem. Ut auctor congue augue quis interdum. Morbi erat justo, venenatis ac imperdiet sit amet, cursus eget tellus. Quisque accumsan nibh a dui vulputate tincidunt. Aenean accumsan diam lorem, ac rutrum magna ullamcorper et. Proin volutpat dolor tristique scelerisque tempus. Donec eu neque non purus pulvinar bibendum sed vitae justo. Suspendisse luctus dolor neque, eu convallis tortor condimentum ac. Aliquam sollicitudin ex ut sollicitudin sagittis. Aliquam imperdiet, diam vel hendrerit iaculis, neque ex accumsan neque, in hendrerit risus massa convallis ante. Cras urna velit, cursus sed dignissim vitae, porttitor faucibus est. Vestibulum ut dolor aliquam, malesuada velit ut, vestibulum nibh. Maecenas at convallis ex, a aliquam dui. Mauris at eros sit amet leo gravida pulvinar.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Nunc faucibus laoreet ipsum, facilisis facilisis quam ultrices et. Vivamus interdum ut tortor sit amet sollicitudin. Cras rhoncus blandit lectus sed maximus. Integer ac dui nec metus dignissim lobortis vel vel erat. Cras in dignissim arcu. Nunc vulputate mi turpis, at dignissim turpis ullamcorper vitae. Cras neque justo, sagittis ut tempus vitae, pellentesque a mi.
Duis vehicula eros erat, vel tincidunt ante aliquet eget. Ut malesuada, est a sollicitudin tincidunt, magna ante varius est, vitae pulvinar arcu neque sit amet magna. Sed sit amet erat fermentum, bibendum ex sed, dictum lorem. Ut aliquam nibh vitae tellus convallis, sed condimentum augue suscipit. Nunc ac tellus sem. Maecenas vitae finibus lorem. Ut et fringilla lacus. Morbi neque lacus, rhoncus non odio et, sodales ultrices erat. Pellentesque molestie et felis sit amet pharetra. Curabitur id lacinia dolor. Curabitur non dignissim lorem, eleifend posuere lorem. Aliquam orci felis, vulputate vel felis molestie, vestibulum tempor tellus. Quisque mollis mauris blandit posuere tincidunt. Suspendisse condimentum est at enim interdum condimentum.
Aliquam a risus cursus, pretium dui nec, consectetur elit. Sed sollicitudin consectetur magna id accumsan. Quisque interdum tristique diam, at porta orci condimentum ut. Curabitur in metus purus. Donec diam orci, volutpat eu rhoncus in, accumsan sed neque. Nam egestas vestibulum vestibulum. Mauris fringilla, enim in finibus hendrerit, metus urna finibus lacus, in dictum eros eros vel orci. Aliquam blandit elit sem, vel fringilla libero commodo eu. Cras euismod a mauris non malesuada. Aliquam luctus malesuada nisl sed efficitur. Mauris suscipit convallis venenatis. Ut varius velit vitae scelerisque fermentum. Donec luctus convallis hendrerit. Sed vestibulum, diam at euismod lacinia, dolor eros commodo lacus, vitae pellentesque dui metus vel leo.
In hac habitasse platea dictumst. Nam massa lectus, fermentum non dolor eu, auctor luctus ex. Duis posuere sit amet lorem ut commodo. Pellentesque ultrices in tortor vel dignissim. Quisque lorem nibh, ullamcorper in sem nec, rhoncus posuere tortor. Aenean vitae feugiat nisi. Proin elementum sollicitudin iaculis. Morbi nec erat volutpat, posuere augue quis, porttitor erat. Aliquam dignissim blandit laoreet. Donec consectetur a risus et varius. Suspendisse quis vulputate tellus.
Nunc eget erat id lacus dictum viverra. Vivamus vel vehicula ipsum. Fusce convallis leo diam, sed consectetur nulla sagittis rutrum. Curabitur nec ligula convallis ex rutrum fermentum. Donec auctor, erat quis euismod maximus, sem massa fermentum tortor, non scelerisque nibh nisi at arcu. Vivamus sodales fermentum nisi quis tempus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In hac habitasse platea dictumst.
Nunc et lacus ac augue tincidunt pellentesque. Sed at odio at sem lobortis vestibulum. Sed cursus augue et sapien eleifend tempor. Etiam suscipit mi non est vehicula tincidunt a vitae libero. In blandit fringilla lectus non dignissim. In interdum, nisl non suscipit sagittis, sem erat sagittis ex, quis egestas lorem tellus nec metus. Suspendisse suscipit ultrices nunc eget vulputate. Donec mollis condimentum massa. Suspendisse potenti. Fusce eget urna ut dui fringilla faucibus et id justo.
Suspendisse posuere justo eget bibendum venenatis. Pellentesque sollicitudin nisi augue. Nunc sed justo ac mi ultrices elementum sit amet non lorem. Maecenas accumsan vehicula urna, sit amet posuere dolor malesuada at. Morbi vitae mi sed est suscipit euismod. Aliquam erat volutpat. Nulla elit purus, elementum at odio eget, tempor efficitur leo. Nunc dapibus erat nec faucibus rhoncus. Curabitur accumsan nibh sit amet sagittis placerat. Donec mollis metus eu metus eleifend ornare.
</div>
</main>
</div>
I was wondering if there is a way to make a div with position fixed immobile, so if the user scrolls the div will be immobile to the initial position. I need it because I have a toast spawning inside another div, and I need this toast in foreground otherwise it will spawn inside the div (with scrollbar and partially visible).
That's an example image to explain better:
With position absolute:
With position fixed (the desired effect):
That's my component code (it's a child component):
<div class="toast" role="alert" aria-live="assertive" aria-atomic="true" style="position:absolute; z-index:999; left:80%; width:300px;opacity:1;cursor:unset !important" *ngIf="!isCollapsed && onlyOnePopup == dataItem.Id">
<div class="toast-header" style="background-color: #00549F;">
<strong class="mr-auto" style="color:#fff;"></strong>
<button (click)="onlyOnePopup = null && isCollapsed = true" type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">
<span aria-hidden="true" class="close" style="color:white;">×</span>
</button>
</div>
<div class="toast-body" style="font-family:Font; white-space:pre-line; color:black; cursor:unset">
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
</div>
</div>
Use position: fixed, and then set the exact position that you want. Here's a snippet showing you an example of how to do it.
body {
height: 2000px;
background-color: aqua;
}
.fixed-div {
width: 200px;
heigth: 200px;
background-color: white;
padding: 50px;
position: fixed;
top: 0px;
right: 0px;
margin-right: 20px;
margin-top: 20px;
}
<html>
<head></head>
<body>
<div class="fixed-div">
Fixed Div
</div>
</body>
</html>
Instead of left: 80% try bottom: 0; right: 0 along with position: fixed; and then set right-margin accordingly.
the main thing is to set the height of html as 100vh (veriable height) and width to 100vw(veriable width). this will set your page to 100% of the space available in the browser window regardless of size. then set the toast div to fixed with the right and bottom set where you like (0 for bottom and right puts it in the lower right corner completly)
you cannot set a fixed point with no reference to what it should be fixed to. so by setting the html page size explicitly, the fixed position can be set based off that.
html {
height: 100vh;
width: 100vw;
}
.toast {
position: fixed;
right: 1rem;
bottom: 1rem;
background-color: rgb(0, 255, 255, 0.8);
padding: 1rem;
height: 2.5rem;
width: 15rem;
}
.display-content {
max-height: 100vh;
overflow-y scroll;
}
<div class="display-content">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur efficitur felis neque, et viverra tellus fermentum eget. Quisque nunc tellus, pulvinar id felis sed, sodales iaculis magna. Morbi sodales pellentesque sapien, nec dignissim augue. Integer odio enim, posuere et convallis et, ultricies in odio. Curabitur felis libero, iaculis et elit in, feugiat tempor augue. Duis finibus mattis leo eu facilisis. In faucibus tincidunt dui. Nullam pulvinar est vel mauris rhoncus euismod. Praesent vel pharetra neque, vitae sollicitudin enim. Nunc placerat sagittis malesuada. Suspendisse potenti. In tempus risus eget dapibus semper. Vestibulum vitae elit congue, tempor quam at, ultricies mauris.
</p>
<p>
Suspendisse ut ullamcorper libero. Quisque consectetur gravida nisi, non faucibus turpis iaculis nec. Phasellus vulputate, tellus sed dapibus dapibus, turpis mauris facilisis eros, eu sagittis quam ante eget felis. In nec nisl at lorem tincidunt vulputate vel eu est. Phasellus ipsum velit, placerat quis pulvinar non, auctor at ex. Nam pharetra dolor a semper feugiat. In sed commodo mauris. Aenean in turpis sed orci molestie efficitur quis id orci. Duis laoreet leo a nulla interdum hendrerit. Suspendisse molestie tristique semper. Vestibulum convallis purus et orci mollis sodales. Praesent ut lectus laoreet, suscipit velit nec, pharetra neque.
</p>
<p>
Morbi placerat metus a eros viverra, luctus ultricies eros fringilla. Nunc mollis lorem at lacus lobortis, vitae blandit ex condimentum. Maecenas et ultricies tortor, sit amet ornare risus. Nunc id nisl et ligula commodo vehicula in et risus. Pellentesque molestie et risus quis lacinia. Quisque quis risus laoreet, venenatis enim nec, hendrerit nisl. Nulla facilisi. Pellentesque pretium turpis vestibulum urna auctor sodales. Vivamus mattis sem eu tellus scelerisque tempus. Sed venenatis felis in mollis suscipit. Sed quis felis ac erat facilisis pellentesque eget nec purus. Phasellus libero odio, semper sed auctor at, ultrices non nibh. Proin consectetur metus sed ultrices aliquam. Pellentesque placerat, nibh vitae semper sodales, mauris elit vestibulum mauris, sit amet condimentum odio est tincidunt neque. Quisque metus lacus, ullamcorper non accumsan nec, placerat et lectus.
</p>
<p>
Vestibulum nec sem ex. Pellentesque volutpat quam eget justo rhoncus congue. Etiam in lorem pellentesque, pulvinar turpis non, dignissim nibh. Etiam eget urna congue, sodales nulla eget, fringilla lorem. Aliquam suscipit dapibus augue eget mollis. Phasellus feugiat sagittis massa, in posuere odio ultrices eu. Aliquam erat volutpat. Morbi eleifend augue vel sagittis pellentesque. Cras auctor interdum purus non fermentum. Aliquam erat volutpat. Integer elit mi, molestie vitae pulvinar vel, elementum et dui. Pellentesque leo risus, elementum eu accumsan nec, pharetra non massa. Phasellus pulvinar mollis aliquam.
</p>
<p>
Sed elementum facilisis erat, in molestie tortor varius ut. Vestibulum dapibus dolor quis mi malesuada, id venenatis ante vulputate. Aliquam fermentum viverra ante, sit amet rhoncus turpis laoreet vel. Vestibulum a vestibulum dolor. Mauris ut efficitur nunc. Donec sit amet consectetur orci. Ut at erat non sem mattis dictum. Aliquam vestibulum nulla nunc, nec varius est vestibulum sit amet.
</p>
<p>
Aenean imperdiet eros non eleifend molestie. Nullam venenatis nibh non pellentesque imperdiet. Quisque volutpat eros non odio convallis ultricies. Etiam convallis facilisis libero, a commodo tellus condimentum quis. Curabitur congue erat ut tincidunt eleifend. Donec tincidunt ullamcorper consequat. Etiam iaculis elementum fermentum.
</p>
<p>
Fusce vehicula libero nisl. Aliquam tempor sem at lacinia facilisis. Donec vestibulum sit amet augue non rhoncus. Nulla sagittis leo elit, a interdum metus dapibus in. Nulla in mattis nunc. Sed sit amet est in tellus vehicula molestie vel tempor nisl. Donec dignissim est lectus, ac pharetra neque bibendum nec.
</p>
<p>
Sed porta dui eget turpis scelerisque rutrum. Aliquam eu diam nec nunc ultrices hendrerit. Quisque convallis metus vitae tellus fermentum finibus. Cras id ullamcorper nisl. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed gravida lorem non blandit porta. Aliquam ac dui laoreet, interdum dui vel, pellentesque arcu. Aenean gravida nunc sit amet arcu rhoncus mollis. Nullam sit amet risus at urna dictum pharetra. Nunc maximus condimentum dui, sed hendrerit metus pretium et. Curabitur eu sollicitudin lorem, et luctus magna. Donec tincidunt id purus sed placerat. Proin vel tristique velit. Donec ornare nisi at laoreet luctus. Integer id metus molestie, fermentum massa non, porta diam.
</p>
<p>
Quisque at volutpat augue. Maecenas porttitor ornare scelerisque. Ut pretium sapien a placerat dapibus. Fusce vel urna eu sem blandit euismod. In imperdiet eros sit amet quam tempor aliquam. Morbi volutpat tincidunt massa, non convallis dui pharetra nec. Ut velit odio, pellentesque mollis sodales et, eleifend ac libero. Curabitur orci ante, varius ac congue id, rutrum id leo. Pellentesque massa massa, lacinia pretium sapien ut, dignissim congue ipsum. Aliquam commodo leo in nisl pharetra, sed viverra est auctor.
</p>
</div>
<div class="toast">This is a toast</div>
[UPDATE], bug filed : https://bugs.chromium.org/p/chromium/issues/detail?id=1011866&q=pointer-events&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified
I realised that now on Chrome 78.0.3904, (Android 9), applying pointer-events:none to a fixed position overlaying element is preventing the elements underneath from being scrolled.
I employ this technique alot in the sites i make and its been working fine till i realised that this is broken today. But it still works fine on all other devices and browsers. Safari on IOS for example.
I did a simple test that i attached below, and you can try on android chrome browsers to see the issue.
Heres also an external url with the same test : https://www.fariskassim.com/stage/rebel9/democracy_museum/sandbox/chrome_bug/
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 10;
background-color: rgba(255, 0, 0, 0.5);
pointer-events: none;
}
.scrollable_content {
position: fixed;
top:0;
left: 0;
width: 100%;
height: 100%;;
overflow:auto;
}
<div class="overlay"></div>
<div class="scrollable_content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam laoreet justo at sapien vulputate, dictum pellentesque turpis ultricies. Quisque pellentesque maximus ultrices. Vivamus tempus sem vehicula varius laoreet. Donec gravida sit amet lorem ac molestie. Nunc eget lobortis turpis. Praesent fringilla quam non ligula bibendum, vel consectetur orci lobortis. Morbi a efficitur augue. Donec in nisl pellentesque, scelerisque arcu non, dictum augue.
Nam purus augue, auctor vitae purus et, gravida viverra velit. Vivamus a massa euismod, luctus leo sed, maximus eros. Phasellus egestas varius euismod. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras pretium magna a justo vestibulum, mattis efficitur enim consequat. Nunc malesuada leo sed turpis rhoncus cursus. Phasellus mollis elementum magna ac varius.
Sed varius dui non leo fermentum, eu aliquet risus bibendum. Duis ac diam tellus. Nullam eleifend sed dui eu iaculis. Nulla nec ultrices turpis, at tempor enim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam venenatis porttitor mauris, et consequat tortor euismod quis. Donec at tortor convallis, convallis urna eu, fermentum justo.
Cras egestas, turpis eget sodales egestas, lacus erat hendrerit diam, id dapibus augue enim sit amet justo. Nullam a augue ac diam convallis placerat at id lacus. In eu ipsum dui. Nunc lacinia molestie ligula, id suscipit erat. Praesent euismod eget nunc non facilisis. Aenean quis ipsum egestas, dictum sem sit amet, vestibulum arcu. Phasellus pretium id sem a euismod. Fusce eu ornare purus. Vestibulum porttitor augue a suscipit volutpat. Curabitur sodales urna libero, sed posuere odio lacinia ut. Cras quis mauris augue.
Ut augue quam, elementum non ante in, blandit lacinia ex. Vestibulum in lectus pulvinar, faucibus nisi tincidunt, placerat dolor. Ut lacinia risus nunc, eget blandit dolor malesuada in. Donec at urna ac orci pulvinar lobortis. Donec aliquet ex nec faucibus suscipit. Nulla libero arcu, efficitur ut elit vel, congue egestas massa. Etiam laoreet odio leo, ut vehicula nunc consequat fringilla. Nam arcu mauris, vehicula sed sagittis a, sodales et felis. Pellentesque in hendrerit orci. Sed ornare tristique turpis sed ultrices.
Aliquam mollis mi sit amet ex lacinia, sed sollicitudin ipsum efficitur. Ut elementum vulputate luctus. Duis id mollis eros. Praesent pellentesque, augue nec vestibulum finibus, est elit faucibus quam, eu condimentum dui mi at erat. Duis varius ullamcorper auctor. Suspendisse potenti. Mauris quis justo venenatis, lacinia diam eu, gravida augue. Ut in magna arcu. Etiam nec arcu ex. Phasellus ut nibh leo. Proin consectetur lacus risus, et sodales nisi luctus placerat. Maecenas eget fringilla sem, vitae sagittis nisi. Mauris et maximus velit. Fusce a velit sed quam porttitor suscipit vitae nec lectus.
Nulla lobortis ligula condimentum elit pellentesque vulputate. Aenean ac nisl in metus tincidunt viverra. Integer risus urna, fringilla ac metus ac, congue feugiat nulla. Donec dui risus, gravida eu tempor iaculis, vulputate at ante. Donec cursus elit ac ipsum pretium, non dapibus arcu vehicula. Nulla porttitor urna a lectus molestie, vitae dictum enim varius. Sed justo turpis, rhoncus eget tortor ut, rhoncus condimentum ante. Nulla erat est, interdum pulvinar diam vitae, fringilla interdum risus. Donec maximus, nisl ac tristique tincidunt, lacus metus posuere nisl, a viverra ante dolor in libero. Donec eleifend congue lectus. Maecenas sed mattis nisl. Vivamus lectus eros, interdum eu congue quis, fermentum at odio. Nullam maximus ligula in posuere viverra. Donec vitae consequat nisi. Fusce nibh ex, aliquam et erat a, varius congue nisi.
Integer tristique sodales enim at ultrices. Integer at lobortis felis. Maecenas et justo imperdiet justo tempor dapibus. Donec convallis tortor sit amet commodo condimentum. Sed maximus ipsum nec sapien cursus, id molestie est sodales. Curabitur nisi justo, scelerisque vitae sagittis at, ultricies at odio. Nulla commodo libero eros, quis convallis tortor finibus quis. Vivamus ipsum lorem, tristique eu lobortis vitae, imperdiet sit amet ipsum. Sed eget volutpat lacus. Phasellus sit amet sapien lacus. Mauris sollicitudin facilisis sapien, bibendum ornare libero ultricies non. Vivamus magna augue, maximus vitae turpis vitae, tincidunt ornare magna. Donec aliquet diam nec lobortis imperdiet. Sed non tellus a est laoreet pharetra. Donec eleifend porta nisl, ac euismod elit fermentum at.
Vestibulum maximus dui sed nisi sollicitudin, quis lacinia lectus viverra. Praesent dictum viverra ipsum ut finibus. Proin eget accumsan nulla. Nulla finibus viverra orci, a rhoncus enim condimentum vitae. Vivamus lacinia eros ante, in pellentesque diam sodales sit amet. Ut ut nibh ex. Proin aliquet ornare erat. Suspendisse ullamcorper condimentum libero nec molestie. Quisque fringilla lectus neque, at suscipit ex congue nec. Nullam accumsan vitae nisi eget lobortis. Pellentesque quis imperdiet dui, non porttitor ante. Mauris ipsum ante, accumsan commodo vulputate ut, fringilla id mauris. Duis pretium vulputate sapien sit amet sodales.
</div>
Yes!! Maybe new Chrome version not supporting this technique. Make a try with following code snippet:
.scrollable_content {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: auto;
z-index: 11;
opacity: .8;
}
I don't think this may give the same output as you defined, but it looks somewhat better.
I have a multicolumn page. Left panel (red bar in the example) has a fixed position and a static size. And it should also be scrollable when there are a lot of content in it.
In this column there might be a popover over some content (in the example it is blue). Popover also has a fixed position, it should be visible over the entire page and not only inside the red bar.
As a result in Chrome popover is visible only within the red bar when I have property transform: translateZ(0) applied either to popover itself or to any child node in this popover. My example is simplified, in real case - I have a scroll plugin that does apply that property to some child node.
I have checked in Firefox - everything is OK there.
Is there any workarounds to solve this issue in Chrome as well?
.left {
width: 300px;
height: 100%;
overflow-x: visible;
overflow-y: auto;
background: red;
position: fixed;
}
.popover {
top: 100px;
left: 200px;
width: 320px;
height: 200px;
position: fixed;
transform: translateZ(0);
background: blue;
}
<div class="left">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vel ornare nunc. Proin ultrices enim erat, hendrerit tempus erat congue nec. Curabitur malesuada massa dolor. Aenean sit amet erat quis tortor egestas fringilla. Phasellus venenatis augue
et mi accumsan, sit amet mollis nisi ullamcorper. Etiam eget dignissim augue, nec elementum elit. Proin elementum neque at consequat convallis. Praesent eu fringilla diam. Suspendisse efficitur ornare sapien. Praesent hendrerit arcu purus, eget imperdiet
tortor luctus sit amet. Donec tempor orci neque, eget commodo erat dictum iaculis. Nullam commodo egestas mauris. In auctor quam vitae ligula accumsan, sit amet tempus ligula sollicitudin. Maecenas eget enim ac sapien cursus pretium ac in mauris. Praesent
faucibus ullamcorper elit nec convallis. Phasellus metus nulla, gravida id sapien convallis, porta sagittis nisl. Morbi lacinia augue sit amet mi viverra, sit amet blandit purus sagittis. Donec placerat lacus purus, id luctus nisl dapibus sed. Vivamus
feugiat sit amet neque quis condimentum. In vel odio orci. Phasellus ultricies ex ligula, et tempus lorem finibus at. Vivamus nec tempor ante. Sed et rhoncus diam. Fusce consectetur, augue vel interdum viverra, odio felis cursus orci, at bibendum enim
urna suscipit nisi. Nunc sit amet ex nisi. Maecenas sit amet enim eget ipsum sagittis tempor. Curabitur rutrum turpis eget sapien convallis, et pharetra ligula tempor. Vivamus purus mi, tincidunt a dapibus id, vestibulum quis est. Ut lacinia ex rutrum,
euismod ante eget, gravida ex. Maecenas fermentum ligula sit amet nisl viverra ullamcorper. Proin tincidunt fermentum dui ac gravida. Phasellus molestie, purus vitae elementum lacinia, lacus velit dapibus augue, in viverra arcu lacus nec massa. Praesent
nec quam in nisl posuere tempus sed at tortor. Proin efficitur vehicula lacus, at aliquet massa varius quis. Mauris sed purus eget elit molestie laoreet tempor nec orci. Suspendisse ipsum dolor, tristique nec magna euismod, blandit ullamcorper mauris.
Aliquam in tincidunt mauris. Vestibulum ante lorem, consequat sit amet purus id, tincidunt fermentum eros. Donec ultricies leo quis sapien aliquet, ut imperdiet enim cursus. Fusce commodo ac arcu quis facilisis. Proin dignissim pulvinar pretium. Mauris
vel libero turpis. Integer eu viverra nisl, vel rhoncus augue. Suspendisse et iaculis nisi. Sed nec ipsum neque. Nam quis metus eget velit suscipit suscipit. Quisque est metus, maximus ut dui eget, auctor convallis nibh. Praesent congue ipsum eget tellus
tincidunt, eget tempor urna vulputate. Quisque erat nulla, tincidunt ac scelerisque eu, posuere eget risus. Ut feugiat id nisi sit amet pharetra. Nam at elit eget lacus scelerisque efficitur. Sed vel lacus sed dui condimentum pulvinar in a tortor. Duis
in ex eu orci condimentum varius in rutrum tellus. Quisque neque ipsum, fringilla venenatis nisl in, iaculis venenatis nisl. Nullam augue tortor, venenatis vel magna id, rutrum egestas ante. Vestibulum nec tincidunt sapien.
<div class="popover"></div>
</div>
I'm at a loss on trying to get my content body to end at the bottom of the screen before my footer. What am I missing?
<body class="v4master">
<form id="aspnetForm">
<div id="SharingBoundaryHeader">Banner</div>
<div id="s4-ribbonrow">Ribbon</div>
<div id="s4-titlerow">Title Row</div>
<div id="s4-workspace">WorkSpace
</p></br>Aenean ex diam, tincidunt eu risus sit amet, condimentum cursus nunc. Nulla viverra ligula quis leo porttitor mattis. Proin at nibh sed nibh consectetur iaculis. Donec accumsan finibus ipsum. Cras aliquet velit condimentum urna fringilla molestie. Vivamus vitae ultrices tellus. Curabitur ac mi sit amet nisl posuere sollicitudin. Vestibulum sodales purus ac accumsan vulputate. Donec semper orci ac lorem volutpat euismod. Donec faucibus massa finibus erat commodo pharetra. Integer facilisis pretium pharetra. Curabitur auctor viverra sodales.
</div>
<div id="ctl00_IdLMFooter_footer">Footer</div>
</form>
</body>
jsFiddle
Edit:
I want it to look like this: but with the inner scroll-bar active when the content overflows instead of the outer one.
Try this in your CSS see if you get what you are looking for.
#s4-workspace {
position: absolute;
bottom:20px;
}
#ctl00_IdLMFooter_footer {
position:absolute;
bottom:0;
}
The footer needs position: relative
http://jsfiddle.net/23n76huL/4/
I initally stated that you needed position: absolute on the form, but this is not necessary.
#ctl00_IdLMFooter_footer {
position:relative;
bottom:0;
}
Might be overkill but here is a dynamic version using javascript: http://jsfiddle.net/23n76huL/7/
var height1 = document.getElementById('SharingBoundaryHeader').offsetHeight,
height2 = document.getElementById('s4-ribbonrow').offsetHeight,
height3 = document.getElementById('s4-titlerow').offsetHeight,
//height4 = document.getElementById('s4-workspace').offsetHeight,
height5 = document.getElementById('ctl00_IdLMFooter_footer').offsetHeight,
bodyheight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
a = 0;
a = bodyheight - (height1 + height2 + height3 + height5 + 2);
document.getElementById('s4-workspace').style.height = a + "px";
Try this http://jsfiddle.net/23n76huL/9/
CSS
div {
border: 1px solid black;
}
#ctl00_IdLMFooter_footer {
background: white;
bottom: 0;
position: fixed;
width: 100%;
}
#s4-workspace {
position:relative;
overflow-y:scroll;
}
body {
height:auto;
min-height:100%;
height:100%;
}
.content {
height: 100vh;
border: none;
}
HTML
<body class="v4master">
<form id="aspnetForm">
<div id="SharingBoundaryHeader">Banner</div>
<div id="s4-ribbonrow">Ribbon</div>
<div id="s4-titlerow">Title Row</div>
<div id="s4-workspace">
<div class="content">
WorkSpace
</p></br>Aenean ex diam, tincidunt eu risus sit amet, condimentum cursus nunc. Nulla viverra ligula quis leo porttitor mattis. Proin at nibh sed nibh consectetur iaculis. Donec accumsan finibus ipsum. Cras aliquet velit condimentum urna fringilla molestie. Vivamus vitae ultrices tellus. Curabitur ac mi sit amet nisl posuere sollicitudin. Vestibulum sodales purus ac accumsan vulputate. Donec semper orci ac lorem volutpat euismod. Donec faucibus massa finibus erat commodo pharetra. Integer facilisis pretium pharetra. Curabitur auctor viverra sodales.
Integer cursus ornare lobortis. Ut felis tellus, tincidunt vitae finibus lobortis, mollis aliquet tortor. In molestie lacus justo, eget viverra ante viverra id. Fusce vehicula nibh quis molestie lacinia. Aenean ultricies lorem eros, vehicula commodo lectus feugiat tempus. Suspendisse potenti. Aenean sit amet felis tincidunt, efficitur sem sed, bibendum erat. Fusce a tellus in nisl tempor hendrerit at non ligula. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec lorem ligula, pharetra ut mi vel, pharetra auctor felis. Fusce erat orci, sodales at dapibus vitae, viverra non lorem. Curabitur tincidunt mi imperdiet est mattis ultricies.
Integer magna lorem, aliquam a lobortis et, pulvinar et eros. Nullam consectetur semper dui, condimentum venenatis mi ultricies non. Suspendisse non maximus felis. Praesent cursus est a sollicitudin commodo. Sed enim risus, varius id sagittis sed, tempor et orci. Nulla vestibulum nulla id arcu tincidunt sagittis. Nunc eu est quis massa iaculis laoreet et ut odio. Praesent feugiat felis a neque pulvinar ultrices. Donec eget leo dui. Nulla in eros sit amet quam iaculis euismod eget ut augue. Ut vitae hendrerit velit. Quisque massa sem, vulputate id nunc ut, lacinia cursus turpis. Proin lobortis, enim sed varius sollicitudin, urna dolor mollis mauris, et sodales tortor metus non sapien. Quisque eget mauris vitae mi dapibus tincidunt. Praesent eget posuere odio, ac dictum diam.
Sed rutrum libero vel dui volutpat egestas. Nullam ultricies dignissim nunc non tristique. Aliquam erat volutpat. Curabitur vel enim eget tortor dictum rutrum. Aliquam a lacus id diam luctus faucibus eu eget neque. Nullam ut lacus lacinia, pellentesque ipsum sit amet, consectetur sem. Proin tristique eleifend nisi vitae sollicitudin. Aliquam accumsan orci eget libero sollicitudin, vitae tempus diam blandit. Vestibulum quam dui, viverra vel commodo id, dapibus at erat.
Etiam interdum varius pellentesque. Suspendisse potenti. Nulla venenatis posuere elementum. Suspendisse potenti. Pellentesque varius accumsan enim. Donec molestie urna at arcu posuere egestas. Praesent mattis nisi ut erat euismod, a venenatis velit viverra. Vestibulum ultricies tempus eleifend. Nulla vitae dui suscipit, hendrerit tortor quis, viverra urna. Pellentesque et varius turpis. Morbi in risus vel elit euismod pharetra. Cras ut mi in ligula venenatis vulputate non in nibh. Sed quis sapien eget sapien blandit viverra. Donec sed magna eget lacus sodales consectetur.
</div>
</div>
<div id="ctl00_IdLMFooter_footer">Footer</div>
</form>
</body>