【カエレバ-Cocoon仕様】「kaerebalink-image」のCSSを解説

カエレバ クラス名に設定されたCSSの解説(アイキャッチ) CSS
この記事は約15分で読めます。

今回はカエレバのHTML内にあるclass名の一つ、「kaerebalink-image」のCSSを解説していこうと思います。

この記事を読むことで、以下が分かります。

  • kaerebalink-imageとは?
  • 箱に合わせた画像のCSS設定法
  • 大きい画像よる全体への影響
  • 「em」や「inherit」に関して
  • 「!important」の強制力
  • 「float」と「flex」の関係性
  • 画像全体をリンク化させる方法

kaerebalink-imageの紹介

kaerebalink-imageとは?

カエレバHTML内にある、<div>に指定されたclass名の一つです。
主に、カエレバのアフィリエイトリンクを構成する中で「画像」に関しての表示・配置をコントロールしているclass名です。

vscodeのカエレバ(kaerebalink-image用)

kaerebalink-imageの役割

  • 「商品の役割」と「写真元になっているサイトのリンク」が中に入っている(囲っている)。
  • 主に写真の表示・配置系をコントロールします。

以降から、「Cocoonテーマ」に設定されていた「kaerebalink-image」のCSSについて解説していきますね。

以下のフローから得られた内容を説明しますね。

  • 「kaerebalink-image」にCSSを設定
  • ブラウザ表示にあった変化をピックアップ
  • 変化に影響しているCSSを説明する

ちなみに、下記の画像がCSS設定前とCSS設定後のビフォーアフターです。

➂-1kaerebalink-image変化前(pc)

➂-1kaerebalink-image変化後(pc)

一応、スマホ版の表示も載せておきます

➂-1kaerebalink-image変化前(スマホ)➂-1kaerebalink-image変化後(スマホ)
画像の青・緑・黄・橙の部分

画像で元々色付けされている箇所は、検証ツールによるものです。

各色に関しては、以下の意味があります。

検証ツール widht×height
青(#8cb6c0)=content
(width×height)

検証ツール padding
緑(#c3d08b)=padding

検証ツール border
黄(#fddd9b)=border

検証ツール margin
橙(#f9cc9d)=margin

検証ツール position
無(#ffffff)=position

【Cocoon版】「kaerebalink-image」のデザインとそのCSSを解説

画像のサイズが小さくなった

➂-2 width→120pxと、画像にmax-width→100%、height→autoを設定 ビフォー

➂-2 width→120pxと、画像にmax-width→100%、height→autoを設定 アフター

※画面幅800pxで見たときです。

画像が小さくなったというか見やすい大きさになりましたね。

影響しているCSSは以下です。


@media screen and (max-width: 834px){
    .kaerebalink-image {
        width: 120px;
}
}

上記CSSを訳すと、
「画面幅834px以下の時、kaerebalink-image(画像とリンクを入れる箱)の幅は120px。」
ということですよね。

ちなみにCocoonカエレバCSSの場合、メディアクエリを利用して、画面幅に合わせた「kaerebalink-image」の幅に設定されていました。

以下「kaerebalink-image」の幅に関するプロパティです。

何も指定がない時とメディアクエリの数値外…(画面幅835px以上)


.kaerebalink-image {
    width: 160px;
}

kaerebalink-imageの幅は160pxとなります。

画面幅481px~834px


@media screen and (max-width: 834px){
    .kaerebalink-image {
        width: 120px
}
}

kaerebalink-imageの幅は120pxとなります。

画面幅480px以下(スマホ対応)


@media screen and (max-width: 480px){
.kaerebalink-image {
    width: 80px;
}
}

kaerebalink-imageの幅は80pxとなります。

画像でまとめると…
kaerebalink-imageの幅

吹き出し 困った人・悩み系
疑ってかかるマン

ちょっと待って、
「kaerebalink-image(画像・リンクを入れる箱)」だけ大きくしても「そもそもの画像の幅」とかはどうなるっているの?

ズボラ🐡

おっしゃる通りです。上記の「kaerebalink-image」の幅設定だけだと、以下の画像のようになってしまいます。

➂-4画面幅800pxの時kaerebalink-imageは幅が120px、高さが320px(imgに合わせて高さが大きくなってしまっている)重ねた

「img」が大きすぎて、「kaerebalink-image」の箱から飛び出してしまっていますね。

なので、「img」自体にもCSSの指定が必要になってきます

Cocoonでは、以下のCSSで対応させていました。


img {
    max-width: 100%;
    height: auto;
}
上記CSSを訳すと、
画像の最大幅(幅の上限)は、親要素の100%の幅まで使えます。
画像の高さは、自動的に元の画像の縦横比に合わせて調整されます。
上記CSSをkaerebalink-image内のimg(画像)に適用させると…
img幅は、kaerebalink-imageの幅100%までしか広がりません
数値をみますと・・・
「箱の中のimg幅」は320px
「箱(kaerebalink-image)の幅」の最大値(160、120、80px)

つまり、中にあるimgはkaerebalink-imageの幅100%を常時超えることになるので、箱の「max-width:100%;」は効果を発揮し、

  • 箱の幅が160pxなら→画像の幅は160px
  • 箱の幅が120pxなら→画像の幅は120px
  • 箱の幅が80pxなら→画像の幅は80px

という感じになります。

img高さの数値から縦横比をみると・・・
「元の画像の大きさ」は、320×320(幅×高さ)。

つまり1:1なので、

  • 画像の幅が160pxなら→画像の高さは160px
  • 画像の幅が120pxなら→画像の高さは120px
  • 画像の幅が80pxなら→画像の高さは80px

という感じになります。

imgのCSSが入るとこんな感じに変化します。↓

➂-5img大きすぎるビフォー

➂-5imgちょうどいいアフター

参考記事

画像の大きさを最適化する

全体のカエレバリンクが小さくなった。

➂-6カエレバ全体の大きさ(ビフォー)

➂-6カエレバ全体の大きさ(アフター)

※「cstmreba」がカエレバ全体を囲っています。

これは単純な仕組みで、

  • 「kaerebalink-image内にあるimg」が大きすぎる
  • 「imgに合わせて、imgを入れるkaerebalink-imageも巨大化」
  • 「kaerebalink-imageが巨大化より、囲っているkaerebalink-boxも巨大化」

というように、カエレバ全体が巨大化しちゃっていたわけです。

しかし、箱全体を大きくしている根源のimg「max-width:100%;」「height:auto;」を指定にしたことで、連動するように囲っている箱たちも小さくなったというわけです。

800px画面幅で右・左・下に余白ができた。

➂-7,8画面幅が800の時、余白ができた。でも左の余白があきすぎている

これは、以下のプロパティが影響しています。


 .kaerebalink-image {
    margin: 0 auto 1em !important;
}

CSSを訳すと、

kaerebalink-imageの周りの余白は、
上の余白0、左右の余白は自動(オート)、下の余白は1emという感じです。

ズボラ🐡

一応用語の解説をしておきますね。

解説
1emとは?
1em=font-size(文字サイズ)分に相当します。

考江過ぎる くん

じゃあじゃあ、CocoonのカエレバCSSでは、どのfont-sizeでemの数値を決めているの?

ズボラ🐡

kaerebalink-imageを囲う「kaerebalink-box」に、以下のフォントサイズで「em」の数値は設定されていました。


@media screen and (min-width: 769px){
.kaerebalink-box {
    font-size: inherit !important;
}
}

解説
inherit(インハイト)とは?
親要素と同じプロパティ値を受け継ぎたい時に、子要素に設定したりするプロパティ値。

検証ツールを使用してフォントサイズを確認してみた

kaerebalink-boxに設定されていた「font-size」を調べたところ、16pxでした。

※CocoonカエレバCSSの「font-size」には特に指定もなく、デフォルト(初期値)=16pxのままで、これをinheritで受け継いでいるようです。

よって、kaerebalink-imageの下余白は1emで、1文字分の16px分空いていることになります。

無駄な余白に困る くん

余白を設定したのはいいけど、左にやけに広い余白がある・・・。

➂-8画面幅が800の時、余白ができた。でも左の余白があきすぎている

上記の原因は、以下のCSSにあります。


@media screen and (max-width: 834px){
 .kaerebalink-image {
        margin-right: 3% !important;
}
}

CSSを訳すと、画面幅834px以下の時、「kaerebalink-image」の右横は、3%の余白を空ける(重要‼)みたいな感じです。

これにより、無理やり「kaerebalink-image」と「kaerebalink-info」の間に3%(画面サイズ800px時、21.2969px)という余白を作った反動で、結果的に左の余白が無駄に空いちゃった
という感じです。

➂-9画面幅が800の時、余白ができた。でも左の余白があきすぎている

さらに、「!important」がかかっているので、優先的に利かせていますね。

参考

CSSのセレクタとは?覚えておきたい25種類と書き方

CSSのmin-widthの使い方【初心者向け】

スマホ版だと必ず写真は左寄せになった

➂ー10floatなし スマホビフォー

➂ー10floatあり スマホアフター

商品リンクの画像はよく左側にあることが多いですよね。

CocoonカエレバCSSでは、以下のCSSで操作しています。


@media screen and (max-width: 834px){
.kaerebalink-image {
        float: left !important;
}
}

上記CSSを訳すと、「kaerebalink-image」を浮かせて左に寄せる(重要‼)という意味です。

画像を左側にしたければ、上記CSSをかけましょう。

しかし、画面幅800px表示ではfloatの効力が発揮しているのか、微妙な感じでした。

原因として、画面サイズが769px以上~適用される、kaerebalink-boxの「display:flex;」が影響していると考えられます。


@media screen and (min-width: 769px){
.kaerebalink-box{
    display: flex;
}
}

kaerebalink-imageの親要素(kaerebalink-box)にかけられた「flex」の作用が強く子要素(kaerebalink-image)にかけた「float:left !important;」の効果が埋もれてしまっていると思われます。

「float」の効果が埋もれてしまうということが分かるアニメーションを作成してみました。

➂-11アニメーション(flexが769pxのみ効く、floatが常時効いている)改

動作環境としては、以下です。

画面幅769px
kaerebalink-boxの「flex」が作用してる。
kaerebalink-imageの「float:left !important」が作用してる。←効果が埋もれてる
画面幅768px
kaerebalink-boxの「flex」が作用してない。
kaerebalink-imageの「float:left !important」が作用してる。

やはり、全体でかけている親要素の方が主導権を握る形になるんですかね…。

一応「float:left;」が効いている(768px以下の画面幅で)ことがわかる画像も載せておきますね

➂-12flex無、float left効果あり時&回り込みを確認。kaerebalink-imageの方

しっかり「kaerebalink-image」が浮動(左移動+浮いた)して、「kaerebalink-image」の後ろに「kaerebalink-info」が回りこんでいることが確認できますね。

また「flex」はOFFで、「float:left !important;」がON・OFFの画像も載せておきました。

➂-13flex無、float left効果ない時

➂-13flex無、float left効果あり時

「float:left;」がOFF且つ「flex」もOFFだと、縦並びになりますね。

そして、画像は「margin-right:3%;」の効果が顕著になってます。

画像全体が、リンクになっていた。

おそらく以下で、画像全体をリンクにできると思います。

まずは、HTMLから見てみましょう。

(HTML)

<div class=”xxxx”>
  <a href=”URL” >
    <img src=”画像URL” alt=””  />
  </a>
</div>
※「class=”xxxx”」に関して、今回「kaerebalink-image」が入ります。
HTMLの解説
  1. リンクを入れる箱(<div>~</div>)をまずは書く。
  2. 箱の中に、リンク(<a href=”url”>~</a>)とリンク化したい画像(<img src=”url” />)を入力する。
  3. 箱にclass名を与える(<div class=”xxxx”>~</div>)
お次はCSSの設定です。
(CSS)

.xxxx *{
display:block;
}
.xxxx a img{
max-width:100%;
min-width:100%;
height:auto;
}
CSSの解説
行番号1~3のCSSでは、箱「xxxx」内にある全ての要素をブロック要素化させるという意味です。

吹き出し 困った人・悩み系
すぐ悩む くん

箱内の全要素をブロック化させる・・・。
意味不。

ズボラ🐡

これから行うことは、画像全体をリンク化させるんだったよね。

つまり、「箱」と「画像」の大きさをピッタリ合わせる=幅や高さをいじる必要がある。

そのためにもインライン要素(画像やリンク)では幅(width)や高さ(height)の指定ができないので、ブロック化させているんだよ。

ブロック要素、インライン要素について全くわからない方はサルカワさんが、とても分かりやすく解説しています。

【CSS】displayの使い方を総まとめ!inlineやblockの違いは?

CSSのセレクタ.xxxx *{ }は、下記で解説しました。

解説
.xxxx *{ }←この書き方に関して
「*」の意味:「全ての要素に対して」という意味です。
セレクタの書き方:「class名」と「*」は半角スペースを空ける。
上記セレクタの意味→「箱(xxxx)の中にある全ての要素に対して」という意味になる。
つまり、「{ }内のプロパティ」が適用されるのは「箱(xxxx)内のリンクと画像」だけです。
※箱自体には、スタイルは適用されないので注意。

続いて、行番号4~8のCSSに関して。

.xxxx a img{~}←左のように、また変なセレクタが出てきました。

これはセレクタの半角スペースの部分に「」を入れて左から読むと分かるかもです。

「.xxxx a img{}」

つまり、箱(xxxx)の中にある<a>~</a>の、またその中にある「img」のみに・・・{}内のプロパティを適用という意味です。

まるで住所のように「詳しくする」ことで、デザインしたい部分を限定的に絞っているイメージです。

住所を例にすると…

ブラウザ:「本町」ってどこ?
ブラウザ:大阪、京都、東京、新潟、奈良、神奈川・・・・?
bl:えーっと…「新潟県 上越市 本町」です。
ブラウザ:なるほど、了解。「本町」って色々なところにあるからね…。

上記のように、詳しくすることで限定的にすることが可能です。

行番号4~8のCSSが作用した結果、以下のようになります。

画像に「min-width:100%;、max-width:100%;、height:auto;」を設定されたことで、画像は「xxxxの箱(親要素の幅)」にピッタリ収まり、画像の縦横比も維持されたまま表示できる。

まとめ

今回も何だかんだで、長くなってしまいまった(すみません(-_-;))。

以下まとめになります。

  1. kaerebalink-imageは、カエレバHTMLのclass名で画像の配置・標示担当。
  2. 箱(div)にピッタリ合う「画像」にするには、以下CSSを加える。
    
    img {
        max-width: 100%;
        height: auto;
    }
    
  3. 画像が大きすぎて商品リンク全体が大きくなっていたら、画像に「2」のCSSを追加してみよう。
  4. 1em=フォントサイズ、「inherit」は親のプロパティ血を受け継ぐ。
  5. 余白の設定は、時に無駄な余白を生み出します(反対方向の余白)。
  6. floatとflexはどちらか1つをかけましょう(メディアクエリの場合は別)。
  7. インライン要素に幅や高さを設定する場合は、ブロック化させましょう。

以上で、「kaerebalink-image」と、「Cocoon仕様のkaerebalink-imageのCSS」に関しての説明を終わります。
参考になったら幸いです。

コメント