# Flexbox 試してみた

よくわかっていないのでとりあえず、いろいろ試してみました。

#

<!-- Sample.vue -->

<template lang="pug">
mixin item(style)
  .item(class=style)
    p アイテム1
  .item(class=style)
    p アイテム2
  .item(class=style)
    p アイテム3
  .item(class=style)
    p アイテム4

.sample
  p 初期値(inline)
  .items.inline
    +item
  p flex-wrap: nowrap;
  .items.nowrap
    +item
  p flex-basis: 25%;
  .items
    +item('flex-25')
  p flex-basis: 33.3%;
  .items
    +item('flex-33')
  p flex-basis: 33.3%; justify-content: flex-end;
  .items.flex-end
    +item('flex-33')
  p flex-basis: 33.3%; flex-grow: 1;
  .items.flex-end
    +item('flex-33 flex-grow')
  p flex-basis: 50%;
  .items
    +item
  p flex-wrap: wrap-reverse;
  .items.wrap-reverse
    +item
  p flex-direction: row-reverse;
  .items.flex-direction
    +item
  p order(順番入れ替え)
  .items.order
    +item
</template>

<style lang="scss" scoped>
.sample {
  .items {
    display: flex;
    flex-wrap: wrap;
    margin-bottom: 50px;
    text-align: center;
    color: #ffffff;

    &.inline {
      display: inline; // 初期値
    }

    &.nowrap {
      flex-wrap: nowrap;
    }

    &.wrap-reverse {
      flex-wrap: wrap-reverse;
    }

    &.flex-end {
      justify-content: flex-end;
    }

    &.flex-direction {
      flex-direction: row-reverse;
    }

    &.order .item {
      &:first-child {
        order: 4;
      }
      &:nth-child(2) {
        order: 1;
      }
      &:nth-child(3) {
        order: 2;
      }
      &:last-child {
        order: 3;
      }
    }

    .item {
      flex-basis: 50%;

      &.flex-25 {
        flex-basis: 25%;
      }

      &.flex-33 {
        flex-basis: 33.3%;
      }

      &.flex-grow {
        flex-grow: 1;
      }

      &:first-child {
        background: #ff7b17;
      }
      &:nth-child(2) {
        background: #2c3e50;
      }
      &:nth-child(3) {
        background: #282c34;
      }
      &:last-child {
        background: #11b437;
      }
    }
  }
}
</style>

# 結果

初期値(inline)

アイテム1

アイテム2

アイテム3

アイテム4

flex-wrap: nowrap;

アイテム1

アイテム2

アイテム3

アイテム4

flex-basis: 25%;

アイテム1

アイテム2

アイテム3

アイテム4

flex-basis: 33.3%;

アイテム1

アイテム2

アイテム3

アイテム4

flex-basis: 33.3%; justify-content: flex-end;

アイテム1

アイテム2

アイテム3

アイテム4

flex-basis: 33.3%; flex-grow: 1;

アイテム1

アイテム2

アイテム3

アイテム4

flex-basis: 50%;

アイテム1

アイテム2

アイテム3

アイテム4

flex-wrap: wrap-reverse;

アイテム1

アイテム2

アイテム3

アイテム4

flex-direction: row-reverse;

アイテム1

アイテム2

アイテム3

アイテム4

order(順番入れ替え)

アイテム1

アイテム2

アイテム3

アイテム4

# pug mixin

mixin item(class)
  .item(class=class)
    p アイテム1
  .item(class=class)
    p アイテム2
  .item(class=class)
    p アイテム3
  .item(class=class)
    p アイテム4

class=class のように書くとだめだった。

...
ERROR in ./src/.vuepress/components/Blog/2019/02/18/Sample.vue?vue&type=template&id=0bc510cd&scoped=true&lang=pug& (./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/@vuepress/core/node_modules/.cache/vuepress","cacheIdentifier":"21f69b6b-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/pug-plain-loader!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/.vuepress/components/Blog/2019/02/18/Sample.vue?vue&type=template&id=0bc510cd&scoped=true&lang=pug&)
Module build failed (from ./node_modules/pug-plain-loader/index.js):
Error: /Users/xxx/hene/src/.vuepress/components/Blog/2019/02/18/Sample.vue:5:22
    3|   .item(class=c)
    4|     p アイテム1
  > 5|   .item(class=class)
----------------------------^
...

# 感想

自分が作りたいものを作ろうとしたら、時間がかかりそう。

Flexbox を使えば、こういった事ができるというのがなんとなくわかった。

# 参考