CSS フローレイアウトとライティングモードの参考資料

2024-04-02

CSS フローレイアウト:フローレイアウトとライティングモード

CSS フローレイアウトは、HTML 要素を画面に配置するための基本的な仕組みです。これは、ブロック要素とインライン要素をどのように配置するか、そして書字方向がどのようにレイアウトに影響するかを定義します。

ブロック要素とインライン要素

  • ブロック要素は、水平方向に並ぶ独立した領域を形成します。例えば、divph1 などがブロック要素です。
  • インライン要素は、他の要素内に連続して配置されます。例えば、spanaimg などがインライン要素です。

フロー方向は、テキストとブロック要素がどのように流れるかを決定します。デフォルトでは、横書きの場合、左から右へ、縦書きの場合、上から下へ流れます。

書字方向は、文字の並び方を決定します。横書きの場合、左から右へ、縦書きの場合、上から下へ書かれます。

writing-mode プロパティは、要素の書字方向を指定します。以下の値を設定できます。

  • horizontal-tb:横書き(デフォルト)
  • vertical-rl:縦書き(上から下、右から左)
  • vertical-lr:縦書き(上から下、左から右)

<div style="writing-mode: vertical-rl">
  <h1>これは縦書きの見出しです</h1>
  <p>これは縦書きの段落です</p>
</div>

この例では、div 要素の書字方向を vertical-rl に設定しているので、文字は上から下へ、右から左へ書かれます。

その他の書字方向プロパティ

  • text-orientation:文字の回転方向を指定します。
  • text-align:テキストの水平方向の配置を指定します。
  • line-height:行の高さを指定します。

CSS フローレイアウトとライティングモードを理解することで、様々なレイアウトを作成することができます。詳細は、MDN Web Docs の 「フローレイアウトと書字方向」: https://developer.mozilla.org/ja/docs/Web/CSS/CSS_flow_layout/Flow_layout_and_writing_modes を参照してください。



CSS フローレイアウトとライティングモードのサンプルコード

縦書きレイアウト

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>縦書きレイアウト</title>
  <style>
    body {
      font-family: 'Noto Sans JP', sans-serif;
      font-size: 16px;
      line-height: 1.5;
    }
    
    .container {
      width: 500px;
      margin: 0 auto;
      padding: 20px;
      border: 1px solid #ccc;
      writing-mode: vertical-rl;
    }
    
    h1 {
      font-size: 24px;
      margin-bottom: 10px;
    }
    
    p {
      margin-bottom: 10px;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>これは縦書きの見出しです</h1>
    <p>これは縦書きの段落です。Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet pretium lectus, eget tincidunt tortor. Nunc accumsan, ipsum sed dignissim feugiat, risus nisl egestas massa, in pulvinar neque leo ac lectus.</p>
    <p>これはもう一つの段落です。Proin eget tortor risus. Donec ullamcorper nulla non metus auctor fringilla. Nulla facilisi. Nam aliquam sem et tortor posuere, eget elementum enim ultricies.</p>
  </div>
</body>
</html>

横書きレイアウトと縦書きレイアウトを混在させる

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>横書きと縦書きを混在させる</title>
  <style>
    body {
      font-family: 'Noto Sans JP', sans-serif;
      font-size: 16px;
      line-height: 1.5;
    }
    
    .container {
      width: 500px;
      margin: 0 auto;
      padding: 20px;
      border: 1px solid #ccc;
    }
    
    h1 {
      font-size: 24px;
      margin-bottom: 10px;
    }
    
    .horizontal {
      writing-mode: horizontal-tb;
    }
    
    .vertical {
      writing-mode: vertical-rl;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>横書きと縦書きを混在させる</h1>
    <p class="horizontal">これは横書きの段落です。Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet pretium lectus, eget tincidunt tortor. Nunc accumsan, ipsum sed dignissim feugiat, risus nisl egestas massa, in pulvinar neque leo ac lectus.</p>
    <p class="vertical">これは縦書きの段落です。Proin eget tortor risus. Donec ullamcorper nulla non metus auctor fringilla. Nulla facilisi. Nam aliquam sem et tortor posuere, eget elementum enim ultricies.</p>
  </div>
</body>
</html>

文字の回転

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>文字の回転</title>
  <style>
    body {
      font-family: 'Noto Sans JP', sans-serif;
      font-size: 16px;
      line-height: 1.5;
    }
    
    .container {
      width: 500px;
      margin: 0 auto;
      padding: 20px;
      border: 1px solid #ccc;
    }
    
    h1 {
      font-size: 24px;
      margin-bottom: 10px;
      text-orientation: sideways-right;
    }


CSS フローレイアウトとライティングモードのその他の方法

グリッドレイアウト

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>グリッドレイアウトと縦書き</title>
  <style>
    body {
      font-family: 'Noto Sans JP', sans-serif;
      font-size: 16px;
      line-height: 1.5;
    }
    
    .container {
      display: grid;
      grid-template-columns: 1fr 2fr;
      grid-gap: 20px;
      width: 500px;
      margin: 0 auto;
      padding: 20px;
      border: 1px solid #ccc;
    }
    
    .header {
      grid-column: 1 / span 2;
      writing-mode: vertical-rl;
    }
    
    .sidebar {
      writing-mode: horizontal-tb;
    }
    
    .main {
      writing-mode: vertical-rl;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="header">
      <h1>これは縦書きの見出しです</h1>
    </div>
    <div class="sidebar">
      <p>これは横書きの段落です。Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
    </div>
    <div class="main">
      <p>これは縦書きの段落です。Proin eget tortor risus. Donec ullamcorper nulla non metus auctor fringilla.</p>
    </div>
  </div>
</body>
</html>

Flexboxは、1次元レイアウトを作成するための便利なツールです。フローレイアウトと組み合わせて、レスポンシブなレイアウトを作成することができます。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Flexboxと縦書き</title>
  <style>
    body {
      font-family: 'Noto Sans JP', sans-serif;
      font-size: 16px;
      line-height: 1.5;
    }
    
    .container {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      width: 500px;
      margin: 0 auto;
      padding: 20px;
      border: 1px solid #ccc;
    }
    
    h1 {
      font-size: 24px;
      margin-bottom: 10px;
      writing-mode: vertical-rl;
    }
    
    .content {
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
      width: 100%;
    }
    
    .item {
      margin: 10px;
      padding: 20px;
      border: 1px solid #ddd;
      writing-mode: horizontal-tb;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>Flexboxと縦書き</h1>
    <div class="content">
      <div class="item">
        <p>これは横書きの段落です。Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
      </div>
      <div class="item">
        <p>これは縦書きの段落です。Proin eget tortor risus. Donec ullamcorper nulla non metus auctor fringilla.</p>
      </div>
    </div>
  </div>
</body>
</html>

CSS Regionsは、ページ上のコンテンツを異なる領域に分割




ゲーム理論:ビジネス、政治、日常生活に潜む戦略的思考

ゲーム理論の基本的な要素は以下の3つです。プレイヤー: 意思決定を行う主体戦略: プレイヤーが選択できる行動の選択肢利得: プレイヤーが各戦略を選択したときの得られる利益ゲーム理論は、これらの要素を数学的なモデルを用いて分析することで、プレイヤーがどのような戦略を選択するのか、どのような結果になるのかを予測することができます。



CSSでセピア色の世界へようこそ!画像や要素をレトロに変身させる魔法の方法

CSSの「Filter Effects」機能の一つである「sepia()」は、画像や要素をモノクロ化し、茶褐色(セピア色)のトーンを適用する関数です。古い写真のようなレトロな雰囲気を演出したい場合などに効果的に使用できます。構文n は、セピア色の強さを表す数値です。0.0の場合は元の画像の色合いが維持され、1.0になると完全にセピア色になります。


ルビの配置を自在に操る! CSS Miscellaneous の ruby-position プロパティ

使い方[値] には、以下のいずれかを指定できます。over:ルビをベース文字の上部に配置します。under:ルビをベース文字の下部に配置します。before:ルビをベース文字の左側に配置します。after:ルビをベース文字の右側に配置します。


CSS Miscellaneousの gap プロパティ

この解説では、gap プロパティの以下の内容を分かりやすく説明します。gap プロパティの役割と利点gap プロパティの基本的な使い方gap プロパティの詳細な設定gap プロパティとその他のプロパティとの比較gap プロパティの注意点と制限事項


画像をユニークな形状で切り抜く! CSS mask-composite のすべて

mask-composite は、マスク画像とマスク対象要素をどのように合成するかを指定するプロパティです。画像やテキストをユニークな形状で切り抜き、さまざまな視覚効果を作成するために使用できます。プロパティ値mask-composite は以下の値を受け取ります。



これで完璧!CSS Grid レイアウトにおける grid-auto-rows プロパティの使いこなし術

grid-auto-rows プロパティは、以下のいずれかの値を使用して設定できます。長さ: 行の高さをピクセル、em、remなどの長さの単位で指定します。パーセンテージ: 行の高さをグリッドコンテナのブロックサイズに対する割合で指定します。


フロントエンドエンジニア必見!CSS align-tracks でワンランク上のレイアウト

align-tracks は、CSS Grid レイアウトにおける 組積軸 方向のグリッドトラックの配置を制御するプロパティです。これは、実験的な機能 であり、全てのブラウザでサポートされているわけではありません。適用対象align-tracks は、以下の条件を満たす要素にのみ適用されます。


「scroll-margin-bottom」でスクロールバー下部の余白を調整し、読みやすいページを作ろう

**「scroll-margin-bottom」**は、主に以下の目的に使用されます。スクロールバーとコンテンツの間の余白を調整し、読みやすさを向上させるスクロールバーがコンテンツに重なって表示されるのを防ぐスクロールバーのデザインを調整し、サイトの全体的なデザインと調和させる


CSS Miscellaneous と mod プログラミング:Web デザインの可能性を広げる

mod プログラミングは、既存のコードを修正・拡張することで、新しい機能や動作を追加するプログラミング手法です。CSS にも適用できます。既存の CSS フレームワークやライブラリに依存せずに、自由度の高いカスタマイズが可能コード量を削減し、軽量で効率的な CSS を構築できる


CSS Miscellaneousにおける@namespaceの解説

プレフィックス: 名前空間の識別子。セレクタやプロパティ名の前に付加されます。URL: 名前空間の関連付けられたURI。省略可能です。この例では、ns1という名前空間を定義し、http://example. com/ns1というURIに関連付けています。ns1|h1セレクタは、名前空間ns1のh1要素にのみ適用されます。同様に、font-family: ns1-serif;プロパティは、ns1名前空間のserifフォントファミリーを指定します。