段落を整えて表示する−その⑦

やりたい事は出来てきたのですが 力技すぎてコードが肥大化しているため コードの削減を試みます

check
  • カスタマイズは自己責任でお願いします。
  • wp-cocoon.comサイトのサポート対象外となります。
スポンサーリンク

どう削減するか

例えば あるメディアクエリ内に

 .blank-box .wp-block-columns.has-2-columns .wp-block-column { 
	 margin-right: 36px; 
 } 
 .blank-box .wp-block-columns.has-3-columns .wp-block-column { 
	 margin-right: 45px; 
 } 
 .blank-box .wp-block-columns.has-4-columns .wp-block-column { 
	 margin-right: 48px; 
 } 
 .blank-box .wp-block-columns.has-5-columns .wp-block-column { 
	 margin-right: 54px; 
 } 
 .blank-box .wp-block-columns.has-6-columns .wp-block-column { 
	 margin-right: 50.4px; 
 } 
 .sticky .wp-block-columns.has-2-columns .wp-block-column { 
	 margin-right: 36px; 
 } 
 .sticky .wp-block-columns.has-3-columns .wp-block-column { 
	 margin-right: 54px; 
 } 
 .sticky .wp-block-columns.has-4-columns .wp-block-column { 
	 margin-right: 36px; 
 } 
 .sticky .wp-block-columns.has-5-columns .wp-block-column { 
	 margin-right: 45px; 
 } 
 .sticky .wp-block-columns.has-6-columns .wp-block-column { 
	 margin-right: 43.2px; 
 } 

といった記述があるとします この記述量の問題点 を三つ思い付きました

  • スタイル指定が同一の css セレクタをまとめられないかな?
  • そもそも、4〜6カラムって使うのか?
  • css セレクタに使っているクラス名が長いよ、、、

順に見ていきます

css セレクタをまとめる

上述のコードを

 .blank-box .wp-block-columns.has-2-columns .wp-block-column, 
 .sticky .wp-block-columns.has-2-columns .wp-block-column, 
 .sticky .wp-block-columns.has-4-columns .wp-block-column { 
	 margin-right: 36px; 
 } 
 .blank-box .wp-block-columns.has-3-columns .wp-block-column, 
 .sticky .wp-block-columns.has-5-columns .wp-block-column { 
	 margin-right: 45px; 
 } 
 .blank-box .wp-block-columns.has-4-columns .wp-block-column { 
	 margin-right: 48px; 
 } 
 .blank-box .wp-block-columns.has-5-columns .wp-block-column, 
 .sticky .wp-block-columns.has-3-columns .wp-block-column { 
	 margin-right: 54px; 
 } 
 .blank-box .wp-block-columns.has-6-columns .wp-block-column { 
	 margin-right: 50.4px; 
 } 
 .sticky .wp-block-columns.has-6-columns .wp-block-column { 
	 margin-right: 43.2px; 
 } 

てな感じに共通化出来ないだろうか 早速と css  まとめる とか css  共通化 などでググっても gulp 周りの しかもメディアクエリをまとめる情報ばかりでした

カンタンには行かなそうでしたので もう少し情報を整理してみました まずはカラム幅の種類を洗い出します

カラム数を n 文字幅を x カラム間マージン幅を 2x とすると 各カラムで取り得るマージン幅は

n=2
2x 3x

n=3
2x 2.5x 3x

n=4
2x 2⅓x 2⅔x 3x

n=5
2x 2.25x 2.5x 2.75x 3x

n=6
2x 2.2x 2.4x 2.6x 2.8x 3x

全部で 11 種類ある事が今更ながらに分かりました

ここでふと 4〜6カラムを切り捨てたら3種類で済むのかぁ、、、 とかも考えました

ともあれ 修正に取り掛かります

scss の修正

修正プラン

プランはこうです

  • 現状で、各 css セレクタでのマージン幅は計算できている。
  • んで、計算した時点で css を記述してるんで、各 css セレクタ毎に記述されている。
  • んじゃぁ、11種類の容れ物(変数)を用意して、css セレクタを放り込んでおいて後からまとめて記述すれば、、、

イケそうな気がする

修正内容

変数

 $column_per_000: (); 
 $column_per_020: (); 
 $column_per_025: (); 
 $column_per_033: (); 
 $column_per_040: (); 
 $column_per_050: (); 
 $column_per_060: (); 
 $column_per_066: (); 
 $column_per_075: (); 
 $column_per_080: (); 
 $column_per_100: (); 

変数を準備します

計算された css セレクタを ここに順次放り込んでいきます

カラムボックス

 @for $i from 2 through $thx_beta_column_loop { 
   .wp-block-columns.has-#{$i}-columns{ 
     .wp-block-column{ 
       $columns_width: 
         $contents_width 
         - $column_margin * ($i - 1) 
       ; 
       $columns_rem: 
         $columns_width / $font_width % $i 
       ; 
       $columns_per: 
         $columns_rem /  ($i - 1) 
       ; 
       @if $columns_per == 0 { 
         $column_per_000: append($column_per_000, &, 'comma'); 
       } 
       @if $columns_per == 0.2 { 
         $column_per_020: append($column_per_020, &, 'comma'); 
       } 
       @if $columns_per == 0.25 { 
         $column_per_025: append($column_per_025, &, 'comma'); 
       } 
       @if $columns_per == (1/3) { 
         $column_per_033: append($column_per_033, &, 'comma'); 
       } 
       @if $columns_per == 0.4 { 
         $column_per_040: append($column_per_040, &, 'comma'); 
       } 
       @if $columns_per == 0.5 { 
         $column_per_050: append($column_per_050, &, 'comma'); 
       } 
       @if $columns_per == 0.6 { 
         $column_per_060: append($column_per_060, &, 'comma'); 
       } 
       @if $columns_per == (2/3) { 
         $column_per_066: append($column_per_066, &, 'comma'); 
       } 
       @if $columns_per == 0.75 { 
         $column_per_075: append($column_per_075, &, 'comma'); 
       } 
       @if $columns_per == 0.8 { 
         $column_per_080: append($column_per_080, &, 'comma'); 
       } 
       @if $columns_per == 1 { 
         $column_per_100: append($column_per_100, &, 'comma'); 
       } 
     } 
   } 
 } 

いつもの通りループで回します

まずは $columns_width: で文章の幅を計算します

続いて $columns_rem: で割り切れない文字数を求めます

ここが新たな試みです $columns_per: 割り切れなかった文字が各カラムマージンに何%ずつ分配されるかを計算します

あとは該当する変数に css セレクタを放り込みます @if の列挙がとても初心者らしいですね

いや 連想配列 マップ型 とか使おうとしたのですが 値の追加方法がどうにも分からなくて、、、

append() を使います 変数 $column_per_xxx & css セレクタ)」 をカンマ区切りで追加します

Cocoon ブロック内カラムボックス

 @each $class, $count in $cocoon_block_class { 
   .#{$class} { 
     @for $i from 2 through $thx_beta_column_loop { 
       .wp-block-columns.has-#{$i}-columns{ 
         .wp-block-column{ 
           $columns_width: 
             $contents_width 
             - $font_width * $count 
           ; 
           $columns_width: 
             $columns_width 
             - $column_margin * ($i - 1) 
           ; 
           $columns_rem: 
             $columns_width / $font_width % $i 
           ; 
           $columns_per: 
             $columns_rem /  ($i - 1) 
           ; 
           @if $columns_per == 0 { 
             $column_per_000: append($column_per_000, &, 'comma'); 
           } 
           @if $columns_per == 0.2 { 
             $column_per_020: append($column_per_020, &, 'comma'); 
           } 
           @if $columns_per == 0.25 { 
             $column_per_025: append($column_per_025, &, 'comma'); 
           } 
           @if $columns_per == (1/3) { 
             $column_per_033: append($column_per_033, &, 'comma'); 
           } 
           @if $columns_per == 0.4 { 
             $column_per_040: append($column_per_040, &, 'comma'); 
           } 
           @if $columns_per == 0.5 { 
             $column_per_050: append($column_per_050, &, 'comma'); 
           } 
           @if $columns_per == 0.6 { 
             $column_per_060: append($column_per_060, &, 'comma'); 
           } 
           @if $columns_per == (2/3) { 
             $column_per_066: append($column_per_066, &, 'comma'); 
           } 
           @if $columns_per == 0.75 { 
             $column_per_075: append($column_per_075, &, 'comma'); 
           } 
           @if $columns_per == 0.8 { 
             $column_per_080: append($column_per_080, &, 'comma'); 
           } 
           @if $columns_per == 1 { 
             $column_per_100: append($column_per_100, &, 'comma'); 
           } 
         } 
       } 
     } 
   } 
 } 

併せて Cocoon ブロック内も計算します 前回からの課題でもあったメンテナンス性を考慮し

 // Cocoon ブロックのクラス名
 $cocoon_block_class: ( 
   blank-box: 2, 
   secondary-box: 2, 
   toggle-content: 2, 
   sticky: 4, 
   common-icon-box: 5 
 ); 

を予め準備し 各ブロックのクラス名と padding 等に要する文字数を与えておきます

スタイルの設定

 @if $column_per_000 != () { 
   #{$column_per_000} { 
     margin-right: $column_margin * (1 + (1/2) * 0); 
   } 
 } 
 @if $column_per_020 != () { 
   #{$column_per_020} { 
     margin-right: $column_margin * (1 + (1/2) * 0.2); 
   } 
 } 
 @if $column_per_025 != () { 
   #{$column_per_025} { 
     margin-right: $column_margin * (1 + (1/2) * 0.25); 
   } 
 } 
 @if $column_per_033 != () { 
   #{$column_per_033} { 
     margin-right: $column_margin * (1 + (1/2) * (1/3)); 
   } 
 } 
 @if $column_per_040 != () { 
   #{$column_per_040} { 
     margin-right: $column_margin * (1 + (1/2) * 0.4); 
   } 
 } 
 @if $column_per_050 != () { 
   #{$column_per_050} { 
     margin-right: $column_margin * (1 + (1/2) * 0.5); 
   } 
 } 
 @if $column_per_060 != () { 
   #{$column_per_060} { 
     margin-right: $column_margin * (1 + (1/2) * 0.6); 
   } 
 } 
 @if $column_per_066 != () { 
   #{$column_per_066} { 
     margin-right: $column_margin * (1 + (1/2) * (2/3)); 
   } 
 } 
 @if $column_per_075 != () { 
   #{$column_per_075} { 
     margin-right: $column_margin * (1 + (1/2) * 0.75); 
   } 
 } 
 @if $column_per_080 != () { 
   #{$column_per_080} { 
     margin-right: $column_margin * (1 + (1/2) * 0.8); 
   } 
 } 
 @if $column_per_100 != () { 
   #{$column_per_100} { 
     margin-right: $column_margin * (1 + (1/2) * 1); 
   } 
 } 

んで 各変数に収納された css セレクタにスタイルを設定します

変数が空の場合はコンパイルエラーになるので if 判定を行っています

結果と問題点

結果

この様な css が書き出されました

 .sticky .wp-block-columns.has-3-columns .wp-block-column, .sticky .wp-block-columns.has-5-columns .wp-block-column, .common-icon-box .wp-block-columns.has-2-columns .wp-block-column, .common-icon-box .wp-block-columns.has-4-columns .wp-block-column { 
   margin-right: 36px; 
 } 
 .wp-block-columns.has-6-columns .wp-block-column { 
   margin-right: 39.6px; 
 } 
 .wp-block-columns.has-4-columns .wp-block-column, .sticky .wp-block-columns.has-4-columns .wp-block-column { 
   margin-right: 42px; 
 } 
 .common-icon-box .wp-block-columns.has-6-columns .wp-block-column { 
   margin-right: 43.2px; 
 } 
 .wp-block-columns.has-3-columns .wp-block-column, .blank-box .wp-block-columns.has-5-columns .wp-block-column, .secondary-box .wp-block-columns.has-5-columns .wp-block-column, .toggle-content .wp-block-columns.has-5-columns .wp-block-column { 
   margin-right: 45px; 
 } 
 .sticky .wp-block-columns.has-6-columns .wp-block-column { 
   margin-right: 46.8px; 
 } 
 .wp-block-columns.has-2-columns .wp-block-column, .wp-block-columns.has-5-columns .wp-block-column, .blank-box .wp-block-columns.has-2-columns .wp-block-column, .blank-box .wp-block-columns.has-3-columns .wp-block-column, .blank-box .wp-block-columns.has-4-columns .wp-block-column, .blank-box .wp-block-columns.has-6-columns .wp-block-column, .secondary-box .wp-block-columns.has-2-columns .wp-block-column, .secondary-box .wp-block-columns.has-3-columns .wp-block-column, .secondary-box .wp-block-columns.has-4-columns .wp-block-column, .secondary-box .wp-block-columns.has-6-columns .wp-block-column, .toggle-content .wp-block-columns.has-2-columns .wp-block-column, .toggle-content .wp-block-columns.has-3-columns .wp-block-column, .toggle-content .wp-block-columns.has-4-columns .wp-block-column, .toggle-content .wp-block-columns.has-6-columns .wp-block-column, .sticky .wp-block-columns.has-2-columns .wp-block-column, .common-icon-box .wp-block-columns.has-3-columns .wp-block-column, .common-icon-box .wp-block-columns.has-5-columns .wp-block-column { 
   margin-right: 54px; 
 } 

いいですね 思った通りの 狙った通りの結果が得られると嬉しいです 容量はこうなりました

前回今回比率
行数 1,527 724 47.4%
文字数 38,015 28,162 74.1%
サイズ 38.6KB 28.7KB 74.4%

問題点

AMPテスト

試しに AMP テストを行ってみた処、、、

既に超えてしまってます さらなる削減が必要ですね ;;

コメント