Heydon / fukol-grids
- вторник, 4 октября 2016 г. в 03:13:30
91 stars today
None
Fukol™ is a lightweight, breakpoint free, completely responsive, element query driven*, progressive enhancement based CSS grid framework. It exists in this README.md
file, in the section titled The CSS (below). It is 264 bytes in size unminified and, when you minify it, it fits in a tweet:
Just edit the lines marked 'edit me!' to your requirements and write an HTML structure like the one illustrated in the section titled The HTML (also below).
(* Not really, but kind of. See 3, below.)
.fukol {
overflow: hidden; /* 7 */
}
.fukol-grid {
display: flex; /* 1 */
flex-flow: row wrap; /* 2 */
margin: -0.5em; /* 6 (edit me!) */
}
.fukol-grid > * {
flex-basis: 10em; /* 3 (edit me!) */
flex-grow: 1; /* 4 */
margin: 0.5em; /* 5 (edit me!) */
}
display: flex
declaration, degrading to a single column layout. No harm done.wrap
which means items will start a new row if there's not enough room on the current one.flex-basis
, the row will be divided into two. If not, another new row is created.0.5em
margin here means gutters of 1em
(the margins double up)..fukol-grid
container remains flush horizontally and no additional margin is added to the vertical flow..fukol-grid
, a container element is provided for the application of positive margins where desired. The overflow: hidden
declaration suppresses horizontal scrollbars caused by negative margins in some browsers and circumstances.<div class="fukol">
<ul class="fukol-grid">
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
<li><!-- grid cell/item/child/whatever --></li>
</ul>
</div>
Sometimes you want certain items to be narrower or wider. You can target these using :nth-child
. For example, you may want to make the first item take up the full width. In which case:
.fukol-grid > *:nth-child(1) {
flex-basis: 100%;
}
Or maybe you want the fifth item to always be approximately twice the size of a regular item (where space permits). If the regular flex-basis
is 10em
, then…
.fukol-grid > *:nth-child(5) {
flex-basis: 20em;
}
Don't worry, flexbox will make sure there aren't any gaps.
Flexbox supports rtl
already. Just add dir="rtl"
to the .fukol-grid
element and the flex direction will automatically be reversed.
README.md
file. See the The CSS section above.That's it.