Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSS】カードをめくる その2

 どうも!LSSです!!

先日の記事、

の内容をちょっと扱いやすく?しました^^

 

 

サンプル(カードをクリックしてみてください)

 

 

 

コード

<style><!--
.card{
position:relative;
perspective:500px;
}
.fuda{
position:absolute;
display:inline-block;
transition:2s;
backface-visibility:hidden;
border-radius:15px;
}
.csize{
width:150px;
height:200px;
}
#omote{
transform:rotateY(180deg);
background:white;
border:2px solid black;
padding:0.6em;
}
#ura{
transform:rotateY(0deg);
background:pink;
border:10px double black;
background-image:linear-gradient(45deg,#ffffff00 50%,#ffffff80 50%);
background-size:20px 20px;
}
#tg01:checked~#omote{
transform:rotateY(0deg);
}
#tg01:checked~#ura{
transform:rotateY(-180deg);
}
--></style>
<div class="card csize">
<input id="tg01" style="display: none;" type="checkbox" />
<label id="omote" class="fuda csize" for="tg01">めくると出てくる文章</label>
<label id="ura" class="fuda csize" for="tg01"></label>
</div>

 

 

コード解説(デザイン変更について)

コードのほとんどが<style>~</style>で占められています。

今回はJavaScriptは使っていません。

 

カードサイズ指定部分

.csize{
width:150px;
height:200px;
}

この部分でカードのサイズを一括指定しています。
…以前の記事の時には3回、widthとheightの指定を書いていましたが、今回はcsizeクラスに統一し、3か所から この指定を読みにくるようにしています。

このしておいた方が変更が容易、という利点がありますね^^

 

カード背面デザイン部分

#ura{
transform:rotateY(0deg);
background:pink;
border:10px double black;
background-image:linear-gradient(45deg,#ffffff00 50%,#ffffff80 50%);
background-size:20px 20px;
}

めくる前に見えている側の面のデザインを記述しています。

一行目の transform:rotateY(0deg); は回転の制御のための記述で、それ以外の赤文字部分がデザインの記述となります。


background:pink;
色をピンクにする指定

border:10px double black;
黒の二重線で枠を囲み、

background-image:linear-gradient(45deg,#ffffff00 50%,#ffffff80 50%);
斜めに区切って、白半透明と透明を切り替えるのを、

background-size:20px 20px;
20pxサイズで描画(したものが並びます)


というデザインにしてみました。 

もちろん他のデザインを適用する事も可能です。
例えばbackground-imageの一行を、

で作った background-image:radialgradient(以下複数のradial-gradient略)に置き換えても良さそうです^^

 

カード表面デザイン部分

#omote{
transform:rotateY(180deg);
background:white;
border:2px solid black;
padding:0.6em;
}

こちらも一行目の transform:rotateY(180deg); は回転の制御のための記述(180度回転しているため最初は伏せられています)で、赤文字部分がデザインの記述になります。


background:white;
色を白にする指定
border:2px solid black;
黒の2pxの太さの枠で囲み、
padding:0.6em;
内側に0.6文字分の余白をとっています。

 

 

JavaScriptを使用せずに、カードの表裏を管理するのは

だいぶ前の記事ですが、

を改変しています^^

 

<div class="card csize">
<input id="tg01" style="display: none;" type="checkbox" />
<label id="omote" class="fuda csize" for="tg01">めくると出てくる文章</label>
<label id="ura" class="fuda csize" for="tg01"></label>
</div>


<div>タグの中に、<input>タグ、<label>タグ2つを入れている構造です。

<input>タグはオプションtype="checkbox"によって「オンオフできるチェックボックス」になっていますが、オプションstyle="display: none;"によって非表示になっています。

 

2つの<label>タグが、それぞれカードの表面・裏面の役割を担っています。

そして、どちらもオプションfor="tg01"によって、
「クリックするとチェックボックスをクリックした事にする」
という役割も果たしています^^

 

 

ちょっとつまづいたところ

<input>タグ=チェックボックスの状態から、CSSで影響を受ける部分(今回の例では2つの<label>タグ)って、<input>タグよりも「後ろに」書かないと効かないみたいですね^^;

 

それに気づくまで結構悩みましたw

 

はてなブログの編集画面の仕様で、<label>タグが書く場所によっては勝手に消される事にも苦戦しつつ^^;;;;;

 

 

もし使いたい方おられたら、ご自由にコピペしてください^^

(1ページに2枚以上おくと動作しないと思います。←ゲームに使うには改良しないといけない点ですね^^;)

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^