Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Enabling horizontal scroll in flexbox

Tags:

css

flexbox

I am new to flexbox, and I am trying to make a horizontal scrolling website. The idea is to show the first item as 100% height and width, like covering the screen with the remaining items to the right side, which will only be shown when I scroll.

Here is an image of what I am trying to do: enter image description here

I tried setting the first item to 100% width, but it's still fitted just like other items.

Here is my CSS code:

    body     {         margin: 0;         padding: 0;         background-color: rgb(242, 242, 242);      }     .flex-container     {         display: -webkit-box;               display: -moz-box;                  display: -ms-flexbox;              display: -webkit-flex;              display: flex;              flex-flow:row;           height:100%;         position:absolute;         width:100%;           /*flex-wrap:wrap;*/     }     .box     {         padding: 20px;         color:white;         font-size:22px;         background-color: crimson;         border:1px solid white;         flex:1;         -webkit-flex:1;         text-align:center;     min-width:200px;        }     .splash      {         background-image: url(1.jpg);         width:100%;             background-size:cover;         background-position:50% 50%;         background-repeat: no-repeat;             transition: all 0.6s ease;             flex:10;         -webkit-flex:10;      }      .flex1:hover     {             flex:4;         -webkit-flex:4;      } 

And my HTML code:

<div class="flex-container">             <div class="box splash">1</div>     <div class="box">2</div>     <div class="box">3</div>     <div class="box">4</div> </div> 
like image 619
designerNProgrammer Avatar asked May 16 '14 02:05

designerNProgrammer


People also ask

How do I make my scroll horizontal?

Horizontal scrolling can be achieved by clicking and dragging a horizontal scroll bar, swiping sideways on a desktop trackpad or trackpad mouse, pressing left and right arrow keys, or swiping sideways with one's finger on a touchscreen.

How do I make a div horizontally scrollable?

For horizontal scrollable bar use the x and y-axis. Set the overflow-y: hidden; and overflow-x: auto; that will automatically hide the vertical scroll bar and present only the horizontal scrollbar. The white-space: nowrap; property is used to wrap text in a single line.

Does scrollIntoView work horizontally?

scrollIntoView(true);", element); This works for vertical scrolling but not for horizontal.


1 Answers

Flex items have "flex-shrink: 1" by default. If you want the first item to fill the container and force the others to overflow (as it sounds like you do), then you need to set "flex-shrink: 0" on it.

The best way to do this is via the "flex" shorthand, which you're already using to give it "flex: 10".

Just replace that with flex: 10 0 auto -- the '0' there gives it a flex-shrink of 0, which prevents it from shrinking below the width:100% that you've given it.

Perhaps better: just give it flex: none, since I don't think you're really getting any benefit from the "10" there, since there's no free space to distribute anyway, so the "10" is giving you 10 useless shares of nothing.

So that makes your 'splash' rule into this:

.splash {     background-image: url(1.jpg);     width:100%;     background-size:cover;     background-position:50% 50%;     background-repeat: no-repeat;     transition: all 0.6s ease;     flex:none; } 

Here's a fiddle with this change (but otherwise using your provided CSS/HTML). This renders like your mock-up in Firefox Nightly and Chrome: http://jsfiddle.net/EVAXW/

like image 86
dholbert Avatar answered Sep 24 '22 15:09

dholbert