1

I have this flex item expanding its height beyond its flex container if font-size is bigger.

.jobTitleDescCont {
    display: flex;
    flex-flow: column nowrap;
    height: 100%;
    border: yellowgreen solid 5px;
}

.jobTitleDescCont .jobTitle {
    font-size: 1em;
    height: 30%;
    border: blue 5px solid;
}

.jobTitleDescCont .jobDesc {
    font-size: 2em;
    height: 70%;
    border: green 5px solid;
    
    overflow: auto;
}
<div class="jobTitleDescCont">
    <div class="jobTitle">
        {{job.title}}
    </div>
    <div class="jobDesc">
        {{job.description}}
    </div>
</div>

Here, .jobTitleDescCont .jobDesc font-size: 1em; and it works alright, overflow would work as expected without increasing its height, it's still within its container.

enter image description here

But when you .jobTitleDescCont .jobDesc font-size: 2em;, the flex container also increases and as a result, the flex item too.

enter image description here

Notice here in the lower right corner, the green and the yellowgreen border of the expanding flex item and the flex container is increasing. Of course, the scroll bar can go beyond that too and if the text is long enough, you can scroll beyond the visible part of the scrollbar until you can no longer see the scrollbar.

As per my understanding, the height of the flex container should remain 100% relative to it's container so as the flex item. I also know that flex items are responsive so they can get bigger depending on the content but I have the overflow to take care of the content.

Shouldn't just the overflow scrollbar just get longer as it accomodates bigger font text?

Why is it increasing the height of the flex container and item?

A temporary fix I have is setting height: 575px

.jobTitleDescCont {
    display: flex;
    flex-flow: column nowrap;
    height: 575px;
    border: yellowgreen solid 5px;
}

but this defeats the responsive CSS.

نور
  • 1,425
  • 2
  • 22
  • 38
Shu Pesmerga
  • 155
  • 1
  • 1
  • 15

3 Answers3

0

On your .jobDesc class you should replace height: 70% with flex: 1 this way it takes up the remainder of the available space. And although I can't reproduce your error you should add box-sizing: border-box to the container, in your case jobTitleDescCont, it might take care of the overflow issue.

JHeth
  • 7,067
  • 2
  • 23
  • 34
  • That's what I thought too. usign ```flex``` but no. container height still increases. This parent flex container is also a child of another flex container but that shouldn't matter, should it? as long as I don't mess with their ```position``` property. – Shu Pesmerga Jul 11 '20 at 05:58
  • Try adding box-sizing: border-box on all the containers one by one and see if that changes anything. Like I said I couldn't replicate your issue of the overflow so odds are it's being caused by one of the other ancestors if you're still seeing it after trying the above. – JHeth Jul 11 '20 at 06:15
0

I think I understood your problem. In the following snippet we will fix the height to 100vh [100% of viewport height] instead of 100%

So, a clean way to keep a 30-70 ratio independently from the font is the following:

JSFiddle

.jobTitleDescCont {
  display: flex;
  height: 100vh;
  flex-flow: column nowrap;
  border: yellowgreen solid 5px;
}

.jobTitle {
  height: 30%;
  font-size: 1em;
  border: blue 5px solid;
}

.jobDesc {
  height: 70%;
  font-size: 3em;
  border: green 5px solid;
  overflow-y: auto;
}
<div class="jobTitleDescCont">
  <div class="jobTitle">ciao</div>
  <div class="jobDesc">ciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velitciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velitciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velitciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit</div> 
</div>

When the font size increases this will make the scroll bar of the second flex item longer without affecting the entire length of the container, exactly as you were asking

In your specific case the content of jobTitle won't be overflowing its 30% height, so I avoided to add the overflow-y: auto as in the second flex item. If this is not the case it must be added to respect the 30-70 relationship

If the hypothesis above is correct, you can also avoid plenty of empty space in the first flex item replacing the height of the container with max-height


When it comes to the explanation please have a look at this good answer. Here instead a solution to keep using the 100% percentage on the container keeping the intended ratio, which in our case gives:

JSFiddle

html, 
body {
    height: 100%;
}

.jobTitleDescCont {
  display: flex;
  height: 100%;
  flex-flow: column nowrap;
  border: yellowgreen solid 5px;
}

.jobTitle {
  height: 30%;
  font-size: 1em;
  border: blue 5px solid;
}

.jobDesc {
  height: 70%;
  font-size: 2em;
  border: green 5px solid;
  overflow-y: auto;
}
<div class="jobTitleDescCont">
  <div class="jobTitle">ciao</div>
  <div class="jobDesc">ciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velitciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velitciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velitciao Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit</div> 
</div>
Dharman
  • 30,962
  • 25
  • 85
  • 135
Antonino
  • 3,178
  • 3
  • 24
  • 39
  • Still the same thing bro but your answer led me to try something. You wouldn't expect this to be the culprit. The **child flex item** actually has a **sibling** \. I removed the \ and the 30-70 spacing works perfectly. I still don't understand why the \ is ignored. – Shu Pesmerga Jul 12 '20 at 02:00
  • @ShuPesmerga yep but the full code with the `img` was published only later in the answer, so this is probably another question. My answer fixed the `font-size` issue of the original snippet you published, avoiding the entire container and the bottom flex item to be resized by changing that parameter – Antonino Jul 12 '20 at 08:28
0

I found the culprit but I still don't understand why. As you can see, there's an <img> here. If I remove that, everything goes well but even if I wrap that into another , the problem exists again. I don't understand why.

.jobTitleDescCont is supposed to respect the height given by their .col1 flex container.

As .ExpandedjobImage is a static image size, giving height: 100% to .jobTitleDescCont will only cause it to occupy the remaining space and allocate the whatever space remains to .jobTitle and .jobDesc which they share in 30-70 ratio.

<div class="col1">
    <img class="ExpandedjobImage" :src="'a URL'" />
    <div class="jobTitleDescCont">
        <div class="jobTitle">
            <scale-font-size :text="job.title" />
        </div>
        <div class="jobDesc">
            {{job.description}}
        </div>
    </div>
</div>
.col1 {
    display: flex;
    height: 100%;
    flex-flow: column nowrap;
    width: 30%;
    border: solid green 5px;
}

.ExpandedjobImage {
    object-fit: contain;
}

.jobTitleDescCont {
    display: flex;
    flex-flow: column wrap;
    
    border: yellowgreen solid 5px;
}

.jobTitleDescCont .jobTitle {
    font-size: 3em;
    max-height: 30%;

    padding: 5%;
    border: blue 5px solid;
}

.jobTitleDescCont .jobDesc {
    font-size: 1.5em;
    height: 70%;

    padding: 5%;
    word-break: break-all;
    overflow-y: auto;
    border: green 5px solid;
}
Shu Pesmerga
  • 155
  • 1
  • 1
  • 15
  • your final output is still unclear: what are you trying to get? image on top [and out] of a flexbox with 30-70 ratio? image as a flex item inside the container and then 30-70 ratio on the remaining space? what about the job title? does the image needs to be resized to be hosted in the container? a suggestion: this is not really an answer to your question which was changed from the initial one. I would suggest you to delete it, edit the question with all the information needed to answer it and explain the layout you want to achieve so that maybe we can help you find a solution faster – Antonino Jul 12 '20 at 09:10