blog.hekt.org

ソーシャルボタンを JavaScript + CSS で作成

ソーシャルボタン、便利ですけど、あっちこっちにスクリプトを呼びに行くのが嫌な感じなので、できるだけ自前でやるようにしました。(いいね ! ボタンのカウントは API Key が必要なので断念) 2/21 修正: HTML 3行目修正, CSS 86-88行目追加

画像は公式で配っているもの (Twitter/Facebook) を縮小して使ったので、Twitter Bird の色がけっこう違います。

<ul id="social_buttons">
  <li id="hatebu_button"><a href="http://b.hatena.ne.jp/entry/【"http://" 抜きの URL】"><span class="text">B!</span><span class="count">0</span></li>
  <li id="tweet_button"><a href="https://twitter.com/intent/tweet?text=【タイトル】&url=【URL】"><span class="text">ツイート</span></a><a href="http://twitter.com/search?q=【URL】"><span class="count">0</span></a></li>
  <li id="fblike_button"><a href="http://www.facebook.com/plugins/like.php?href=【URL】"><span class="text">いいね !</span></a></li>
</ul>
#social_buttons a {
  display: inline-block;
  color: inherit;
  text-decoration: none;
}
#social_buttons a:after {
  display: table;
  clear: both;
  content: "";
}
#social_buttons span {
  display: block;
  float: left;
  font-family: sans-serif;
}

#hatebu_button span {
  height: 18px;
  line-height: 18px;
  border: 1px solid #2C6EBD;
  font-weight: bold;
  text-align: center;
}
#hatebu_button .text {
  width: 16px;
  background-color: #568BCA;
  background-image: -webkit-gradient(linear, left top, left bottom,
                                     from(#2C6EBD), to(#2C6EBD));
  background-image: -moz-linear-gradient(0deg, #2C6EBD, #2C6EBD);
  background-image: -o-linear-gradient(0deg, #2C6EBD, #2C6EBD);
  background-size: auto 9px;
  background-position: 0 100%;
  background-repeat: repeat-x;
  border-radius: 2px 0 0 2px;
  color: #FFF;
  font-size: 9px;
}
#hatebu_button .count {
  width: 32px;
  border-color: #ABC5E5;
  border-left-width: 0;
  border-radius: 0 2px 2px 0;
  background-color: #F7F9FC;
  color: #2C6EBD;
  font-size: 10px;
}

#tweet_button span {
  height: 18px;
  line-height: 18px;
  padding: 0 4px;
  border: 1px solid #CCC;
  border-radius: 3px;
  color: #333;
  font-size: 10px;
}
#tweet_button .text {
  margin-right: 5px;
  padding-left: 20px;
  background: #EEE url(./twitter_newbird_blue.png) scroll no-repeat 0 50%;
  background-image: url(./twitter_newbird_blue.png),
                    -webkit-gradient(linear, left top, left bottom,
                                     from(#FFF), to(#DDD));
  background-image: url(./twitter_newbird_blue.png),
                    -moz-linear-gradient(270deg, #FFF, #DDD);
  background-image: url(./twitter_newbird_blue.png),
                    -o-linear-gradient(270deg, #FFF, #DDD);
  background-repeat: no-repeat, no-repeat;
  background-position: 0 50%, 0 0;
  font-weight: bold;
}
#tweet_button a:hover .text {
  border-color: #BBB;
  background-image: url(./twitter_newbird_blue.png),
                    -webkit-gradient(linear, left top, left bottom,
                                     from(#F8F8F8), to(#D8D8D8));
  background-image: url(./twitter_newbird_blue.png),
                    -moz-linear-gradient(270deg, #F8F8F8, #D8D8D8);
  background-image: url(./twitter_newbird_blue.png),
                    -o-linear-gradient(270deg, #F8F8F8, #D8D8D8);
}
#tweet_button .count {
  position: relative;
  background-color: #FFF;
}
#tweet_button a:hover .count{
  text-decoration: underline;
}
#tweet_button .count:before,
#tweet_button .count:after {
  position: absolute;
  top: 6px;
  left: -3px;
  z-index: 3;
  border-style: solid;
  border-color: transparent #FFF;
  border-width: 3px 3px 3px 0;
  content: "";
}
#tweet_button .count:after {
  z-index: 2;
  top: 5px;
  left: -4px;
  border-width: 4px 4px 4px 0;
  border-color: transparent #CCC;
}

#fblike_button span {
  height: 18px;
  line-height: 18px;
  padding: 0 8px 0 21px;
  border: 1px solid #CAD4E7;
  border-radius: 3px;
  background-color: #ECEEF5;
  background: #ECEEF5 url(./f_logo.png) scroll no-repeat 5px 50%;
  color: #3B5998;
  font-size: 10px;
}
#fblike_button a:hover span{
  border-color: #9DACCE;
}
(function($) {
  $(function() {

    function hatebuCount(url) {
      $.getJSON(
        'http://api.b.st-hatena.com/entry.count?callback=?',
        {url: url},
        function(data) {
          $('#hatebu_button .count').html(data);
        }
      );
    }
    function tweetCount(url) {
      var text, tw_url;
      $.getJSON(
        'http://urls.api.twitter.com/1/urls/count.json?callback=?',
        {url: url},
        function(data) {
          $('#tweet_button .count').html(data.count);
        }
      );
    }

    hatebuCount(location.href);
    tweetCount(location.href);

  });
})(jQuery);

で、できたのがこんな感じ (Safari 5.1.3):

見た目はそれなりに似せられたと思いますが、いいね ボタンの動作がダサい……。もっといい方法ないのかしら。