縦書きで段組みする(HTML/CSS)

前書き

縦書きで段組みする方法を掲載しています。

目次

  1. 段落数と高さを文字数に合わせて調整する方法
  2. overflow-y: auto を指定する方法
  3. 参考

段落数と高さを文字数に合わせて調整する

縦書きにする
writing-mode: vertical-rl;
文字数に合わせて段組みする
段落数(column-count)と高さ(height)をJavaScriptで調整する。
段組みを使って縦書きの文章をレスポンシブ対応させる方法

<div class="wrap" data-tategaki="wrap">
  <div class="block" data-tategaki="block">
    <p class="ttl"><ruby>大祓詞<rt>おほはらへのことば</rt></ruby></p>
    <p class="text"><ruby>高天原<rt>たかまのはら</rt></ruby>に・・・</p>
  </div>
</div>

.wrap{
  writing-mode: vertical-rl;
  text-orientation: upright;
  font-feature-settings: "vpal";
  width: 100%;
  overflow: hidden;
  line-height: 3;
  column-rule-style: solid;
  column-rule-width: 1px;
  column-rule-color: #a675a5;
  column-gap: 40px;
  column-fill:auto;
}
.block{
  max-height: 75vh;
}

// column-countを指定した要素の幅は、ブラウザによって異なる
// chrome → 横長
// firefox → 縦長

const wrap = document.querySelector('[data-tategaki="wrap"]');
const block = document.querySelector('[data-tategaki="block"]');

const heightAdjust = () => {
  if( block ){
    const blockW = block.offsetWidth; //1段の横幅
    const blockH = block.offsetHeight; //1段の高さ
    const wrapW = wrap.offsetWidth; //表示場所の横幅
    const windowH = Math.ceil( window.innerHeight * 0.75 ); //表示場所の高さ(max-height:75vhを指定している為)
    let cc = "auto"; //はみ出てなければ
    let h = windowH; //〃

    if( blockW > wrapW ){ //横にはみ出ていれば
      cc = Math.ceil( blockW / wrapW ); //何段に分けたら収まるか
      h = ( blockH + 40 ) * cc; //( 1段の高さ + column-gap )× 段数
    }else if( blockH > windowH ){ //縦にはみ出ていれば
      cc = Math.ceil( blockH / windowH ); //何段に分けたら収まるか
      h = windowH * cc; // 1段の高さ × 段数
    }
    wrap.style.columnCount = cc; //段数
    wrap.style.height = h + "px"; //表示場所の高さ
  }
}

document.addEventListener('DOMContentLoaded', () => {
  heightAdjust();
});

見本

大祓詞おほはらへのことば

高天原たかまのはら神留かむづまりすめらがむつ神漏岐かむろぎ 神漏美かむろみみことちて 八百萬やほよろづの神等かみたちかむつどへにつどたまかむはかりにはかたまひて 皇御孫命すめみまのみこと豐葦原水穗國とよあしはらのみづほのくに安國やすくにたひらけくろしせと ことさしまつりき さしまつりし國内くぬち荒振あらぶ神等かみたちをば かむはしにはしたまかむはらひにはらたまひて 語問こととひし 磐根いはね 樹根立きねたち くさ片葉かきはをも語止ことやめて あめ磐座いわくらはなあめ八重雲やへぐも伊頭いづ千別ちわきに千別ちわきて 天降あまくださしまつりき さしまつりし四方よも國中くになか大倭日高見國おほやまとひだかみのくに安國やすくにさだまつりて した磐根いはね宮柱みやばしら太敷ふとし高天たかまのはら千木ちぎ高知たかしりて 皇御孫すめみまのみことみづ御殿仕みあらかつかまつりて あめ御陰みかげ 御陰みかげかくして 安國やすくにたひらけくろしさむ國内くぬちでむあめ益人等ますひとらあやまをかしけむ種種くさぐさ罪事つみごとあまつみ くにつみ 許許太久ここだくつみでむ でば あま宮事みやごとちて あま金木かなぎもとすゑちて 千座ちくら置座おきくららはして あま菅麻すがそ本刈もとか末刈すゑかりて 八針やはりきて あま祝詞のりと太祝詞事ふとのりとごと
らば あまかみあめ磐門いはとひらきて あめ八重雲やへぐも伊頭いづ千別ちわきに千別ちわきて こしさむ くにかみ高山たかやますゑ 短山ひきやますゑのぼして 高山たかやま伊襃理いぼり 短山ひきやま伊襃理いぼりけてこしさむ こししてば つみつみらじと 科戸しなどかぜあめ八重雲やへぐもはなことごとあした御霧みぎり ゆふべ御霧みぎり朝風あさかぜ タ風ゆふかぜはらことごと大津邊おほつべ大船おほぶねはなともはなちて 大海原おほうなばらはなことごと彼方をちかた繁木しげきもと燒鐮やきがま敏鐮とがまちて はらことごとのこつみらじと はらたまきよたまこと高山たかやますゑ 短山ひきやますゑより 佐久那太理さくなだり多岐たぎ速川はやかは瀨織津比賣せおりつひめかみ 大海原おほうなばらでなむ なば 荒潮あらしほしほ八百道やほぢ八潮道やしほぢしほ八百會やほあひ速開都比賣はやあきつひめかみ 加加かかみてむ 加加かかみてば 氣吹戸いぶきど氣吹戸主いぶきどぬしかみ 根國ねのくに 底國そこのくに息吹いぶはなちてむ 氣吹いぶはなちてば 根國ねのくに 底國そこのくに速佐須良比賣はやさすらひめかみ 佐須良さすらうしなひてむ 佐須良さすらうしなひてば つみつみらじと はらたまきよたまことあまかみくにかみ 八百萬神等やほよろづのかみたちともこしせとまを

overflow-y: auto を指定する方法

縦書きにする
writing-mode: vertical-rl;
段落の高さを指定して、下側にはみ出ないようにする
column-width: 75vh;
overflow-y: auto;

.wrap{
  writing-mode: vertical-rl;
  text-orientation: upright;
  font-feature-settings: "vpal";
  width: 100%;
  height: 75vh;
  overflow-y: auto;
  line-height: 3;
  column-rule-style: solid;
  column-rule-width: 1px;
  column-rule-color: #a675a5;
  column-gap: 40px;
  column-fill:auto;
  column-width: 75vh;
}

見本

大祓詞おほはらへのことば

高天原たかまのはら神留かむづまりすめらがむつ神漏岐かむろぎ 神漏美かむろみみことちて 八百萬やほよろづの神等かみたちかむつどへにつどたまかむはかりにはかたまひて 皇御孫命すめみまのみこと豐葦原水穗國とよあしはらのみづほのくに安國やすくにたひらけくろしせと ことさしまつりき さしまつりし國内くぬち荒振あらぶ神等かみたちをば かむはしにはしたまかむはらひにはらたまひて 語問こととひし 磐根いはね 樹根立きねたち くさ片葉かきはをも語止ことやめて あめ磐座いわくらはなあめ八重雲やへぐも伊頭いづ千別ちわきに千別ちわきて 天降あまくださしまつりき さしまつりし四方よも國中くになか大倭日高見國おほやまとひだかみのくに安國やすくにさだまつりて した磐根いはね宮柱みやばしら太敷ふとし高天たかまのはら千木ちぎ高知たかしりて 皇御孫すめみまのみことみづ御殿仕みあらかつかまつりて あめ御陰みかげ 御陰みかげかくして 安國やすくにたひらけくろしさむ國内くぬちでむあめ益人等ますひとらあやまをかしけむ種種くさぐさ罪事つみごとあまつみ くにつみ 許許太久ここだくつみでむ でば あま宮事みやごとちて あま金木かなぎもとすゑちて 千座ちくら置座おきくららはして あま菅麻すがそ本刈もとか末刈すゑかりて 八針やはりきて あま祝詞のりと太祝詞事ふとのりとごと
らば あまかみあめ磐門いはとひらきて あめ八重雲やへぐも伊頭いづ千別ちわきに千別ちわきて こしさむ くにかみ高山たかやますゑ 短山ひきやますゑのぼして 高山たかやま伊襃理いぼり 短山ひきやま伊襃理いぼりけてこしさむ こししてば つみつみらじと 科戸しなどかぜあめ八重雲やへぐもはなことごとあした御霧みぎり ゆふべ御霧みぎり朝風あさかぜ タ風ゆふかぜはらことごと大津邊おほつべ大船おほぶねはなともはなちて 大海原おほうなばらはなことごと彼方をちかた繁木しげきもと燒鐮やきがま敏鐮とがまちて はらことごとのこつみらじと はらたまきよたまこと高山たかやますゑ 短山ひきやますゑより 佐久那太理さくなだり多岐たぎ速川はやかは瀨織津比賣せおりつひめかみ 大海原おほうなばらでなむ なば 荒潮あらしほしほ八百道やほぢ八潮道やしほぢしほ八百會やほあひ速開都比賣はやあきつひめかみ 加加かかみてむ 加加かかみてば 氣吹戸いぶきど氣吹戸主いぶきどぬしかみ 根國ねのくに 底國そこのくに息吹いぶはなちてむ 氣吹いぶはなちてば 根國ねのくに 底國そこのくに速佐須良比賣はやさすらひめかみ 佐須良さすらうしなひてむ 佐須良さすらうしなひてば つみつみらじと はらたまきよたまことあまかみくにかみ 八百萬神等やほよろづのかみたちともこしせとまを

参考

段組みを使って縦書きの文章をレスポンシブ対応させる方法

関連記事

実語教(じつごきょう)を素読する

先頭に戻る
ページの先頭に戻る