uuAltCSS 開発ログ
問題1. 子要素に position: absolute + right: が設定されていると、子要素が身切れる
<!doctype html><html><head><title></title> <style> .view-box1 { padding: 10px; position: relative; top: 10px; left: 10px; } .box1 { border: 4px solid navy; -uu-border-radius: 4px; -uu-box-shadow: skyblue 10px 10px 5px; width: 300px; } .view-box2 { padding: 10px; position: absolute; // absolute right: 10px; // right top: 20px; } .box2 { border: 4px solid navy; -uu-border-radius: 4px; -uu-box-shadow: skyblue 10px 10px 5px; -uu-background-image: url(cover14.jpg); width: 160px; height: 100px; } </style> <script src="uuAltCSS.js"></script> </head><body> <div class="view-box1"> <div class="box1"> box1 <div class="view-box2"> <div class="box2"> box2 </div> </div> </div> </div> </body></html>
原因は、Layerの view.style.overflow = "hidden" が設定されていたためです。
uuLayerの第三引数を追加し対処しました。
// src/uuLayer.js _layer = function(view, // @param Node: layer container width, // @param Number: view width // /CSSString(= "auto"): 300 "300px" "auto" height, // @param Number: view height // /CSSString(= "auto"): 150 "150px" "auto" option) { // @param Hash: { HIDDEN: 0, // 1: overflow = "hidden" // FLYWEIGHT: 1 // 1: ctx.xFlyweight = 1 // } this._option = _mix(option || {}, { HIDDEN: 0, FLYWEIGHT: 1 }, 1); // view style (this._option.HIDDEN) && (view.style.overflow = "hidden"); } // src/uuAltCSS.boxeffect.js _boxeffect = function(node, excss) { bfx.layer = new uuLayer(view, declw, declh, { HIDDEN: 0 }); }
親要素も身切れている問題は、子要素の幅,高さを取得するタイミングを変えて対処しました。
問題2. 関数呼び出しを減らしたい
あるページでは、Math.round が 3300回呼ばれています。
速度に関係する主要な部分の Math.round(a) を (a + (a < 0 ? -0.49 : 0.5)) | 0 に置換することで、50ms程速くなりました(in IE6)。
Math.round(-2.501) と (-2.501 + (-2.501 < 0 ? -0.49 : 0.5)) | 0 で結果が異なりますがそれは承知の上です。