Oh MyUtils

CSS Flexbox生成器 - Flexレイアウトビジュアルビルダー オンライン

ビジュアルコントロールでCSS Flexboxレイアウトを作成。方向、配置、折り返し、ギャップをライブプレビューで調整 — CSSコード自動生成。

よくある質問

CSS Flexboxとは何ですか?

CSS Flexbox(Flexible Box Layout)は、コンテナ内のアイテム間のスペースを効率的に配置、整列、分配するCSSレイアウトモジュールです。従来のブロック/インラインレイアウトとは異なり、flexboxは方向に依存せず、一次元(行または列)で動作します。レスポンシブデザイン、ナビゲーションバー、カードレイアウト、要素のセンタリングに最適です。

このFlexboxジェネレーターの使い方は?

コントロールパネルでコンテナプロパティを設定します。追加/削除ボタンで子アイテムを管理します(デフォルト3個)。プレビュー内のアイテムをクリックして個別のflexプロパティを調整します。プリセットレイアウトを出発点として使用することもできます。コピーボタンで生成されたCSSとHTMLコードをコピーします。

データは安全ですか?サーバーに送信されますか?

はい、データは完全に安全です。このツールはクライアントサイドのJavaScriptを使用してブラウザ内で完全に実行されます。レイアウト設定、CSSコード、いかなるデータもサーバーに送信されません。すべてのコード生成とプレビューレンダリングはお使いのデバイスでローカルに行われます。

justify-contentとalign-itemsの違いは?

justify-contentは主軸に沿ったアイテムの配置を制御します。align-itemsは交差軸に沿ったアイテムの整列を制御します。例えば、行レイアウトではjustify-content: centerは水平方向にセンタリングし、align-items: centerは垂直方向にセンタリングします。

flex-wrapはいつ使うべきですか?

flex-wrap: wrapは、アイテムを1行に詰め込むのではなく複数行に流したい場合に使用します。レスポンシブカードグリッド、タグリスト、コンテナ幅が不足した時にアイテムが自然に次の行に移動するレイアウトに不可欠です。

gapプロパティとは何ですか?マージンより優れている理由は?

gapプロパティはコンテナの外側にスペースを追加せずにflexアイテム間の間隔を定義します。マージンとは異なり、gapはアイテム間にのみスペースを作成し、マージンの相殺問題がなく、flex-directionに関係なく一貫して動作します。

flex-grow、flex-shrink、flex-basisはどのように連携しますか?

これら3つのプロパティはコンテナ内でアイテムのサイズを制御します。flex-basisは残りのスペースが分配される前の初期サイズを設定します(デフォルト: auto)。flex-growは残りの空きスペースをどれだけ取るかを決定します(デフォルト: 0)。flex-shrinkはコンテナが小さすぎる場合にどれだけ縮むかを決定します(デフォルト: 1)。例:flex: 1 1 0はアイテムが均等に伸縮し、同じ割合のスペースを占めます。

コード例

// CSS Flexbox Generator - JavaScript

function generateFlexboxCSS(options = {}) {
  const {
    display = 'flex',
    flexDirection = 'row',
    flexWrap = 'nowrap',
    justifyContent = 'flex-start',
    alignItems = 'stretch',
    alignContent = 'stretch',
    rowGap = 0,
    columnGap = 0,
  } = options;

  const rules = [`display: ${display}`];

  if (flexDirection !== 'row') rules.push(`flex-direction: ${flexDirection}`);
  if (flexWrap !== 'nowrap') rules.push(`flex-wrap: ${flexWrap}`);
  if (justifyContent !== 'flex-start') rules.push(`justify-content: ${justifyContent}`);
  if (alignItems !== 'stretch') rules.push(`align-items: ${alignItems}`);
  if (alignContent !== 'stretch' && flexWrap !== 'nowrap') {
    rules.push(`align-content: ${alignContent}`);
  }
  if (rowGap > 0 || columnGap > 0) {
    if (rowGap === columnGap) {
      rules.push(`gap: ${rowGap}px`);
    } else {
      rules.push(`gap: ${rowGap}px ${columnGap}px`);
    }
  }

  return rules.map(r => `${r};`).join('\n');
}

function generateFlexItemCSS(options = {}) {
  const {
    flexGrow = 0,
    flexShrink = 1,
    flexBasis = 'auto',
    order = 0,
    alignSelf = 'auto',
  } = options;

  const rules = [];
  if (flexGrow !== 0 || flexShrink !== 1 || flexBasis !== 'auto') {
    rules.push(`flex: ${flexGrow} ${flexShrink} ${flexBasis}`);
  }
  if (order !== 0) rules.push(`order: ${order}`);
  if (alignSelf !== 'auto') rules.push(`align-self: ${alignSelf}`);

  return rules.map(r => `${r};`).join('\n');
}

// Usage
console.log(generateFlexboxCSS({
  justifyContent: 'center',
  alignItems: 'center',
  rowGap: 16,
  columnGap: 16,
}));
// display: flex;
// justify-content: center;
// align-items: center;
// gap: 16px;

関連ツール