I started learning bootstrap from GetBootstrap source and I saw an example:
<div class="row">
<div class="col-xs-9">.col-xs-9</div>
<div class="col-xs-4">.col-xs-4<br>Since 9 + 4 = 13 > 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div>
<div class="col-xs-6">.col-xs-6<br>Subsequent columns continue along the new line.</div>
</div>
Now col-xs-9 means they should take 9 columns on mobile. It is also taking 9 columns on my desktop screen. How is that happening?
Note: Grid System in framework is 12 column layout.
Yes it's functioning properly as expected because whenever you apply a class.
Let suppose xs then it the same property will be applied to xs and screen greater than of that size.
So in your case col-xs-9 will be applied to extra-small screen and screen having resolution greater than that.
If you want it to take 100% of the width on desktop, try <div class="col-xs-9 col-md-12">.
Each column equals 1/12th of 100% width. Therefore if you want to get 100%, then the column sum needs to equal 12.
<div class="row">
<div class="col-xs-12 col-md-4"></div>
<div class="col-xs-12 col-md-4"></div>
<div class="col-xs-12 col-md-4"></div>
</div>
This example would make 3 DIVs below each other on mobile(12 = 100% width) but 3 DIVs per 100% width on desktops(4x3 = 100% width). This example is more often used in practice when you want DIVs to take up more width on smaller screens.
See this for a more detailed explanation. Also, I found this tutorial really helpful when I first started out trying to understand the grid system.
You can add different classes based on your Device width.
In Bootstrap grid system, it is scaled to a maximum of 12 columns. In the above example 9+4+6=18.
Sum should always be equal or less than 12.
Example
<div class="col-xs-9 col-md-5"> will take up 9 columns in mobile and 5 columns in desktop.
For Different devices :
col-xs-*(for mobiles)
col-sm-*(for small devices)
col-md-*(for desktops)
col-lg-*(for larger devices)
Related
Hi y'all I'm trying to understand why my columns are stacking on top of each other instead of being side by side.
Here's a screenshot of my page: Everything above the shopping cart I want to be to the right of the main page content like a side bar but I'm struggling to make that happen
And here is my html
<div class="container-fluid">
<div class="row">
<div class="col-sm-9 col-md-6 col-lg-8">
<app-grocery-sidebar></app-grocery-sidebar>
</div>
<div class="col-sm-9 col-md-6 col-lg-8">
<recipes></recipes>
</div>
</div>
</div>
The bootstrap grid system has 12 columns per row. If the total number of columns is greater than 12, then the spare columns will wrap into the next row.
In your example, for small screens you have 2 x col-sm-9 classes, which makes a total of 18 columns. For medium screens you have 2 x col-md-6 classes, which makes a total of 12 columns, so it should work fine for this screen size, each column should have the same width. For large screens you have 2 x col-lg-8 classes, which makes a total of 16 columns.
You need to decide what % of the screen you want your sidebar to take up on large screens. For example, say you want it to take 25% of the screen, then you should give col-lg-3 to the sidebar and col-lg-9 to the recipes. If you want this to be the case on all screen sizes, then use col-3 and col-9 respectively.
If you want to give 33% of the screen to you sidebar, then you should use col-lg-4 and col-lg-8 respectively.
col-lg-2and col-lg-10 will give 16.6% of the screen to the sidebar and 83.3% of the screen to the recipes.
col-md-6 for both, will give each element equal width of the screen on medium sized screens.
If you want all columns to take up equal space, you can also just use the col class on each element.
Read more on the Bootstrap docs for their Grid system.
So basically I have something like
<div class="col-xs-3">
stuff
</div>
and I want it to change to something like
<div class="col-xs-8 col-xs-offset-2">
stuff
</div
So I essentially want to take a div that's placed on the left and move it to the center and widen the column size when the viewport width is <768px. How can I do this?
Check the grid documentation from their site.
You can define multiple classes for the different breakpoints. If I understand you correctly you need something like this:
<div class="col-sm-3 col-xs-8 col-xs-offset-2">stuff</div>
This translates to: 3 columns on small devices (>= 768px) and 8 columns + 2 offset columns for extra small devices (< 768px). They also have col-md and col-lg- classes.
What is the difference in between below two methods?
Method #1
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
</div>
Method #2
<div class="col-md-12">
</div>
I'm using the second method and it works for all small and large devices perfectly then when do i need the first method?
This is a good question. I see a few others have answered it already, but I'd like to go a little bit more in depth in case you're curious.
In method 2, you're specifically saying "I want this container to take up the full 12 at 970px and above. Since it's a full 12, though, it will retain the full-width 12 all the way down to the smallest resolution. If, however, you had two col-md-6's, the 6's would become 12's when the screen goes below 970px due to the use of md.
In your first method, you're explicitly stating that you want the column to be the full 100% at all the breakpoints.
To answer your question "Why do I need the first method?", you simply don't. The first method is overkill since bootstrap will make them all 100% by default anyways. The only reason you would want to use something like the first method is if you want to show the content in different layouts at different resolutions.
For example:
<div class="col-sm-6 col-md-3">
</div>
This would make the column a 3 at all resolutions 992px and above (because of the md). By default, bootstrap would make the column a full 12 below 992px using the col-md-3 class but with the declaration of col-sm-6, you're overwriting it and making it a 6 on all resolutions between 768px and 992px. Everthing below 768px (col-xs-*) would still make the column a full 12. You could overwrite this by declaring a 'col-xs-*' class just as you did with the 'col-sm-6'
If a smaller resolution is not explicitly stated, it's going to be a 12. Anything you declare will apply to that resolution and above with the exception of the xs. xs will declare 768px and below.
Here is the official bootstrap documentation to show the grid options and their associated resolutions:
https://getbootstrap.com/css/#grid-options
Here's a bootply to help visualize this:
http://www.bootply.com/c0KgRryXcl
I hope that helps!
You won't notice a difference with col-md-12 as it's the full width of the container, but if you had 2 col-md-6's, they would look squished together on a small device, hence why you'd use col-xs-12, then the breakpoint would kick in and it would change from 50% to 100%.
The first method is useful if you want to change your proportions of divs when on a smaller device.
For example, you may have the following
<div class="row">
<div class="col-xs-12 col-md-6">
</div>
<div class="col-xs-12 col-md-6">
</div>
</div>
So on a small device, instead of each occupy half of the width (which will be small), the two columns will be stacking up
These classes are used for different devices resolution. your first method includes all devices like mobile , laptops, desktops and larger and second method includes only desktop.
This are grid classes in bootstrap,
xs (for phones)
sm (for tablets)
md (for desktops)
lg (for larger desktops)
The classes above can be combined to create more dynamic and flexible layouts.
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
</div>
Bootstrap's grid system allows up to 12 columns across the page.
but 12 columns each row. Your code have added 60 columns in one row its wrong.
Basic Structure of bootstrap grid:
<div class="row">
<div class="col-*-*"></div>
<div class="col-*-*"></div>
<div class="col-*-*"></div>
</div>
I am pretty new in Twitter BootStrap and I have the following doubt.
I have clear how the BootStrap grid layout works so if I have something like this:
<div class="row">
<div class="col-md-4">
<div class="col-md-4">
<div class="col-md-4">
</div>
simply means that I have a row divided into 3 columns of the 4 dimension (because the BootStrap grid layout is based on 12 columns)
My doubt is related to the md definition of these columns.
I know that I can use also something like <div class="col-xs-4">
What exatly is the difference between the col-md-4 class and the col-xs-4 class?
Basically,
it will define the behavior of the columns in xl (extra large screens) and in md (medium screens);
Ex: when the screen is xl the columns will have the proportion where 12 is the sum of the columns, if the screen get smaller the columns will break. however, if you setup with md you can get the screen even smaller but the columns will no break until the dimensions:
xs (for phones)
sm (for tablets)
md (for desktops)
lg (for larger desktops)
reference:
https://getbootstrap.com/examples/grid/
I'm making a responsive web page using bootstrap. It works as intended when the browser window is >= 50% of the screen size. I have some column elements nested inside of a column element, which is nested inside a row element. So, there are 3 children columns of each row, and then 4 children columns for each column. The problem may be occurring because I have a column nested inside of a column, but if that were the case then wouldn't it display incorrectly when the browser is full screen, too?
When the window shrinks to less than 50% of the screen size, the most nested columns display as rows. I don't understand why this is happening.
<div class="row foo" ng-repeat="foo in fooCtrl.foos">
<h4>{{foo.name}}</h4>
<div class="col-md-4 fuzz">
<h5>{{foo.type[0].fuzz}}</h5>
<!-- START BAR DISPLAY -->
<div class="col-md-3 bar" ng-repeat="bar in barCtrl.bars">
<h6>{{bar.name}}</h6>
</div>
<!-- END BAR DISPLAY -->
</div>
<!-- More columns -->
</div>
In simpler terms, the bars aren't being displayed as columns when the window size is < 50% of the screen.
The col-md-* bootstrap classes only apply at a media query breakpoint where the window width is greater than or equal to 992px. As others have stated, you will need to use col-xs-* as that is the default class used.
You can read more here: http://getbootstrap.com/css/#grid. As a best practice, you would typically wrap the maximum number of columns that could constitute a row in a div with the class row; however, that may not be your specific problem in this case. In most cases this is the set of elements with the lowest number (n) (col-*-n) that add up to 12 if you are using the default grid settings.
Some examples using your .bar classed elements:
4 columns of .bar elements on all devices:
<div class="col-xs-3 col-md-3 bar">
3 columns of .bar elements on extra small devices up to medium devices (992px in width) at which point 4 columns will display:
<div class="col-xs-4 col-md-3 bar">
2 columns of .bar elements up to medium devices, then 4 columns per row:
<div class="col-xs-6 col-md-3 bar">
And finally 1 .bar element per row up to medium devices, then 4 columns per row:
<div class="col-xs-12 col-md-3 bar">
You need to have a div within the larger column with class row. Then you need to know that if you are going to subdivide the larger columns, the way bootstrap works is that you would have up to 12 subdivisions, but with a smaller col, something like col-sm-12. But I am not too sure on all this. I have read and reread those bootstrap grid descriptions, and I am still trying to make sense of them.
<div class="row">
<div class="col-md-4>
<div class="row">
<div class="col-sm-3">
</div>
<div class="col-sm-3">
</div>
<div class="col-sm-3">
</div>
<div class="col-sm-3">
</div>
</div>
</div>
<div class="col-md-4>
</div>
<div class="col-md-4>
</div>
</div>
You've set the size only for md. You haven't set xs/sm/lg.
The default breakpoints for bootstrap are 768px, 992px and 1200px.
I suppose you have a HD Monitor the md-breakpoint is about half the screensize and the view will swith to sm ignoring col-md-x and using col-sm-x
Note: If nothing else set also set col-xs-12 to prevent weird behavior