最近好きなjavascriptライブラリのmootoolsでHTML内のボックス要素をスムーズに角丸(角を丸める)を実現するTranscornersという物があります。
中々面白いのでちょろりとデモなぞ書いてみます。角丸はcssでも実現できますがHTML側での改編が結構必要だったり、画像を用意したりするので、javascriptで実現するとなかなか楽チンでいいです。
mootoolsのRevision76の大幅改編でTranscornersは現状普通では動きません。Transcorners側でも対処が入るとは思いますが、一時的な対処法があるので、別途一番下を見てください。
基本的に「makeRounded」というメソッドを使うと角丸にする事が出来ます。どうも該当要素の上位要素のバックグラウンドを角丸のバックグラウンドに使っているらしいので、角丸のバックグラウンドを変えたい時は上位要素のバックグラウンドの色も変更しないとダメみたいです。また、要素に「padding」を入れないと角丸が上の被さってしまうので注意(もちろんz-indexを指定すればOKです)。ちなみにオプションを入れない単純な角丸の場合は「10px」の幅が取られます。
<div id="demo1" style="background:#999999; color:#FFFFFF; padding:10px; width:300px;"> 一番単純な例 </div>
$('demo1').makeRounded();
角丸の大きさも「radius」のオプションを指定する事で変更する事が出来るみたいです。この例では50pxに指定しています。同時に角丸にする該当要素に「padding:50px」を指定しています。
<div id="demo2" style="background:#999999; color:#FFFFFF; padding:50px; width:220px;"> 角を更に丸めてみる </div>
$('demo2').makeRounded({radius: 50});
角丸の外側にボーダー(線)を入れる事もできます。ただオプションで指定する「borderColor」は角丸部分のみが反映されるので、角丸にしたい該当要素にもボーダー「border」をスタイルシートで入れています。また上下左右の一部のみも角丸に指定する事が出来るらしいです。「top left」を入れると上の左のみ、「top」だと上の左右って感じです。
<div id="demo3" style="background:#EEEEEE; color:#333333; padding:10px; width:300px; border:1px solid #339933;"> ボーダー(線)を入れる+一部だけ角丸にする。 </div>
$('demo3').makeRounded('top left', {borderColor: '#339933', radius: 10});
mootoolsにある「fx.linear」「Fx.Transtions.linear」をオプション指定する事で直線的な角を作る事もできます。
<div id="demo4" style="background: #999999; color: #FFFFFF; padding: 10px; width: 300px;"> 直線的な角にも </div>
$('demo4').makeRounded({transition: Fx.Transitions.linear});
角丸で、ボーダーを入れて、更に上・右下に角丸を入れるオプション全部入りです。
<div id="demo5" style="background:#EEEEEE; color:#333333; padding:30px; width:260px; border:1px solid #339933;"> 角丸全部入り </div>
$('demo5').makeRounded('top,bottom right', {borderColor:'#339933', radius: 30});
「fx.linear」を使った直線角を使った全部入りです。
<div id="demo6" style="background:#EEEEEE; color:#333333; padding:30px; width:260px; border:1px solid #339933;"> 直線角全部入り </div>
$('demo6').makeRounded('top left, bottom', {transition: Fx.Transitions.linear, radius: 30});
mootools側での大幅改編の内容としてはエフェクトを計算するためのメソッド(custom transition)の名前が変わったという事です。
* Fx.js is heavily modified to allow all of Robert Penner transitions! The downside is that if you have ever used a custom transition you’ll have to upgrade your code, as all the transitions are now stored in Fx.Transition. …
so transition: Fx.quadIn becomes Fx.Transitions.quadIn etc.
つまり、いままで「Fx.quadIn」という名前で使っていたものが「Fx.Transitions.quadIn」になります。Transitionの中にバラバラになっていたものを纏めた形だと思われます。また引数が増え外側からもオプションを指定できるようになっているみたいです。
そこで、先日エントリしたTranscornersにも影響が出ました。一応以下の部分を変更すると使えるようになると思われます。(というか変更したものをこのブログでも使ってます。)
transition: Fx.circIn,
まず、ここを以下のように変更↓↓↓
transition: Fx.Transitions.circIn,
margin = Math.round(this.options.transition((this.options.radius - i) / this.options.radius) * this.options.radius);
次にここをこのように変更↓↓↓
margin = Math.round(this.options.transition((this.options.radius - i) / this.options.radius,0,1,1) * this.options.radius);
これで動くようになると思われます・・・。ま、今度Transcornersに改編あったらまたエントリー設けようと思います。