やりたい事は出来てきたのですが、 力技すぎてコードが肥大化しているため、 コードの削減を試みます。
- カスタマイズは自己責任でお願いします。
- 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 種類ある事が今更ながらに分かりました w
ここでふと、 4〜6カラムを切り捨てたら3種類で済むのかぁ、、、 とかも考えました w
ともあれ、 修正に取り掛かります。
scss の修正
修正プラン
プランはこうです。
- 現状で、各 css セレクタでのマージン幅は計算できている。
- んで、計算した時点で css を記述してるんで、各 css セレクタ毎に記述されている。
- んじゃぁ、11種類の容れ物(変数)を用意して、css セレクタを放り込んでおいて後からまとめて記述すれば、、、
イケそうな気がする w
修正内容
変数
$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」 の列挙がとても初心者らしいですね w
いや、 連想配列 (マップ型) とか使おうとしたのですが、 値の追加方法がどうにも分からなくて、、、
で、 「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% |
コメント