最近要素を置換することができるCSSプロパティcontentにあるcounterという値を使ってなにか作れないかなぁと思っていたのでその時の備忘録です。
counterは要素の先頭などに連番をつけることができるので、
リストタグで無くても番号をつけたりできます。
ボタンをクリック→ボタン消す→カウンターが要素の数に応じて変化 対応ブラウザ : Webkit系ブラウザ(Chrome,Safariで動作確認,Firefoxだと白枠出ます)今回やったこと
今回Jsは一切使ってません。
content:counterで取得した値を減算させるには…
要素の数で増えるんだったら減算もできるだろと思ってやってみました。
display:noneで消してあげたところ、リアルタイムでカウンターの値が反映されました。
ちなみに要素のボックスを維持したまま不可視状態にするvisibility: hidden;ではうまくいきませんでした。
カウンターの値を変更する方法がわかった所で、 擬似セレクタのactiveで…あっ…activeとかtargetとか使って…
あっ維持できない…
次はクリックした時に要素を消してあげようかと思います。
そうです、activeだとクリックした時に消すことは出来ますが、
マウスを離せば状態は元に戻ってしまいます。
同様にtargetを使ってもひとつの要素を消すことは出来ますが、
複数は出来ません。
じゃあどうするかってことです。
選んでいたら消す…
複数の状態維持…チェックボックスとかラジオボタンとか…?
というわけでinput:checkedにdisplay:noneをつけて実行してみました。
checkboxを使えばうまくいきましたが、
これではボタンっぽくはないので、画像に置き換えようと思いました。
そうですよね、子要素にはimgを入れられないんです。 詰まったので調べてみたところ、
javascriptを使わず、html + cssだけでクリックシューティングゲームを作ってみた
appearanceというプロパティを使うことによってOSプラットフォームのスタイルを割りつけられるそうです。(全く知らなかった…)
でもinputの子要素にimgって出来ない…
なのでcssのbackground-imageプロパティで指定すればなんとかなるかと思いましたが…
うまくいきませんでした。
参考にというかズバリな記事が下記に書かれていました。
これをbuttonと指定してあげることでbackgroundを指定することができるようになります。
うまく動いた!!と喜んでいたのですが、 クリックして要素を消した後、リロードすると要素が消えたまま… 2.appearanceで消えないスタイル 今後WebkitもFirefoxのように消えないスタイルが適応、仕様の変更が行われればこのDemoの挙動、外見も変わる可能性はなきにしもあらずですが、iOSでも動いた!!でもFirefoxでは…
Firefoxでは問題がいくつか発生してしまいました。
つまり、checkboxのチェックの状態が維持されているようです。
Firefox5、6、7で確認したところこのような現象が確認できました。
Firefoxではapperaranceでbuttonを指定しても、
こんな風に白い角丸の枠が表示されてしまいました。
borderにnoneを指定してたりしてもスタイルは消えませんでした…
スマートフォン向けのコンテンツを作成する際にはこのようなテクニックを知っていてもいいかもしれないですね。
最初に表示させたデモの主要部分のソースコードは下記のようになります。
HTML
CSS
input{ border:none; text-decoration:none; counter-increment:counting; background-image: url(test.png); background-repeat:no-repeat; width:143px;height:142px; -moz-appearance: button -webkit-appearance: button; } input:hover{background-image: url(test2.png);} input:active{background-image: url(test3.png);} input:checked{display:none;} form::after{content:counter(counting);}