Id

menu

Id. DEISGN STUDIO BLOG

アイディデザインスタジオの広報、デザイン/マーケティングに関する研究内容を書き留める忘備録、及び実績紹介のブログです。

kanebako

20xx年

BY kanebako Date:2015年11月30日 Category:coding

「ヒヤッハー!汚物は消毒だ〜〜〜!」

 

cssちゃん

「汚物はあなたよ!」

「くらえ!ポジション:フィクストっっ!」

 

「んん?なんだあ〜〜?いまの呪文みたいなのは〜〜〜?」

「蚊にさされたかと思ったわぁ〜〜〜〜〜〜そんなものじゃ効かんわぁ〜〜〜〜ぐへへへへ……」

「ぐへへへへ……へ」

「………………へ??」

 

【ピキーーーーーン】

 

「ぎゃあああぁぁああああぁあああああ!体がこの位置から動かないぞぉおおおお!なんだああこれはあああ!」

「おまえぇぇぇ〜!なにをしたあぁぁぁぁああ!!」

 

cssちゃん

「あなたはもう、固定されている!!」

 

「ひぇおお~~~~~」

 

 

 

END

 

こんにちは。ディレクターの大木です。

最近すっかり秋らしくなってきましたね。昼と夜の寒暖差が激しいので、洋服選びが難しいです。僕はよく上着を忘れて、震えながら自転車で帰ったりしています。みなさんも風邪などには十分気をつけてください。

さて、今回はCSSのみでレスポンシブ対応のタブを実装する方法をご紹介したいと思います。

JavaScriptを使うのが一般的ですが、どーしてもJavaScriptを使えない(使いたくない)時ってありあすよね。僕はありました。そんな時、CSS3を使えば簡単に?タブを実装出来てしまうのです。

デモページはこちら

さっそくコードを見ていきましょう。

今回、タブはlabelタグで実装し、ラジオボタンで制御しています。labelとラジオボタンをfor値で関連付けることで、タブの切替を実現しています。

また、アコーディオンメニューの開閉はチェックボックスで制御しています。チェックがついているときは開いて、そうじゃない時はたたんで、という感じです。

<input id="panel-1-ctrl" class="panel-radios" type="radio" name="tab-radios" checked>
<input id="panel-2-ctrl" class="panel-radios" type="radio" name="tab-radios">
<input id="nav-ctrl" class="panel-radios" type="checkbox" name="nav-checkbox">

<label class="panel-label" for="panel-1-ctrl">Tab1</label>
<label class="panel-label" for="panel-2-ctrl">Tab2</label>

あとはsectionの中に表示させたいコンテンツを書けばおっけーです。簡単ですね。

<section id="panel-1">
<main>
<h1>CONTENT1</h1>
<p>内容</p>
</main>
</section>

最後にチェックがついてないsectionのmain要素は表示させないようにCSSで書いてあげます。

#panels section main {
    box-sizing: border-box;
    max-height: 0;
    opacity: 0;
    -webkit-transition: opacity 600ms;
    transition: opacity 600ms;
    overflow-y: hidden;
}
#panel-1-ctrl:checked ~ #panels #panel-1 main {
    max-height: initial;
    opacity: 1;
    padding: 48px 24px;
}

サンプルのCSSはタブの動きなんかも書いているので長くなっていますが、それを除けばけっこう短いです。

サンプルコード

HTML

<!-- TAB CONTROLLERS -->
<input id="panel-1-ctrl" class="panel-radios" type="radio" name="tab-radios" checked>
<input id="panel-2-ctrl" class="panel-radios" type="radio" name="tab-radios">
<input id="panel-3-ctrl" class="panel-radios" type="radio" name="tab-radios">
<input id="nav-ctrl" class="panel-radios" type="checkbox" name="nav-checkbox">
<!-- TABS LIST -->
<ul id="tabs-list">
    <!-- MENU TOGGLE -->
    <label id="open-nav-label" for="nav-ctrl"></label>
    <li id="li-for-panel-1">
        <label class="panel-label" for="panel-1-ctrl">タブ 1</label>
    </li>
    <!--INLINE-BLOCK FIX-->
    <li id="li-for-panel-2">
        <label class="panel-label" for="panel-2-ctrl">タブ 2</label>
    </li>
    <!--INLINE-BLOCK FIX-->
    <li id="li-for-panel-3">
        <label class="panel-label" for="panel-3-ctrl">タブ 3</label>
    </li>
    <!--INLINE-BLOCK FIX-->
    <li id="li-for-panel-4">
        <label class="panel-label" for="panel-4-ctrl">タブ 4</label>
    </li>
    <!--INLINE-BLOCK FIX-->
    <li id="li-for-panel-5">
        <label class="panel-label" for="panel-5-ctrl">タブ 5</label>
    </li>
    <label id="close-nav-label" for="nav-ctrl">Close</label>
</ul>
<!-- THE PANELS -->
<article id="panels">
    <div class="container">
        <section id="panel-1">
            <main>
                <p>コンテンツ 1</p>
            </main>
        </section>
        <section id="panel-2">
            <main>
                <p>コンテンツ 2</p>
            </main>
        </section>
        <section id="panel-3">
            <main>
                <p>コンテンツ 3</p>
            </main>
        </section>
    </div>
</article>

CSS

@import url(http://fonts.googleapis.com/css?family=Open+Sans:300,400|Inconsolata);
ul#tabs-list {
  list-style: none;
  text-align: center;
  border-bottom: 1px solid #dfdfdf;
  margin: 0;
  padding: 0;
}
label.panel-label {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  display: block;
  width: 100%;
  color: #bdc3c7;
  cursor: pointer;
  background-color: #ecf0f1;
  -webkit-transition-property: border-top, background-color, color;
  transition-property: border-top, background-color, color;
  -webkit-transition-duration: 200ms;
  transition-duration: 200ms;
}
label.panel-label:hover {
  color: #c0392b;
}
#panels {
  background-color: white;
}
#panels .container {
  margin: 0 auto;
  width: 90%;
}
#panels section header label.panel-label {
  padding: 12px 24px;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
#panels section main {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  max-height: 0;
  opacity: 0;
  -webkit-transition: opacity 600ms;
  transition: opacity 600ms;
  overflow-y: hidden;
}
#panel-1-ctrl:checked ~ #panels #panel-1 main {
  max-height: initial;
  opacity: 1;
  padding: 48px 24px;
}
#panel-2-ctrl:checked ~ #panels #panel-2 main {
  max-height: initial;
  opacity: 1;
  padding: 48px 24px;
}
#panel-3-ctrl:checked ~ #panels #panel-3 main {
  max-height: initial;
  opacity: 1;
  padding: 48px 24px;
}
@media all and (max-width: 767px) {
  #nav-ctrl:checked ~ #tabs-list #li-for-panel-1 {
    max-height: 46px;
    opacity: 1;
  }
  #nav-ctrl:checked ~ #tabs-list #li-for-panel-2 {
    max-height: 46px;
    opacity: 1;
  }
  #nav-ctrl:checked ~ #tabs-list #li-for-panel-3 {
    max-height: 46px;
    opacity: 1;
  }
  #open-nav-label {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    cursor: pointer;
  }
  #nav-ctrl:checked ~ #tabs-list #open-nav-label {
    display: none;
  }
  #close-nav-label {
    display: block;
    max-height: 0;
    overflow-y: hidden;
    background-color: #444444;
    color: #ecf0f1;
    padding: 0px;
    -webkit-transition: max-height 200ms;
    transition: max-height 200ms;
    cursor: pointer;
    text-transform: uppercase;
    font-size: 12px;
    line-height: 22px;
    letter-spacing: 1px;
  }
  #nav-ctrl:checked ~ #tabs-list #close-nav-label {
    max-height: 36px;
    opacity: 1;
    padding: 12px 24px;
  }
  #tabs-list {
    position: relative;
  }
  #tabs-list label.panel-label {
    padding: 12px 0;
  }
  #tabs-list #li-for-panel-1 {
    max-height: 0;
    overflow-y: hidden;
    -webkit-transition: max-height 200ms;
    transition: max-height 200ms;
  }
  #tabs-list #li-for-panel-2 {
    max-height: 0;
    overflow-y: hidden;
    -webkit-transition: max-height 200ms;
    transition: max-height 200ms;
  }
  #tabs-list #li-for-panel-3 {
    max-height: 0;
    overflow-y: hidden;
    -webkit-transition: max-height 200ms;
    transition: max-height 200ms;
  }
  #panel-1-ctrl:checked ~ #tabs-list #li-for-panel-1 {
    max-height: 46px;
    opacity: 1;
  }
  #panel-1-ctrl:checked ~ #tabs-list #li-for-panel-1 label.panel-label {
    background-color: white;
    color: #c0392b;
    background-color: #c0392b;
    color: white;
  }
  #panel-2-ctrl:checked ~ #tabs-list #li-for-panel-2 {
    max-height: 46px;
    opacity: 1;
  }
  #panel-2-ctrl:checked ~ #tabs-list #li-for-panel-2 label.panel-label {
    background-color: white;
    color: #c0392b;
    background-color: #c0392b;
    color: white;
  }
  #panel-3-ctrl:checked ~ #tabs-list #li-for-panel-3 {
    max-height: 46px;
    opacity: 1;
  }
  #panel-3-ctrl:checked ~ #tabs-list #li-for-panel-3 label.panel-label {
    background-color: white;
    color: #c0392b;
    background-color: #c0392b;
    color: white;
  }
  #panels .container {
    width: 100%;
  }
  #panels section header {
    display: block;
  }
}
@media all and (min-width: 768px) {
  #panel-1-ctrl:checked ~ #tabs-list #li-for-panel-1 {
    pointer-events: none;
    cursor: default;
    -webkit-transform: translate(0, 1px);
    -ms-transform: translate(0, 1px);
    transform: translate(0, 1px);
    -webkit-box-shadow: none;
    box-shadow: none;
    border-top: none;
    border-right: none;
  }
  #panel-1-ctrl:checked ~ #tabs-list #li-for-panel-1:last-child {
    border-right: 1px solid #dfdfdf;
  }
  #panel-1-ctrl:checked ~ #tabs-list #li-for-panel-1 + li {
    border-left: 1px solid #dfdfdf;
  }
  #panel-1-ctrl:checked ~ #tabs-list #li-for-panel-1 label.panel-label {
    background-color: white;
    color: #c0392b;
    border-top: 6px solid #c0392b;
    padding-top: 26px;
  }
  #panel-2-ctrl:checked ~ #tabs-list #li-for-panel-2 {
    pointer-events: none;
    cursor: default;
    -webkit-transform: translate(0, 1px);
    -ms-transform: translate(0, 1px);
    transform: translate(0, 1px);
    -webkit-box-shadow: none;
    box-shadow: none;
    border-top: none;
    border-right: none;
  }
  #panel-2-ctrl:checked ~ #tabs-list #li-for-panel-2:last-child {
    border-right: 1px solid #dfdfdf;
  }
  #panel-2-ctrl:checked ~ #tabs-list #li-for-panel-2 + li {
    border-left: 1px solid #dfdfdf;
  }
  #panel-2-ctrl:checked ~ #tabs-list #li-for-panel-2 label.panel-label {
    background-color: white;
    color: #c0392b;
    border-top: 6px solid #c0392b;
    padding-top: 26px;
  }
  #panel-3-ctrl:checked ~ #tabs-list #li-for-panel-3 {
    pointer-events: none;
    cursor: default;
    -webkit-transform: translate(0, 1px);
    -ms-transform: translate(0, 1px);
    transform: translate(0, 1px);
    -webkit-box-shadow: none;
    box-shadow: none;
    border-top: none;
    border-right: none;
  }
  #panel-3-ctrl:checked ~ #tabs-list #li-for-panel-3:last-child {
    border-right: 1px solid #dfdfdf;
  }
  #panel-3-ctrl:checked ~ #tabs-list #li-for-panel-3 + li {
    border-left: 1px solid #dfdfdf;
  }
  #panel-3-ctrl:checked ~ #tabs-list #li-for-panel-3 label.panel-label {
    background-color: white;
    color: #c0392b;
    border-top: 6px solid #c0392b;
    padding-top: 26px;
  }
  ul#tabs-list {
    text-align: center;
    border-bottom: 1px solid #dfdfdf;
  }
  ul#tabs-list li {
    display: inline-block;
    text-align: center;
    font-size: 0.875em;
    width: 18%;
    -webkit-box-shadow: 0px -2px 2px rgba(0, 0, 0, 0.05);
    box-shadow: 0px -2px 2px rgba(0, 0, 0, 0.05);
    border-top: 1px solid #dfdfdf;
    border-right: 1px solid #dfdfdf;
    -webkit-transition-property: border-top;
    transition-property: border-top;
    -webkit-transition-duration: 200ms;
    transition-duration: 200ms;
  }
  ul#tabs-list li:hover {
    border-top: none;
    border-right: none;
  }
  ul#tabs-list li:hover:last-of-type {
    border-right: 1px solid #dfdfdf;
  }
  ul#tabs-list li:hover + li {
    border-left: 1px solid #dfdfdf;
  }
  ul#tabs-list li label.panel-label {
    border-top: 0px solid #c0392b;
    padding: 24px 0;
  }
  ul#tabs-list li label.panel-label:hover {
    border-top-width: 6px;
    padding-top: 25px;
  }
  #open-nav-label,
  #close-nav-label {
    display: none;
  }
  #nav-ctrl {
    display: none;
  }
}
@media all and (min-width: 900px) {
  main {
    width: 70%;
    margin: 0 auto;
  }
}
.panel-radios {
  position: fixed;
  left: 50%;
  top: 10px;
  width: 20px;
  opacity: 0.5;
  z-index: 99;
}
.panel-radios:nth-child(1) {
  -webkit-transform: translateX(-50px);
  -ms-transform: translateX(-50px);
  transform: translateX(-50px);
}
.panel-radios:nth-child(2) {
  -webkit-transform: translateX(-30px);
  -ms-transform: translateX(-30px);
  transform: translateX(-30px);
}
.panel-radios:nth-child(3) {
  -webkit-transform: translateX(-10px);
  -ms-transform: translateX(-10px);
  transform: translateX(-10px);
}
.panel-radios:nth-child(4) {
  -webkit-transform: translateX(10px);
  -ms-transform: translateX(10px);
  transform: translateX(10px);
}
.panel-radios:nth-child(5) {
  -webkit-transform: translateX(30px);
  -ms-transform: translateX(30px);
  transform: translateX(30px);
}
.panel-radios:nth-child(6) {
  top: 30px;
  -webkit-transform: translateX(-10px);
  -ms-transform: translateX(-10px);
  transform: translateX(-10px);
  display: block;
}
body {
  background: #e74c3c;
  color: #444444;
  font-family: "Open Sans", "Helvetica Neue", Helvetica, sans-serif;
}

どうですか?意外と簡単に実装できてますよね。CSS3はできることが格段に増えているので、もっと勉強していかなきゃと思う今日このごろです。

こんにちは。
ディレクターの大木です。

いきなりですが、コーダーやエンジニアの皆さんは、普段どんなフォントでコーディングをされていますか?

エディタのデフォルトフォントを使っている、という人も多いのではないでしょうか。
デフォルトのままでも見やすいならそれでも良いのですが、少しでも見にくいなと思う点があればすぐにでもフォントを変更したほうが良いと思います。

特に、HTMLを使ってコーディングすると、ソースの中に日本語がたくさん入ってきますが、デフォルトのフォントは日本語対応していないため英語と日本語のバランスが悪くなり、全体的に見にくくなってしまいます。
日本語対応しているプログラミング用フォントはいくつかありますが(RictyやMiguなど)、今回はAdobe服部正貴氏が開発したプログラミング用フォント「Source Han Code JP」をご紹介したいと思います。

Source Han Code JPは、プログラミング用フォント「Source Code Pro」をベースに、日中韓フォント「源ノ角ゴシック」を組み合わせた等幅のプログラミング用フォントです。
https://github.com/adobe-fonts/source-han-code-jp

このSource Han Code JPの特徴は以下の4点だと思います。

・英字と記号の字形の区別がつきやすい
・日本語対応の等幅フォント
・ウェイトが7種類揃っている
・無償でダウンロード可能

とてもきれいなフォントですね。
全角記号を全部潰れずに表示してくれるところも嬉しかったり。

僕はずっとRictyを使っていましたが、今はこちらを使用しています。

導入も簡単で、スクリプトを生成しなくていいのが嬉しいです。
Rictyを導入しようと思ってスクリプト生成でつまづいたので…
(スクリプト生成不要のRicty Diminishedがあるというのを知りませんでしたorz)

フォントは好き嫌いがわからるところですが、
何はともあれ、一度使ってみてはいかがでしょうか。