テキストをクリックしてもチェックできるようにする【label for=”aaa”】

チェックボックスだけでなく、その次のテキストをクリックしてもチェックできるようにする方法を紹介します。

◯普段通りにコーディングすると、、、

チェック!!

 <input id="check" name="check" type="checkbox" value="チェック">チェック!!
「チェック!!」をクリックしてもボックスにチェックが入りません。パソコンならこれでもそれほどチェックしにくくないのですが、スマホやタブレットなど指でチェックするデバイスだとなかなか反応せずにイライラしそうです。  

◯<label for=”check”>を使うと、、、



<input id="check" name="check" type="checkbox" value="チェック"><label for="check">チェック!!</label>
テキストをクリックしても、チェックが入るようになりました。今回はidとforを「check」にしましたが、idとforの値が同じなら別のものでも動きます。

これならスマホやタブレットでも押しやすいですね。チェックボックスを使うフォームを作成する際にはぜひ参考にしてみてください。

iframeの中身にスクロールバーを常に表示させる方法(Mac:Safari、Chrome)

Macはデフォルトでスクロールしたとき以外はスクロールバーが出ないようになっています。

通常のWEBページだとコンテンツが画面より多くても、ユーザーはスクロールして見ようとすると思いますが、iframeだとコンテンツがまだあると気づかずに閉じてしまう恐れがあります。

そのため、iframeの中はスクロールバーを常に表示する方がいい場合が多いと思います。今回はその方法をご紹介します。

◯解決方法
<style>
::-webkit-scrollbar { -webkit-appearance:none; width:7px; }
::-webkit-scrollbar-thumb { border-radius:4px; background-color: rgba(0,0,0,.5); box-shadow:0 0 1px rgba(255,255,255,.5); }
</style>
iframeのhtmlに上記のコードを入れると、コンテンツがあふれたときだけスクロールバーが表示されるようになりました。ただ、FireFoxでは一瞬だけ出て消えてしまいました。

※上記のコードのうち、widthとborder-radius、background-color、box-shadowを変えることで、スクロールバーをデザインすることも可能です。

※cssファイルに記述しても動きますが、他のページにも適用するcssに書くと、そのページにもスクロールバーがついてしまうので要注意です。

◯参考サイト
スクロールバーをデザインする方法が書いています。 http://unformedbuilding.com/articles/learn-about-webkit-scrollbar/
◯関連記事
colorboxでiframeを表示した時に起こる問題を記事にしています。

colorboxでモーダルウィンドウの中身がスクロールできなくなる現象を解決する方法

ページの一部分だけを印刷するボタンを設置する方法

ページ全体を印刷するボタンは簡単に設置することができますが、ページの一部分だけとなると、途端に難しくなります。今回は印刷用CSSとJQueryで作成する方法を紹介しようと思います。

◯ページ全体を印刷するボタンの設置方法

その前にページ全体を印刷する方法をついでにご紹介します。
<p class="aaa" onclick="window.print();">印刷</p>
クリックしたら印刷画面を表示させる「onclick=”window.print();”」を書くと、ページ全体を印刷するボタンを作成することができます。

◯ページの一部分だけを印刷するボタンの設置方法

それでは、本題のページの特定の箇所だけを印刷するボタンの作成方法を紹介します。
◯HTML部分
<div>
  <p class="print-title">タイトルタイトルタイトル</p>
</div>
<ul>
  <li class="print-page">
    <img src="images/logo.png" width="500" alt="aaa">
    <h2 class="bbb">コピー</h2>
    <p class="print-btn">印刷ボタン</p>
  </li>
  <li class="print-page">
    <img src="images/top_img_company_table3.jpg" width="500" alt="あああ">
    <h2 class="bbb">コピー2</h2>
    <p class="print-btn">印刷ボタン</p>
  </li>
</ul>
上記のHTMLで印刷する箇所は”.print-title”と”.print-page”で、印刷ボタンは”.print-btn”です。クラス名は任意のもので問題ありません。
◯Javascript部分
$(function(){
  //個別印刷ボタンをクリックした時
  $('.print-btn').each(function(){
      $(this).on('click', function(){
        //プリントしたいエリアの取得
        var printPage = $(this).closest('.print-page').html();
            printTitle = $('.print-title').html();
        //プリント用の要素「#print」を作成
        $('body').append('<div id="print"></div>');
        $('#print').append(printPage).append(printTitle);
        //「#print」以外の要素に非表示用のclass「print-off」を指定
        $('body > :not(#print)').addClass('print-off');
        window.print();
        //window.print()の実行後、作成した「#print」と、非表示用のclass「print-off」を削除
        $('#print').remove();
        $('.print-off').removeClass('print-off');
      });
    });
});
上記のコードをもとに細かく見ていきます。
①印刷ボタンそれぞれに(・・・)内の処理をします。
$('.print-btn').each(function(){・・・});
②クリックしたら、(・・・)内の処理をします。
$(this).on('click', function(){・・・});
③プリント用のHTMLを追加します。ここに書いてあるものが印刷されます。
 //プリントしたいエリアの取得
 var printPage = $(this).closest('.print-page').html();
        printTitle = $('.print-title').html();
 //プリント用の要素「#print」を作成
 $('body').append('<div id="print"></div>');
 $('#print').append(printPage).append(printTitle);
④印刷する箇所以外を非表示にして、印刷画面を表示します。
//「#print」以外の要素に非表示用のclass「print-off」を指定
$('body > :not(#print)').addClass('print-off');
window.print();
⑤印刷が終わったら③と④の処理をリセットし、元の画面にします
//window.print()の実行後、作成した「#print」と、非表示用のclass「print-off」を削除
$('#print').remove();
$('.print-off').removeClass('print-off');
 
◯Style部分
 
.print-off{display:none;}
 @media print{
  .print-off{display:none;}
 }
印刷したくない部分を消す
印刷しない箇所を消します。印刷画面と通常画面の両方を消さないとうまくいかないブラウザがあったので、両方display:noneにします。    

bxSliderやMansonryで一瞬だけレイアウトがおかしくなる問題を解決する方法

◯問題

bxSliderやMasonryをそのまま導入すると、以下のような問題が起こることがあります。どちらにも共通しているのは、それらが動く前の状態が一瞬見えてしまうことです。
・bxSlider
ページを読み込み後、初めの一瞬だけ画像がスライダーの枠からはみ出るくらい大きく表示されたり、スライドさせる画像が全部表示されたりしてしまう。
・Masonry
画面の中央に配置したいのに、読み込んだ後の一瞬だけ左に寄って見えてしまう。

◯解決方法

私がおすすめしたいのは、それらのJQueryプラグインを使っているコンテンツ全体を
.aaa{ opacity: 0; }
このように設定することで透明にして、
$(window).on('load',function(){
    $('.aaa').animate({'opacity':'1'},300);
});
上記のように、読み込みが完了した時点で透明にしたものを元の状態に戻すことで、表示させる方法です。

◯他のプラグインでも

他のプラグインではまだ試していませんが、同様の問題が起こった際には一度試してみてはいかがでしょうか?

スマホで見た時に電話番号のスタイルが変わってしまうのを防ぐ方法

電話番号の自動リンク機能
iPhoneのsafariは自動的に数字の羅列を電話番号と認識して、番号をタップすると電話をかけることができるようにする機能がついています。それ自体は便利な機能ですが、電話番号のスタイルが変わってしまうことがあります。今回はそれを防ぐ方法を共有しようと思います。
①電話をかけることができる機能自体をなくしたい場合
<meta name="format-detection" content="telephone=no">
<head>内に上記のコードを書けば、そのページ全体で電話番号の自動リンク機能をなくすことができます。
②スタイルだけ元に戻す
電話番号の自動リンク機能がついているコードを見てみると、
<p class="foo"><a href="tel:0123456789">0123456789</a></p>
のようになっています。
・スタイルを元に戻すには
.foo a{color:#fff;}
上記のようにスタイルを指定すると、スタイルを元に戻すことができます。
参考サイト:
http://www.tagindex.com/html5/page/meta_format_detection.html