mizusame

【Blogger】プルダウン型ブログアーカイブのカスタマイズ(標準JS不要)

アイキャッチ

Bloggerに標準搭載されているJavaScript(widgets.js)を無効にすることで、ブログを高速化できます。

しかし、一部のウィジェット(ガジェット)が機能しないなどの弊害が起きます。

その一例がブログアーカイブウィジェットです。

標準JSを無効にすると、階層とフラットリストではリストの開閉ができなくなり、プルダウンメニューでは項目を選んでもページ遷移が起きません。

どうにかこれらの問題を解決できないかと調べた結果、プルダウンメニューについては解決策が見つかりました。

この記事では、標準JSを無効にしつつプルダウン型のブログアーカイブウィジェットを作動させる方法を書いていきます。

また、アーカイブの日付表記の変更やデザインのカスタマイズも行ったので、そちらも合わせて述べていきます。

【Blogger】月別アーカイブに翌月・前月のリンクを設置する

標準JSなしでプルダウン型アーカイブを作動させる方法

テンプレートのHTML編集エディタにアクセスし、アーカイブウィジェットの<b:includable id='menu' var='data'>...</b:if>内の以下の部分を、

<select expr:id='data:widget.instanceId + &quot;_ArchiveMenu&quot;'>

こちら↓に差し替えて保存します。

<select onChange='location.href=value;' expr:id='data:widget.instanceId + &quot;_ArchiveMenu&quot;'>

追加したonChange='location.href=value;の部分で、現在開いているページのURLを示すlocation.hrefselectタグ内のoptionタグのvalueに記述されているURLに差し替えることでページ遷移が起きます。

これだけで標準JSがなくてもプルダウンメニューが動くようになります。

今回紹介したのはHTMLを書き換える方法でしたが、他にもJavaScriptやjQueryでも同様のことができるようです。

詳しくはこちらの記事をご覧ください。

日付表示を「○年△月」表記に変更

Blogger管理画面の「レイアウト」からアーカイブガジェットの設定変更ができます。

しかし、ここから設定できる日付の表示形式には日本式の「○年△月(YY/MM)」表記の選択肢はありません。

ここらへんがさすが曲者Blogger……といった感じですが、長期ひきこもりの雑ブログさんがこちらの記事で解決方法を書かれていたので、このブログにも導入してみました。

上の記事で書かれているMENU用のコードを参考にしました。

ただし、そのまま導入するとプルダウンメニューでは不具合が起きてしまったので、コードの以下の部分と、</select>直前の</b:loop>を削除しました。

<b:loop values='data:intervalData' var='interval'>

また、リンク先のコードでは以下の部分が<!---->でコメントアウトされていますが、のちほど記述するデザインのカスタマイズでウィジェットのタイトル部分を取ってしまうので、こちらのコメントアウトは外しました。

<option value=''><data:title/></option>

アーカイブウィジェットのデザイン変更

プルダウン型アーカイブウィジェットのデザイン変更を行いました。

アーカイブウィジェットのタイトル部分を削除

アーカイブウィジェットの<b:includable id='main'>...</b:if>内の以下の部分を削除するか、<!---->、または<b:comment></b:comment>で囲ってコメントアウトします。

<b:if cond='data:title != &quot;&quot;'>
  <h2><data:title/></h2>
</b:if>

ただタイトル部分を削除するだけなら、レイアウト画面のガジェットの設定でタイトルを空白にすればいいのですが、設定したガジェットタイトルを出力する<data:title/>optionタグで使いたかったので、このような方法をとりました。

アーカイブウィジェットのCSS変更

ここからCSSでデザインを変更していきます。

このブログではQooQというテンプレートを使用しています。また、標準で読み込まれるCSS(bundle.css)を無効にしています。

他のテンプレートを使っていたり、標準CSSを読み込む設定にしていると表示が崩れる場合があります。予めご了承ください。

#BlogArchive1 .widget-content{ /*ウィジェットのスタイル削除*/
  background: transparent;
  padding: 0;
}
#BlogArchive1 select{
  appearance: none; /*逆三角形削除(下の2行も同様)*/
  width: 100%;
  height: 32px;
  padding: 0 8px;
  background-color: #ffffff;
  background-image: url('data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill%3D%22%23666333%22%20d%3D%22M16.59%208.59L12%2013.17%207.41%208.59%206%2010l6%206%206-6z%22%2F%3E%3C%2Fsvg%3E'); /*逆三角形の代わりにSVG表示*/
  background-position: right 8px center;
  background-repeat: no-repeat;
  background-size: 24px 24px;
  border: 1px #dddddd solid;
  color: #333333;
  font-size: 14px;
}
#BlogArchive1 select::-ms-expand{
  display: none; /*逆三角形削除(IE)*/
}
#BlogArchive1 select:focus{
  outline: 1px solid #0B8043; /*selectクリック時に枠線表示*/
}

#BlogArchive1の部分は適宜変えてください。

デフォルトの状態だとselect部分の右端に逆三角形(▼)が表示されるのですが、これをselectappearance:noneselect::-ms-expanddisplay: noneを設定することで消しています。

消した逆三角形の代わりに SVG 画像を表示させています。

selectタグには::before ::afterが使えないようで、SVGのコードをBase64という形式に変換してbackground-image: url(...)に設定する……という、とても面倒なことをしています。

今回使用したSVGはMaterial Iconsexpand_moreです。CDNを読み込むのではなく、SVGをダウンロードして適当なテキストエディタで開いてソースコードを表示させます。

Material Iconsの場合1つ目のpathタグは背景色に関わる部分(不要)なので削除をしました。そのコードをこちらの記事でBase64形式に変換しました。

注意点として、この方法だとSVGの色をCSSで変更できません。

SVGのコードのpath部分にfill='#666'のような感じで直接設定してください。Base64に変換されるとその部分もエンコードされてわかりにくくなるので、変換前に色を指定したほうがいいと思います。

ちなみにbackground-imageの代わりにmask-imageを使えばCSSで色指定ができるとのことですが、当然のようにIE非対応でした。

もうIE対応は諦めてもいいかなとは思っています。来年サポート終了するし……。

あとがき

プルダウン型のブログアーカイブウィジェットを標準JSなしで作動させる方法や、アーカイブの月別表記の変更やデザインのカスタマイズについて書きました。

こんだけ長々と書いてきて、いちばん大変だったのがSVGをbackground-imageに設定するところだったという。

useタグとか使えないのかなーと調べたのですが、「background-image SVG use」で検索しても「SVGをbackground-imageで使う方法!(useタグのことは1ミリも出てこない)」みたいな記事しか引っかからなかったので諦めました。

あとアーカイブウィジェットの階層とフラットリストも標準JSなしで動くようにならないかなーとは考えました。

でもこちらはガッツリJS書けないと無理そうで手が出せない。

記事表示させないタイプのフラットリストならinputlabel使えば折りたためますけど、そういうことじゃないんだろうな……。

コメントを投稿
7 件のコメント(新着順)
>サメさん、ありがとうございます。「Contempoについて詳しくありません。」失礼しました。ContempoはBloggerでレスポンシブ対応のテーマなので以前Bloggerの他のページではできていた制御ができなかったりと
制御に制限があるようです。JavaScript等も追加できないし。「Contempo のことを記事にしているブログをご自身で探していただき、そちらの管理人の方に質問なさったほうがよりよい回答を得られると思います。」→了解しました。また何かございましたら、お知恵をお貸しください。その際はよろしくお願いします。さめさんは、私なんかより遙かに高いスキルレベルの方と思っています。色々ありがとうございました。
さめ

さめ

> 護身ITアドバイザー さん
Autoの設定うんぬんは私にはわかりかねますが、「もっと見る」がブログの背景(デフォルトでは灰色)に被って見えづらくなる現象については、こちらの CSS で背景画像を充分高くすることで解決できそうです。

.bg-photo-overlay, .bg-photo-container {
height: 800px; /*適宜値を変更*/
}

CSS はテーマ編集の ]]></b:skin> の直前に追加してください。

先程も申し上げた通り、私は Contempo についてさほど詳しくありません。
Contempo のことを記事にしているブログをご自身で探していただき、そちらの管理人の方に質問なさったほうがよりよい回答を得られると思います。
>さめさん、ありがとうございます。早速試してみます。別件ですが該当のブログではサイドバーやタイトルの下のページリストより各ページへのリンクに飛びますが、PCではページが全画面で表示された場合、タイトルの下のページリストもそれに合わせ同じように見える位置に移動しますがスマホだとページが全画面で表示したときブログタイトルの説明が最初と違い縦長に表示されるためタイトルの下のページリストもページの全画面より上に表示されていますが、ブログの背景とかぶって「もっと見る」が探しづらい位置に移動します。ページが折りたたんだ状態で表示されたり全ページで表示されたりと縦横の比率が変わるところを見る人のデバイス機器に併せたAutoの設定は「Blogger Contempo」ではできないのでしょうか。
さめ

さめ

> 護身ITアドバイザー さん
詳細を教えていただきありがとうございます。
デバイスの画面幅が小さいときにページリストの「もっと見る」をクリックすると、ポップアップメニューが左の方に隠れて見えなくなる、ということですね。
それでしたら、Contempo のポップアップメニューを表示させるための JavaScript によって、画面幅が小さいと .overflow-popup の style 属性の left がマイナス値になってしまうことが原因のようです。
つきましては、テーマ編集の ]]> の直前に以下の CSS を追加すると解決できるかもしれません。

@media(max-width: 480px){
.overflow-popup {
left: 0!important;
}
}

上のコードでは画面幅が 480px 以下のとき、ポップアップメニューが左側に見切れずに表示されるようになります。
480px はこちらで勝手に決めた値なので、適宜変更していただければと思います。
ありがとうございます。「画面左」はサイドバーでは、ありません。スマホの「もっと見る」表示でページのリンクをクリックすると、該当ページが全ページで表示されると同時に「もっと見る」が左にシフトします。
さらにシフトした「もっと見る」からページを選択する窓が左にシフトされた状態で表示しようとするため
スマホの画面から切れてページを選択する項目が見えなくなると、いった状態です。力技ですが「もっと見る」表示の「ページリストに記載のページかジェット」の各ページ目委のタイトルを右にずらしたり文字数を少なくしたりしどうにかスマホで表示できるようにしました。(スムーズでなくすみません。)
さめ

さめ

> 護身ITアドバイザー さん
はじめまして。
Contempoや他のBlogger公式テーマをほとんど触ったことがないので現時点で解決策をご提示できませんが、“スマホでタイトル下の「もっと見る」を選択すると画面左が見えなくなることがあります”の部分についてもう少し詳しく教えていただければ、なにかお力添えできるかもしれません。
“画面左”がサイドバーのことを指すのであれば、以下の記事が参考になると思います。
https://fujilogic.blogspot.com/2019/06/display-pagelist-and-hamburgericon-on-postpage.html
いきなりで申し訳ございませんが、質問があります。Blogger Contempoで作壊死しています。タイトルの下のページリストをサイドバーのページリストに置き換えページが全表示に切り替わっても、タイトル下のページリストは表示したままとしています。そこでその画面を実際のスマホで見ると全ページに切り替わるとタイトルの下のページリストが左に動きPCでは問題ありませんがスマホでタイトル下の「もっと見る」を選択すると画面左が見えなくなります。お手数ですが可能でしたらご教示頂きたいのですがよろしくお願いします。
    編集
    ホーム