角丸にする既存ライブラリは色々あるけどHTML5対応してなかったり配置が崩れたりで、
もう面倒だから四隅にspan置いて背景指定すればいいわ…と思って作ったクラス。
new IERadius($("main"));
角丸にしたい対象を指定すると、その要素内に次のようなspanが自動作成される。
<span class="radiusFix main-tLeft" style="position: absolute; width: 5px; height: 5px; display: block; top: 0px; left: 0px;"></span> <span class="radiusFix main-tRight" style="position: absolute; width: 5px; height: 5px; display: block; top: 0px; right: 0px;"></span> <span class="radiusFix main-bLeft" style="position: absolute; width: 5px; height: 5px; display: block; bottom: 0px; left: 0px;"></span> <span class="radiusFix main-bRight" style="position: absolute; width: 5px; height: 5px; display: block; bottom: 0px; right: 0px;"></span>
コーナーだけの画像を作って、
スタイルシートで背景指定する。
html { background-color:#113A57; } #main { border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px; } #main{ background-color:#fff; } .radiusFix { background:url(../images/radius_sprite.png) no-repeat left top; } .main-tLeft{background-position:0px 0;} .main-tRight{background-position:-5px 0;} .main-bRight{background-position:-15px 0;} .main-bLeft{background-position:-20px 0;}
指定した親要素にはposition:relativeが付与される。
positionを使うのでIE6でCSSのバグが発生する事がある。(floatが中にある要素に使った場合など)
左:使用後 右:使用前
MooToolsのcoreが必要。
Source
(function($) { this.IERadius = new Class({ Implements: [Options], options: { size:5,//radius size 'classname':null, border:0 }, initialize: function(element,options) { this.setOptions(options); this.element = element; if(!this.element) return; this.element.setStyle("position","relative"); if(typeOf(this.element)=='elements'){ this.addCorners(); }else{ this.addCorner(); } }, addCorners:function(){ this.element.each(function(el){ for(i=0;i<4;i++){ var span = this.createSpan(el,i); span.inject(el); } }.bind(this)); }, addCorner: function() { for(i=0;i<4;i++){ var span = this.createSpan(this.element,i); span.inject(this.element); } }, createSpan:function(obj, i){ var name = ['tLeft','tRight','bLeft','bRight']; var id = this.options.classname ? this.options.classname : (obj.id ? obj.id :'corner'); var span = new Element("span",{"class":"radiusFix "+id+'-'+name[i]}}); if(this.options.size) span.setStyles({'position':"absolute","width":this.options.size,"height":this.options.size,'display':'block','line-height':0,'font-size':0); var border = (this.options.border>0)? '-'+this.options.border+'px':'0px'; if(name[i]=='tLeft'||name[i]=='tRight'){span.style.top=border;} if(name[i]=='bLeft'||name[i]=='bRight'){span.style.bottom=border;} if(name[i]=='tLeft'||name[i]=='bLeft'){span.style.left =border;} if(name[i]=='tRight'||name[i]=='bRight'){span.style.right =border;} return span; } }); })(document.id);
Options
- size
- コーナーのサイズ。nullにするとインラインCSSを設定しなくなる
- classname
- 通常は対象となる要素のIDにコーナー名(tLeftとか)をつけるが、このオプションを設定するとIDよりも優先して使用する。
- border
- 枠線がある場合はピクセルを除いた数値で指定。線幅分positionの位置をマイナスにする。
参考リンク: