CSS3 備忘録

少しのコードでこんなにも… CSSの小技

文字や図形に影を付ける

一番最初にやってみたのがこれ。あまり気がつかないようでも、表現力は大きい。
文字に影を付ける場合は text-shadow で指定します。このページでも見出し部分には影をつけています。
画像や図形にも影を付けることができ、その場合は box-shadow で指定します。

図形に影を付けた場合
図形に影を付けた場合
図形の内側に影を付けた場合
図形の下側に小さく影を

■コード:

影は重ねて表現することが可能です
    text-shadow: #FFF -1px -1px 2px, #333 2px 1px 3px;

画像や図形にも影を付けることができます
    box-shadow: #666 2px 2px 6px;

図形の内側に影を付ける場合は inset を指定する
    box-shadow: inset #666 2px 2px 6px;

図形の下側に小さく影を付ける場合は広がりの指定を追加する
    box-shadow: #666 0 8px 5px -6px; /* カラー 左右 上下 ぼかし 広がり */

以前はブラウザによってのprefixが必要で記述が面倒でしたが、今はほとんどCSS3草案のままでOKになっており簡単ですね。

tableに影を付ける場合

tableにboxshadowを指定するときの注意点…
tableの内側に影をつけたい場合、insetを使用してboxshadowを指定しても tr や td に色をつけてしまうと、その色が反映されてしまうから影が見えなくなってしまう。別ファイルを作成したのでそちらで確認できる。

背景などをグラデーションで表現する

グラデーションは background プロパティーに linear-gradient の値を使って色を指定します。意外と簡単で角度を変えたり、グラデーションを円形状にかけることもできます。

縦のグラデーション
横のグラデーション
左上から右下へのグラデーション
左下から右上へのグラデーション
中心から円形のグラデーション

単純なグラデーションのパターンですが、複雑な指定も可能です。

■コード:

縦のグラデーション
   background: linear-gradient(#eee 10%, #f00 100%);

横のグラデーション
   background: linear-gradient(90deg, #eee 10%, #00f 100%);

左上から右下へのグラデーション
   background: linear-gradient(135deg, #eee 10%, #fc0 100%);

左下から右上へのグラデーション
   background: linear-gradient(45deg, #eee 0%, #f0c 100%);

中心から円形のグラデーション
   bbackground: radial-gradient(#eee 0%, #090 100%);

以前はブラウザによって対応していたりいなかったり…。そのため各ブラウザ用のprefixが必要で記述が面倒でしたが、今はほとんど一行でOKになっています。縦のグラデーション以外は deg で角度を指定でき、マイナスの値も指定できる。横から、斜めから、様々な角度で指定できるから表現も豊かになりますね。

蛍光ペンで線を引いたように見せる

国ごとに文化や習慣が違うように、組版においてもその国独自のルールがあります。ケイビーエスではただ単に文字を並べるだけでなく、その国の文化までも表現する…そんなまごころを込めた組版を目指しています。

■コード:

.marker {
  background: linear-gradient(transparent 30%, #E1E94A 30%, #fff 60%, #E1E94A 100%);
}

グラデーションの応用でこんなこともできちゃいます。背景色を指定するとき linear-gradient を使ってグラデーションを指定します。単に背景色を指定するよりも、また border-bottom でアンダーラインを引くよりも効果的なアクセントになりますね。

ふんわりと柔らかな変化

リンクボタンなどを作成したら、ふんわりと柔らかな変化があると、ちょっとおしゃれでクールに感じませんか?
jQueryなどのJavaScriptを使うのもいいですが、CSSだけでも簡単に表現できます。
◆マウスカーソルを合わせるとふわっと変化するボタン

CSS3 Transition Button

■コード:

.transition {
   display:block;
   width:250px;
   text-align:center;
   padding:20px;
   background:#6c9bd2;
   border-radius: 7px;
   text-shadow:#343434 1px 1px 3px;
   transition: all 0.3s ease-in-out;
}
.transition:hover {
   transition: all 0.7s ease-in-out;
   background: #efefef;
   color:#F33;
   text-shadow:#FFF 1px 1px 1px, #000 1px 1px 5px;
}

transition の設定で、hover時の変化を分かりやすく0.7sにしていますが、実際使用した感じでは、0.3sくらいが一番効果的に感じました。背景色だけでなく、文字や影に変化をつけるとまた違った印象を与えられると思います。

画像や図形を丸く表示

画像を丸く表示するには、その画像に border-radius: 100%; を指定すればOK。もちろん画像以外の、div など他の要素にも加えることができます。まん丸にする場合は、正方形の画像を用意する。角丸にするには、各頂点の丸みの値を指定しましょう。

桜横長桜正方桜正方桜正方

■コード:

全体を丸くする
   border-radius:100%;

角丸の場合
   border-radius:10px;

片方を角丸に
   border-radius:50px 0;

四隅のRをそれぞれ指定すれば、面白い形ができるかもしれませんね。

漢字などにルビ(ふりがな)をふる方法

ルビをふるための3つのタグ

例:「 大阪市生野区勝山北 おおさかしいくのくかつやまきた

ブラウザが非対応の場合は、「大阪市生野区勝山北(おおさかしいくのくかつやまきた)」と表示される。

■コード:

<ruby>大阪市生野区勝山北<rp>(</rp><rt>おおさかしいくのくかつやまきた</rt><rp>)</rp></ruby>

リストマーカーの色を変更

リストマーカーは通常黒い丸ですが、擬似要素を使って色付きのリストマーカーにできます。上記「漢字などにルビ(ふりがな)をふる方法」の記事中のリストは、この方法で色を変えています。
■コード:

li:before {
   content: '';
   width: 8px;
   height: 8px;
   background: #FF7A7D;
   position: relative;
   left: -10px;
   top: -1px;
   display: inline-block;
}

四角いマーカーを通常の丸いマーカーにするには border-radius: 100%; を追加すればOK。

長いテキストを … で省略する

新着情報などのタイトルを取得して表示さすようなケースがありますよね。ブログ記事の一覧などとか、短いテキストと長いテキストが混在する場合で、スペースが限られている場合などに便利です。

  • 短い文章は、すべて見えます。
  • 長い文章は、スペースからはみ出した場合 … で省略します。
  • 長い文章は折り返してもいいですが、スペースに限りがあり場合は…

■コード:

li {
  width: 340px;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

text-overflow: ellipsis; を指定すると、テキストが表示領域をこえた場合に省略記号「…」を表示します。
text-overflow: clip; を指定すれば、デフォルトの値で省略記号は表示しません。

リストの長い文章の折り返し

リストの折り返しで、リストマーカーを内側に含むか、外側に出して表示するか、ケースによって変えたい場合もありますよね。そんなときは list-style-position プロパティで指定します。

◆リストマーカーまで含めて折り返す
  • 短い文章は、すべて見えます。
  • 長い文章は折り返してもいいですが、折り返す場合、リストマーカーを内側に含むか、外側に出するか指定できます。
◆リストマーカーの手前で折り返す
  • 短い文章は、すべて見えます。
  • 長い文章は折り返してもいいですが、折り返す場合、リストマーカーを内側に含むか、外側に出すか指定できます。

list-style-position: inside; を指定すれば、リストマーカーまで含めて折り返します。
list-style-position: outside; を指定すれば、リストマーカーの手前で折り返します。

リストのn番目のスタイルを変更

リストに関連してもう一つ便利な指定…。「:nth-child(n)」 という擬似クラスを使用して、指定した番号(または範囲)だけに、別のスタイルを適用さすことができます。
■コード:

ul要素の中にある奇数番目のli要素だけ背景色を変えたい
  li:nth-child(odd) {   
    background:#F1F1F1;
  }
ul要素の中にある偶数番目のli要素だけ背景色を変えたい
  li:nth-child(even) {   
    background:#E3E3E3;
  }
  • 奇数の場合は nth-child(odd) を指定、偶数の場合は nth-child(even) を指定する。
  • 2番目を指定する場合は nth-child(2) を指定する。
  • 後ろからn番目とかも指定できる。例えば後ろから2番目の場合は nth-last-child(2) とする。
  • CSS-TRICKS」を参照しました。

使いこなすとすごく便利ですね。ここで擬似クラスについてまとめてみました。

擬似クラス
:after content:"";の""内の要素が該当の終了タグの直前に挿入される
:before content:"";の""内の要素が該当の開始タグの直後に挿入される
:first-child 親要素の最初の子要素に対して適用される
:last-child 親要素の最後の子要素に対して適用される
:only-child 親要素の中に子要素が一つだけの場合、その要素に対して適用される
:nth-child(n) 親要素のn番目の子要素に対して適用される
:nth-last-child(n) 親要素の最後からn番目の子要素に対して適用される
:nth-child(odd) 親要素の奇数番目の子要素に対して適用される
:nth-child(even) 親要素の偶数番目の子要素に対して適用される
:first-of-type 親要素の子要素として最初に出現する要素に対して適用される
:last-of-type 親要素の子要素として最後に出現する要素に対して適用される
:only-of-type 親要素の中に子要素が一種類だけしかないときの、その要素に対して適用される
:nth-of-type(n) 親要素の子要素としてn番目に出現する要素に対して適用される
:disabled 無効になっている要素(input/textareaなど)にスタイルを適用できる
:enabled 有効になっている要素(input/textareaなど)にスタイルを適用できる
:checked チェックされている要素にスタイルを適用できる
:target リンク先の要素に対してスタイルを適用できる
:empty 空要素に対してスタイルを適用できる
:not() ()以外の要素に対して適用される

最後の 「:not()」ってのは初めて見たけど、これを使うとCSSをスマートに書くことができますね。例えばリストなどでマージンを調整する際、「:last-child」で最後の要素のスタイルを調節したりしますが、:not()を使うこと下記のようにできると思います。

li {
  margin-right: 20px;
}
li:last-child {
  margin-right: 0;
}

と記述していた場合、これが

li:not(:last-child) { /* 最後の li 要素以外に適用 */
  margin-right: 20px;
}

とするだけの記述で済みます。

文字テキストをカラム分けする

ケイビーエスは、ハングル印刷のパイオニアとして、1968年の創業当初より様々な研究を重ねてまいりました。

世界初のハングル電算写植の導入や、いち早くMac DTPでの多言語同時出力に成功するなど、たゆまぬ努力によって、製版技術における言語のハードルを乗り越えてきた自負があります。

人と物が世界を飛び交うグローバル時代を迎えた現在、情報を相手の言語に翻訳して伝える、ローカリゼーションの重要性はさらに高まっています。

ケイビーエスのローカリゼーションは、単純に外国語に置き換えるだけではなく、これまで培ってきた多言語ひとすじの実績を活かし、その地域の文化や 習慣に合わせて、言葉や文字だけでなく、組版のルールやデザインの特徴など、お客様にとって最善のソリューションを提案する、一歩進んだ多言語化を目指しています。

スムースな意思疎通によって、あらゆる国の人々が互いに理解しあえる世界を――私たちのあくなき信念です。

■コード:

.text-column {
   -moz-column-count: 3; /* Firefox用のprefixが必要 */
   column-count: 3;
   -moz-column-gap: 34px; /* Firefox prefix */
   column-gap: 34px;
}

column-count: は何カラムにするかを指定し、column-gap: は段のアキを指定します。また column-rule プロパティを使用すれば、段と段の間に罫線を引くことができます。「例:column-rule: #CCC dotted 3px; (カラー・線種・線幅)」
便利なカラム分けですが、残念ながらまだ Firefox はprefixが必要となります。

簡単なスライドパネル

ケイビーエス株式会社
多言語翻訳/DTP/印刷/ウェブ制作など外国語のためのパートナー


■コード:

html ↓↓↓
  <label for="check">クリックで開閉</label>
  <input id="check" type="checkbox">
  <div class="slidepanel">
    <p>ケイビーエス株式会社<br>
    多言語翻訳/DTP/印刷/ウェブ制作など外国語のためのパートナー</p>
  </div>
 

CSS ↓↓↓
  input {
    display: none;
  }
  label {
    cursor: pointer;
    display: inline-block;
    padding: 10px 20px;
    background: #7cf;
    transition: 0.3s;
    border-radius:25px;
    float:left;
    margin-right:20px;
  }
  label:hover {
    background: #2F5FAA;
    color:#fff;
  }
  .slidepanel {
    transition: 0.3s;
    height: 0;
    overflow: hidden;
    background: #7cf;
    position: relative;
  }
  .slidepanel:before {
    content: "";
    position: absolute;
    top:16px;
    left:0;
    border-top: 10px solid transparent;
    border-right: 20px solid transparent;
    border-bottom: 10px solid transparent;
    border-left: 20px solid #FFF;
  }
   input:checked + .slidepanel {
    height: auto;
    padding: 13px 25px;
  }

かつては JavaScript を使用して作成したりしていましたが、今ではCSSのみで実装できるようになりました。
方法としてはいくつか考えられますが、今回はチェックボックスのオンオフを、パネルの開閉ボタンとして利用しました。

背景画像をテキストでクリッピングする

Hello!
2016

■コード:

html ↓↓↓
  <div class="clipping">Hello!<br>2016</div>
 

CSS ↓↓↓
  .clipping {
    width:890px;
    height:380px;
    background:url(images/DSCF0506.jpg)
    font-family:Arial Black, Gadget, sans-serif;
    font-size:190px;
    line-height:190px;
    text-align:center;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
  }

Can I use... によると -webkit-background-clip: text; (only with prefix) となっており、これからの対応となるようですね。
-webkit-background-clip: text; がテキスト部分をクリッピングし、text-fill-color: transparent; はテキストを透明にしています。背景には画像をしていていますが、グラデーションとかも勿論OKです。

Webで文字詰めできる自動カーニング

「Webでの文字詰め」はできないことはないけど、指定がしんどいと思っていました。ただ単に字間を開けたり、詰めたりするだけだったら「letter-spacing: 」を使用していました。でもそれは均等に詰めたり広げたりだけですので、ちょっと使いにくにな……。ところが今は便利な「font-feature-settings: 」なるものがあるんです。現在ほとんどのブラウザがサポートしており、実務でも十分使えるようになってきたという嬉しい話です。ただしこの font-feature-settings は OpenType のフォントのオプション機能を有効にできる機能ですので、OpenType 以外のフォントには適用されません。

font-feature-settings: "palt" 1; で自動カーニング指定(プロポーショナルメトリクス)
「日本語フォント」でこそ指定したい、自動カーニング
 
font-feature-settings: "halt" 1; 字幅半角メトリクスで指定してみる
「日本語フォント」でこそ指定したい、自動カーニング
 
指定なしの通常表記
「日本語フォント」でこそ指定したい、自動カーニング

■コード:

.mojitsume {
   font-feature-settings: "palt" 1;
 }

font-feature-settings は OpenType フォントのオプション機能を指定するプロパティーです。Illustrator でいうところのプロポーショナルメトリクスってやつですね。

font-feature-settings プロパティーは機能名と有効可否(0か1、もしくはoffかon)をセットで指定します。1(有効)を省略した場合は、1が指定されたと見なされるので有効として認識されます。他にも指定方法があるようなので、ググってみましょう! Adobeの「CSS での OpenType 機能の構文」を参考にするともっと役立つかもしれません。

注)Windowsで馴染みのある「メイリオ」は日本語部分が等幅として設計されているため、プロポーショナルメトリクスの情報は含まれていません。そのためメイリオに対しては、font-feature-settings を指定しても字間が詰まりません。