flex_layout

Flex 布局教程:语法篇

Posted by kunnan on May 21, 2018

前言

image

  • flex layout is biased to the flex directions

  • The flex-flow value and the writing mode determine how these terms map to physical directions (top/right/bottom/left), axes (vertical/horizontal), and sizes (width/height).

Flexbox playground

you can play with the different flex properties and explore the power of the flexbox layout. Combine several flex properties to get complex layouts.

demo code

  • demo code
  • npm install –global gulp
    WARN notice [SECURITY] minimatch has 1 high vulnerability. Go here for more details: https://nodesecurity.io/advisories?search=minimatch&version=2.0.10 - Run `npm i npm@latest -g` to upgrade your npm version, and then `npm audit` to get more info.
    
  • npm install
    Compass is charityware. If you love it, please donate on our behalf at http://umdf.org/compass Thanks!
    npm notice created a lockfile as package-lock.json. You should commit this file.
    
  • gulp
    [17:08:22] Ignoring ffi-1.9.8 because its extensions are not built. Try: gem pristine ffi --version 1.9.8
    directory dist/css
      write dist/css/style.css
      [17:08:24] Finished 'build-css' after 2.36 s
    [17:08:24] Starting 'default'...
    [17:08:24] Finished 'default' after 31 μs
    
  • open file:///Users/devzkn/code/miniprogramDemo/flexbox-playground/dist/index.html 即可查看效果

  • https://cssflex.github.io/

Mini project demonstrating how to make Chrome-like tabs

flexbox-basics

image

  • the flexbox model: The flex layout is constituted of parent container referred as flex container and its immediate children which are called flex items.

image

image

Usage

To use flexbox layout just set the display property on the parent HTML element:

.flex-container {
  display: -webkit-flex; /* Safari */
  display: flex;
}
  • Or if you want to display it like an inline element use:
.flex-container {
  display: -webkit-inline-flex; /* Safari */
  display: inline-flex;
}

Properties for the Parent(flex container)

display

  • This defines a flex container,It enables a flex context for all its direct children.
    .container {
    display: flex; /* or inline-flex */
    }
    

flex-direction

image

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • row (default): left to right in ltr; right to left in rtl
  • row-reverse: right to left in ltr; left to right in rtl
  • column: same as row but top to bottom
  • column-reverse: same as row-reverse but bottom to top

flex-wrap

image

By default, flex items will all try to fit onto one line. You can change that and allow the items to wrap as needed with this property.

.container{
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap (default): all flex items will be on one line
  • wrap: flex items will wrap onto multiple lines, from top to bottom.
  • wrap-reverse: flex items will wrap onto multiple lines from bottom to top.

  • There are some visual demos of flex-wrap here

flex-flow (Applies to: parent flex container element)

This is a shorthand flex-direction and flex-wrap properties, which together define the flex container’s main and cross axes. Default is row nowrap.

flex-flow: <flex-direction> || <flex-wrap>
    flex-flow:row wrap;

justify-content

image

.container {
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
  • flex-start (default): items are packed toward the start line
  • flex-end: items are packed toward to end line
  • center: items are centered along the line
  • space-between: items are evenly distributed in the line; first item is on the start line, last item on the end line
  • space-around: items are evenly distributed in the line with equal space around them. Note that visually the spaces aren’t equal, since all the items have equal space on both sides. The first item will have one unit of space against the container edge, but two units of space between the next item because that next item has its own spacing that applies.
  • space-evenly: items are distributed so that the spacing between any two items (and the space to the edges) is equal.

align-items

image

.container {
  align-items: flex-start | flex-end | center | baseline | stretch;
}
  • flex-start: cross-start margin edge of the items is placed on the cross-start line
  • flex-end: cross-end margin edge of the items is placed on the cross-end line
  • center: items are centered in the cross-axis
  • baseline: items are aligned such as their baselines align
  • stretch (default): stretch to fill the container (still respect min-width/max-width)

align-content

image

  • Note: this property has no effect when there is only one line of flex items.
.container {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
  • flex-start: lines packed to the start of the container
  • flex-end: lines packed to the end of the container
  • center: lines packed to the center of the container
  • space-between: lines evenly distributed; the first line is at the start of the container while the last one is at the end
  • space-around: lines evenly distributed with equal space around each line
  • stretch (default): lines stretch to take up the remaining space

Properties for the Children(flex items)

order

Default value: 0

image

.item {
  order: <integer>; /* default is 0 */
}

image

flex-grow

.item {
  flex-grow: <number>; /* default 0 */
}

image

image

flex-shrink

By default all flex items can be shrunk, but if we set it to 0 (don’t shrink) they will maintain the original size

.item {
  flex-shrink: <number>; /* default 1 */
}

image

flex-basis

.item {
  flex-basis: <length> | auto; /* default auto */
}

image

flex

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

align-self

image

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
  • The 3rd and 4th flex items have overridden alignment through the align-self property

image

Note for flex items

  • float, clear and vertical-align have no effect on a flex item, and do not take it out-of-flow.

See Also

/Users/devzkn/bin/knpost flex_layout Flex 布局教程:语法篇 -t flex
#原来""的参数,需要自己加上""

转载请注明: > flex_layout