カスタムSNSボタンについて

またのちのち組み替えるつもりですが、カスタムSNSボタンを構築するのに使ったコードを書いておきます。
なお、PHPは一部で、タグの属性をJavaScriptを使って適宜書き換える形です。
多分普通のブログとかでも、アイコンを画像で代用とかすれば、それなりに使えるときは使えるのではないかなあ。
あとアイコン部分に使うアイコンフォントは勿論鈍色合字アイコンフォントです。

HTML:

<div class="social-buttons-area {align}">
<ul class="social-buttons {bsdim}">
<li class="twitter_share"><a class="suquiya_share_linker" href="https://twitter.com/intent/tweet?text=textContent&url=permaLink&hashtags=d_switch&via=suquiya&related=suquiya,kiricoil" target="_blank"><span class="{icc}">&#xf099;</span><span class="text">Twitter</span></a></li>
<li class="facebook_share"><a class="suquiya_share_linker" href="https://www.facebook.com/sharer/sharer.php?u=permaLink" target="_blank"><span class="{icc}">&#xf082;</span><span class="text">Facebook</span></a></li>
<li class="hatena_bookmark"><a class="suquiya_share_linker" href="http://b.hatena.ne.jp/entry/passURLocation" target="_blank"><span class="{icc}">&#xe9de;</span><span class="text">はてな</span></a></li>
<li class="gplus_share"><a class="suquiya_share_linker" href="https://plus.google.com/share?url=permaLink" target="_blank"><span class="{icc}">&#xe94d;</span><span class="text">Google+</span></a></li>
<li class="pocket_in"><a class="suquiya_share_linker" href="http://getpocket.com/edit?url=permaLink" target="_blank"><span class="{icc}">&#xf265;</span><span class="text">Pocket</span></a></li>
</ul>
</div>

これでマークアップして、aタグ内のhrefに指定されたURLを、
Javascript(Scriptタグでエンベッド):

(function(){
     console.log("social_button_code");
     var ts = document.getElementsByClassName("suquiya_share_linker");
     var encodedPermaLink = encodeURIComponent(document.URL);
     var encodedPass = encodeURI(document.URL.replace("http://","").replace("https://",""));
     var encodedText = encodeURIComponent(document.title);
     var l = ts.length;
     for(var i=0;i<l;i++){
          var e = ts[i];
          var qurl = ts[i].href;
          console.log(qurl.replace("textContent",encodedText).replace("permaLink",encodedPermaLink));
          ts[i].href=qurl.replace("textContent",encodedText).replace("permaLink",encodedPermaLink).replace("passURLocation",encodedPass);
     }
})();

で書き換えています。
CSSは以下。

/* 
ここよりカスタムSNSボタンの設定 
divにはsocial-buttons-area align補助
ulにはsocial-buttons が基本、 dimentionとして horizontal vertical を指定
それぞれにはtwitter_share,facebook_share,hatena_bookmark,gplus_share,pocket_inを設定。追加の場合は更に設定
first-letterあるいはicomd部分がロゴ、first-letterでないものもしくはtext部分がテキスト
div.social-buttons-areaを設定
*/
.social-buttons-area {
/* marginは位置に使う、余白設定をpaddingで */
    zoom: 1;
/* clearfix for IE6/7 */
}

.social-buttons-area:after {
    content: "";
    display: block;
    clear: both;
}

/* 横方向の位置設定 margin: top right bottom left */
.social-buttons-area.right {
    text-align: right;
    line-height: inherit;
    margin-bottom: .5em;
}

.social-buttons-area.center {
    text-align: center;
    overflow: hidden;
}

.social-buttons-area.left {
    text-align: left;
}

/* ul social-buttonsを設定 */
.social-buttons-area ul.social-buttons {
    list-style: none;
    display: inline-block;
    margin-bottom: 0;
    font-size: 1em;
}

.social-buttons-area.right ul.social-buttons.horizontal:after {
    content: "";
    display: block;
    clear: both;
}

.social-buttons-area.left ul.social-buttons.horizontal:after {
    content: "";
    display: block;
    clear: both;
}

.social-buttons-area ul.social-buttons {
    zoom: 1;
}

.social-buttons-area.right ul.social-buttons.horizontal {
    float: right;
    text-align: right;
}

.social-buttons-area.center ul.social-buttons.horizontal {
    text-align: center;
    display: inline-block;
}

.social-buttons-area.left ul.social-buttons.horizontal {
    text-align: left;
    float: left;
}

ul.social-buttons.vertical {
    width: 25em;
}

.social-buttons-area.left ul.social-buttons.vertical {
    margin: 0 auto 0 0;
}

.social-buttons-area.center ul.social-buttons.vertical {
    margin: 0 auto;
}

.social-buttons-area.right ul.social-buttons.vertical {
    margin: 0 0 0 auto;
}

ul.social-buttons.horizontal {
}

/* li要素を設定 */
.social-buttons li {
    float: left;
}

.social-buttons-area .social-buttons li a {
    color: #fff;
    background-color: #8e0404;
}

.social-buttons-area.right .social-buttons.horizontal li {
    margin-right: 2px;
}

.social-buttons-area.center .social-buttons.horizontal li {
    margin: 0 1px;
    text-align: center;
}

.social-buttons-area.left .social-buttons.horizontal li {
    margin-left: 2px;
}

.social-buttons.horizontal li {
    vertical-align: baseline;
    line-height: 1.5em;
    height: 1.5em;
    overflow: hidden;
}

.social-buttons.vertical li {
    vertical-align: middle;
    width: 5em;
}

.social-buttons li a {
    display: inline-block;
}

.social-buttons.horizontal li a {
    border-radius: .3em;
    line-height: 1.5em;
    vertical-align: baseline;
    height: 1.5em;
    overflow: hidden;
    display: block;
    vertical-align: baseline;
}

.social-buttons.vertical li a {
    background-color: #fff;
}

/* ロゴ部分を設定 */
.social-buttons li a .icondlfll {
    vertical-align: middle;
}

.social-buttons.horizontal li a .icondlfll {
    font-size: .75em;
    padding: 0;
    margin: .375em;
    display: inline-block;
}

.social-buttons.vertical li a .icondlfll {
    font-size: 1.1em;
    margin: 0 auto;
    border-radius: .35rem;
    border: .35em solid #8e0404;
    padding: .2em;
    width: 2.2em;
    height: 2.2em;
    line-height: 1.2em;
    display: block;
    background-color: #8e0404;
    text-align: center;
}

/*  twitter  */
.social-buttons.horizontal li.twitter_share a .icondlfll {
    font-size: .9em;
    padding: 0;
    margin: .3em .225em .3em .375em;
}

.social-buttons.vertical li.twitter_share a .icondlfll {
}

/*  facebook */
.social-buttons.horizontal li.facebook_share a .icondlfll {
    font-size: .8em;
    margin: 0 .4em 0 .43em;
}

.social-buttons.vertical li.facebook_share a .icondlfll {
}

/* hatena        */
.social-buttons.horizontal li.hatena_bookmark a .icondlfll {
    font-size: 1.25em;
    margin: 0 .23em 0 .33em;
}

.social-buttons.vertical li.hatena_bookmark a .icondlfll {
    font-size: 3.8125em;
    border: 0 solid transparent;
    line-height: .6346625em;
    height: .6346625em;
    width: .6346625em;
    overflow: hidden;
    color: #8e0404;
    background-color: #fff;
    margin: 0 auto;
    padding: 0;
}

/* gplus_share */
.social-buttons.horizontal li.gplus_share a .icondlfll {
    font-size: 1.23em;
    margin: 0 .23em 0 .3em;
}

.social-buttons.vertical li.gplus_share a .icondlfll {
    font-size: 3.7825em;
    border: 0 solid transparent;
    line-height: .639625em;
    height: .639625em;
    width: .639625em;
    overflow: hidden;
    color: #8e0404;
    background-color: #fff;
    margin: 0 auto;
    padding: 0;
}

/* pocket_in     */
.social-buttons.horizontal li.pocket_in a .icondlfll {
    font-size: .75em;
}

.social-buttons.vertical li.pocket_in a .icondlfll {
    font-size: 1.1em;
}

/* テキスト部分を設定 */
/* まずverticalのときは非表示 */
.social-buttons .text {
}

.social-buttons.vertical .text {
    display: block;
    text-align: center;
    font-size: .9em;
    color: #8e0404;
}

.social-buttons.horizontal .text {
    font-size: .8em;
    padding-right: .4em;
}

それぞれPost Snippets, Header and Footer, jetpackのカスタムCSS機能を利用して適用させています。

2016/12/05
はてなブックマークに関する調整のため、JavaScriptを書き換えました。
具体的にはencodeURIComponentで文字列を与えるのでははてなは動作しなかったので、encodeURIにしています。

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA