【はてなブログ】Flickr貼り付けをレスポンシブ対応させる方法

2018.02.25

はてなブログでFlickrを利用して写真を貼り付けると、大きくなったりレスポンシブしてくれない、というかiframe読み込みだから融通きかないし、縦写真と横写真のときもあるし、、、とかとか問題点がモリモリです。とはいえFlickrを利用した写真管理は楽だし、アップロードも楽だしということでやめられないです。

やりたいこと

  • Flickrで写真を貼りたい
  • HTMLはいちいちいじりたくない
  • PCの時、SPのときできちんとサイズ調整したい
  • 縦写真と横写真でclassを分けたい

やったこと

吐き出される前のFlickrのHTMLは、これ

<a data-flickr-embed="true" href="https://www.flickr.com/photos/tako3/25579868607/" title="DSC03629 by tako3ch_jp, on Flickr">
  <img src="https://farm5.staticflickr.com/4675/25579868607_29e84fe5c6_b.jpg" alt="DSC03629" width="683" />
</a>

せっかくdata要素(data-flickr-embed=”true”)を持っているので、これを本文以下のpタグ内から洗う。

横写真なのか縦写真なのかを判断したいので、img要素のwidthを取ってきて、縦の時はclass=”flickr-wrp-portrait”で横の時はclass=”flickr-wrp-landscape”をiframeを括るように実装。

// 縦写真
<div class="flickr-wrp-portrait">
<iframe ~~~~~~~></iframe>
</div>
// 縦写真
<div class="flickr-wrp-landscape">
<iframe ~~~~~~~></iframe>
</div>/* Your code... */

こんな感じになる。divで括れたらこっちのものなので、あとはCSSで調整。

CSSで調整する際には、
吐き出されるiframeのdata-natural-を見て、これをメモっておくか覚えておく。

<iframe ~~ data-natural-width="1024" data-natural-height="683" ~~></iframe>

というわけで次

ソースコード

JS

[https://code.jquery.com/:title=jQuety]を現在使ってないかたは、

管理画面 > 設定 > 詳細設定 > 検索エンジン最適化 > headに要素を追加

この欄にこれをコピペして保存しておいてください。

<script src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>

jQueryのバージョンは3.3.1を使用しているけども、1.11とかそのへんでも問題ないです。

貼り付ける場所

管理画面 > デザイン > カスタマイズ > フッタ

貼り付けるもの

// flickrのサイズ調整するやつ
$(document).ready(function() {
  $('.entry-content [data-flickr-embed]').each(function() {
    var f_img_w = $(this).children('img').attr('width');
    if (f_img_w != 683) {
      $(this).parent().wrapInner( '<div class="flickr-wrp-landscape" />' );
    }else{
      $(this).parent().wrapInner( '<div class="flickr-wrp-portrait" />' );
    }
  });
});

683のところは、記事投稿画面のHTML編集のFlickrのタグにwidth=☓☓☓ってあると思うのでそれに合わせてください。
683じゃないときに、landscapeになり、683のときはportraitになります。

CSS

使用しているテーマ、自分で他に書いてるソースで多少変わるかも。

貼り付ける場所

管理画面 > デザイン > カスタマイズ > デザインCSS

padding-top: 66.6992188%;とかの数字は、上で覚えておいた、

<iframe ~~ data-natural-width="1024" data-natural-height="683" ~~></iframe>

この数字を使います。

計算式は
高さ / 幅 * 100(%)
つまり
683 / 1024 * 100
で出します。

縦の時は100%では大きすぎるので、70%ぐらいにしたいので、
1024 / 683 * 70
で出します。

貼り付けるもの

/*============================ #flickrrrrrr ============================*/
iframe.flickr-embed-frame {
  margin: 0 auto !important;
  display: block;
}

[class*='flickr-wrp-']{
  position: relative;
  width: 100%;
  overflow: hidden;
}

/*横写真*/
.flickr-wrp-landscape {
  padding-top: 66.6992188%;
}

/*縦写真*/
.flickr-wrp-portrait {
  padding-top: 104.948755%;
  width: 70%;
  margin: auto;
}

[class*=flickr-wrp-] iframe.flickr-embed-frame {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%!important;
  height: 100%!important;
}

これで完了です〜〜〜。
これでもろもろすっきり〜〜。

あー説明難しい……。
こういうのをうまく説明できるようになりたい……。

なんか質問があれば、コメント欄とかそのへんでも〜〜。他にいい方法があるとかも…あと、説明の仕方が下手とかいうツッコミも……

 

▶ [WordPress]ブログをリニューアルいたしました。
▶ はてなブログからWordPressに移行
サイトリニューアルってほどでもないけど少し改修しました