Creating corner with different angle by using css and js

29999 ワード

Our requirements:
  • no image used in corner
  • only html, css and javascript
  • user-defined color
  • user-defined angle

  • Steps
    (1) corner.js
    /*
    Automatic, anti-aliased rounded corners.
     
    By Steven Wittens
    Based on http://pro.html.it/esempio/nifty/
     
    Thanks to Jacob from Oddlabs.com for fixing two nasty bugs.
    */
    
    function NiftyCheck() {
        if (!document.getElementById || !document.createElement) {
            return false;
        }
        var b = navigator.userAgent.toLowerCase();
        if (b.indexOf("msie 5") > 0 && b.indexOf("opera") == -1) {
            return false;
        }
        return true;
    }
    
    function Rounded(selector, bk, color, sizex, sizey) {
        var i;
        var v = getElementsBySelector(selector);
        var l = v.length;
        for (i = 0; i < l; i++) {
            AddTop(v[i], bk, color, sizex, sizey);
            AddBottom(v[i], bk, color, sizex, sizey);
        }
    }
    
    Math.sqr = function (x) {
        return x * x;
    };
    
    function Blend(a, b, alpha) {
        var ca = Array(
        parseInt('0x' + a.substring(1, 3)),
        parseInt('0x' + a.substring(3, 5)),
        parseInt('0x' + a.substring(5, 7))
      );
        var cb = Array(
        parseInt('0x' + b.substring(1, 3)),
        parseInt('0x' + b.substring(3, 5)),
        parseInt('0x' + b.substring(5, 7))
      );
        r = '0' + Math.round(ca[0] + (cb[0] - ca[0]) * alpha).toString(16);
        g = '0' + Math.round(ca[1] + (cb[1] - ca[1]) * alpha).toString(16);
        b = '0' + Math.round(ca[2] + (cb[2] - ca[2]) * alpha).toString(16);
        return '#'
        + r.substring(r.length - 2)
        + g.substring(g.length - 2)
        + b.substring(b.length - 2);
    }
    
    function AddTop(el, bk, color, sizex, sizey) {
        var i, j;
        var d = document.createElement("div");
        d.style.backgroundColor = bk;
        d.className = "rounded";
        var lastarc = 0;
        for (i = 1; i <= sizey; i++) {
            var coverage, arc2, arc3;
            // Find intersection of arc with bottom of pixel row
            arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex;
            // Calculate how many pixels are bg, fg and blended.
            var n_bg = sizex - Math.ceil(arc);
            var n_fg = Math.floor(lastarc);
            var n_aa = sizex - n_bg - n_fg;
            // Create pixel row wrapper
            var x = document.createElement("div");
            var y = d;
            x.style.margin = "0px " + n_bg + "px";
            // Make a wrapper per anti-aliased pixel (at least one)
            for (j = 1; j <= n_aa; j++) {
                // Calculate coverage per pixel
                // (approximates circle by a line within the pixel)
                if (j == 1) {
                    if (j == n_aa) {
                        // Single pixel
                        coverage = ((arc + lastarc) * .5) - n_fg;
                    }
                    else {
                        // First in a run
                        arc2 = Math.sqrt(1.0 - Math.sqr(1.0 - (n_bg + 1) / sizex)) * sizey;
                        coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5;
                    }
                }
                else if (j == n_aa) {
                    // Last in a run
                    arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
                    coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5;
                }
                else {
                    // Middle of a run
                    arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey;
                    arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
                    coverage = ((arc2 + arc3) * .5) - (sizey - i);
                }
    
                x.style.backgroundColor = Blend(bk, color, coverage);
                y.appendChild(x);
                y = x;
                var x = document.createElement("div");
                x.style.margin = "0px 1px";
            }
            x.style.backgroundColor = color;
            y.appendChild(x);
            lastarc = arc;
        }
        el.insertBefore(d, el.firstChild);
    }
    
    function AddBottom(el, bk, color, sizex, sizey) {
        var i, j;
        var d = document.createElement("div");
        d.className = "rounded";
        d.style.backgroundColor = bk;
        var lastarc = 0;
        for (i = 1; i <= sizey; i++) {
            var coverage, arc2, arc3;
            // Find intersection of arc with bottom of pixel row
            arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex;
            // Calculate how many pixels are bg, fg and blended.
            var n_bg = sizex - Math.ceil(arc);
            var n_fg = Math.floor(lastarc);
            var n_aa = sizex - n_bg - n_fg;
            // Create pixel row wrapper
            var x = document.createElement("div");
            var y = d;
            x.style.margin = "0px " + n_bg + "px";
            // Make a wrapper per anti-aliased pixel (at least one)
            for (j = 1; j <= n_aa; j++) {
                // Calculate coverage per pixel
                // (approximates circle by a line within the pixel)
                if (j == 1) {
                    if (j == n_aa) {
                        // Single pixel
                        coverage = ((arc + lastarc) * .5) - n_fg;
                    }
                    else {
                        // First in a run
                        arc2 = Math.sqrt(1.0 - Math.sqr(1.0 - (n_bg + 1) / sizex)) * sizey;
                        coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5;
                    }
                }
                else if (j == n_aa) {
                    // Last in a run
                    arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
                    coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5;
                }
                else {
                    // Middle of a run
                    arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey;
                    arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
                    coverage = ((arc2 + arc3) * .5) - (sizey - i);
                }
    
                x.style.backgroundColor = Blend(bk, color, coverage);
                y.insertBefore(x, y.firstChild);
                y = x;
                var x = document.createElement("div");
                x.style.margin = "0px 1px";
            }
            x.style.backgroundColor = color;
            y.insertBefore(x, y.firstChild);
            lastarc = arc;
        }
        el.appendChild(d);
    }
    
    function getElementsBySelector(selector) {
        var i;
        var s = [];
        var selid = "";
        var selclass = "";
        var tag = selector;
        var objlist = [];
        if (selector.indexOf(" ") > 0) {  //descendant selector like "tag#id tag"
            s = selector.split(" ");
            var fs = s[0].split("#");
            if (fs.length == 1) {
                return objlist;
            }
            return document.getElementById(fs[1]).getElementsByTagName(s[1]);
        }
        if (selector.indexOf("#") > 0) { //id selector like "tag#id"
            s = selector.split("#");
            tag = s[0];
            selid = s[1];
        }
        if (selid != "") {
            objlist.push(document.getElementById(selid));
            return objlist;
        }
        if (selector.indexOf(".") > 0) {  //class selector like "tag.class"
            s = selector.split(".");
            tag = s[0];
            selclass = s[1];
        }
        var v = document.getElementsByTagName(tag);  // tag selector like "tag"
        if (selclass == "") {
            return v;
        }
        for (i = 0; i < v.length; i++) {
            if (v[i].className == selclass) {
                objlist.push(v[i]);
            }
        }
        return objlist;
    }

    (2) corner.css
    /* See license.txt for terms of usage */
    
    .firebugCanvas {
        position:fixed;
        top: 0;
        left: 0;
        display:none;
        border: 0 none;
        margin: 0;
        padding: 0;
        outline: 0;
        min-width: 0;
        max-width: none;
        min-height: 0;
        max-height: none;
        -moz-transform: rotate(0deg);
        -moz-transform-origin: 50% 50%;
    }
    .firebugCanvas:before, .firebugCanvas:after {
        content: "";
    }
    .firebugHighlight {
        z-index: 2147483646;
        position: fixed;
        background-color: #3875d7;
        opacity: 1;
        margin: 0;
        padding: 0;
        outline: 0;
        border: 0 none;
        min-width: 0;
        max-width: none;
        min-height: 0;
        max-height: none;
    }
    .firebugHighlight:before, .firebugHighlight:after {
        content: "";
    }
    .firebugLayoutBoxParent {
        z-index: 2147483646;
        position: fixed;
        background-color: transparent;
        border-top: 0 none;
        border-right: 1px dashed #E00 !important;
        border-bottom: 1px dashed #E00 !important;
        border-left: 0 none;
        margin: 0;
        padding: 0;
        outline: 0;
        min-width: 0;
        max-width: none;
        min-height: 0;
        max-height: none;
        -moz-transform: rotate(0deg);
        -moz-transform-origin: 50% 50%;
    }
    .firebugRuler {
        position: absolute;
        margin: 0;
        padding: 0;
        outline: 0;
        border: 0 none;
        opacity: 1;
        min-width: 0;
        max-width: none;
        min-height: 0;
        max-height: none;
        -moz-transform: rotate(0deg);
        -moz-transform-origin: 50% 50%;
    }
    .firebugRuler:before, .firebugRuler:after {
        content: "";
    }
    .firebugRulerH {
        top: -15px;
        left: 0;
        width: 100%;
        height: 14px;
        background: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%13%88%00%00%00%0E%08%02%00%00%00L%25a%0A%00%00%00%04gAMA%00%00%D6%D8%D4OX2%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%04%F8IDATx%DA%EC%DD%D1n%E2%3A%00E%D1%80%F8%FF%EF%E2%AF2%95%D0D4%0E%C1%14%B0%8Fa-%E9%3E%CC%9C%87n%B9%81%A6W0%1C%A6i%9A%E7y%0As8%1CT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AATE9%FE%FCw%3E%9F%AF%2B%2F%BA%97%FDT%1D~K(%5C%9D%D5%EA%1B%5C%86%B5%A9%BDU%B5y%80%ED%AB*%03%FAV9%AB%E1%CEj%E7%82%EF%FB%18%BC%AEJ8%AB%FA'%D2%BEU9%D7U%ECc0%E1%A2r%5DynwVi%CFW%7F%BB%17%7Dy%EACU%CD%0E%F0%FA%3BX%FEbV%FEM%9B%2B%AD%BE%AA%E5%95v%AB%AA%E3E5%DCu%15rV9%07%B5%7F%B5w%FCm%BA%BE%AA%FBY%3D%14%F0%EE%C7%60%0EU%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5JU%88%D3%F5%1F%AE%DF%3B%1B%F2%3E%DAUCNa%F92%D02%AC%7Dm%F9%3A%D4%F2%8B6%AE*%BF%5C%C2Ym~9g5%D0Y%95%17%7C%C8c%B0%7C%18%26%9CU%CD%13i%F7%AA%90%B3Z%7D%95%B4%C7%60%E6E%B5%BC%05%B4%FBY%95U%9E%DB%FD%1C%FC%E0%9F%83%7F%BE%17%7DkjMU%E3%03%AC%7CWj%DF%83%9An%BCG%AE%F1%95%96yQ%0Dq%5Dy%00%3Et%B5'%FC6%5DS%95pV%95%01%81%FF'%07%00%00%00%00%00%00%00%00%00%F8x%C7%F0%BE%9COp%5D%C9%7C%AD%E7%E6%EBV%FB%1E%E0(%07%E5%AC%C6%3A%ABi%9C%8F%C6%0E9%AB%C0'%D2%8E%9F%F99%D0E%B5%99%14%F5%0D%CD%7F%24%C6%DEH%B8%E9rV%DFs%DB%D0%F7%00k%FE%1D%84%84%83J%B8%E3%BA%FB%EF%20%84%1C%D7%AD%B0%8E%D7U%C8Y%05%1E%D4t%EF%AD%95Q%BF8w%BF%E9%0A%BF%EB%03%00%00%00%00%00%00%00%00%00%B8vJ%8E%BB%F5%B1u%8Cx%80%E1o%5E%CA9%AB%CB%CB%8E%03%DF%1D%B7T%25%9C%D5(%EFJM8%AB%CC'%D2%B2*%A4s%E7c6%FB%3E%FA%A2%1E%80~%0E%3E%DA%10x%5D%95Uig%15u%15%ED%7C%14%B6%87%A1%3B%FCo8%A8%D8o%D3%ADO%01%EDx%83%1A~%1B%9FpP%A3%DC%C6'%9C%95gK%00%00%00%00%00%00%00%00%00%20%D9%C9%11%D0%C0%40%AF%3F%EE%EE%92%94%D6%16X%B5%BCMH%15%2F%BF%D4%A7%C87%F1%8E%F2%81%AE%AAvzr%DA2%ABV%17%7C%E63%83%E7I%DC%C6%0Bs%1B%EF6%1E%00%00%00%00%00%00%00%00%00%80cr%9CW%FF%7F%C6%01%0E%F1%CE%A5%84%B3%CA%BC%E0%CB%AA%84%CE%F9%BF)%EC%13%08WU%AE%AB%B1%AE%2BO%EC%8E%CBYe%FE%8CN%ABr%5Dy%60~%CFA%0D%F4%AE%D4%BE%C75%CA%EDVB%EA(%B7%F1%09g%E5%D9%12%00%00%00%00%00%00%00%00%00H%F6%EB%13S%E7y%5E%5E%FB%98%F0%22%D1%B2'%A7%F0%92%B1%BC%24z3%AC%7Dm%60%D5%92%B4%7CEUO%5E%F0%AA*%3BU%B9%AE%3E%A0j%94%07%A0%C7%A0%AB%FD%B5%3F%A0%F7%03T%3Dy%D7%F7%D6%D4%C0%AAU%D2%E6%DFt%3F%A8%CC%AA%F2%86%B9%D7%F5%1F%18%E6%01%F8%CC%D5%9E%F0%F3z%88%AA%90%EF%20%00%00%00%00%00%00%00%00%00%C0%A6%D3%EA%CFi%AFb%2C%7BB%0A%2B%C3%1A%D7%06V%D5%07%A8r%5D%3D%D9%A6%CAu%F5%25%CF%A2%99%97zNX%60%95%AB%5DUZ%D5%FBR%03%AB%1C%D4k%9F%3F%BB%5C%FF%81a%AE%AB'%7F%F3%EA%FE%F3z%94%AA%D8%DF%5B%01%00%00%00%00%00%00%00%00%00%8E%FB%F3%F2%B1%1B%8DWU%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*UiU%C7%BBe%E7%F3%B9%CB%AAJ%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5J%95*U%AAT%A9R%A5*%AAj%FD%C6%D4%5Eo%90%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5%86%AF%1B%9F%98%DA%EBm%BBV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%ADV%AB%D5j%B5Z%AD%D6%E4%F58%01%00%00%00%00%00%00%00%00%00%00%00%00%00%40%85%7F%02%0C%008%C2%D0H%16j%8FX%00%00%00%00IEND%AEB%60%82") repeat-x;
        border-top: 1px solid #BBBBBB;
        border-right: 1px dashed #BBBBBB;
        border-bottom: 1px solid #000000;
    }
    .firebugRulerV {
        top: 0;
        left: -15px;
        width: 14px;
        height: 100%;
        background: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%0E%00%00%13%88%08%02%00%00%00%0E%F5%CB%10%00%00%00%04gAMA%00%00%D6%D8%D4OX2%00%00%00%19tEXtSoftware%00Adobe%20ImageReadyq%C9e%3C%00%00%06~IDATx%DA%EC%DD%D1v%A20%14%40Qt%F1%FF%FF%E4%97%D9%07%3BT%19%92%DC%40(%90%EEy%9A5%CB%B6%E8%F6%9Ac%A4%CC0%84%FF%DC%9E%CF%E7%E3%F1%88%DE4%F8%5D%C7%9F%2F%BA%DD%5E%7FI%7D%F18%DDn%BA%C5%FB%DF%97%BFk%F2%10%FF%FD%B4%F2M%A7%FB%FD%FD%B3%22%07p%8F%3F%AE%E3%F4S%8A%8F%40%EEq%9D%BE8D%F0%0EY%A1Uq%B7%EA%1F%81%88V%E8X%3F%B4%CEy%B7h%D1%A2E%EBohU%FC%D9%AF2fO%8BBeD%BE%F7X%0C%97%A4%D6b7%2Ck%A5%12%E3%9B%60v%B7r%C7%1AI%8C%BD%2B%23r%00c0%B2v%9B%AD%CA%26%0C%1Ek%05A%FD%93%D0%2B%A1u%8B%16-%95q%5Ce%DCSO%8E%E4M%23%8B%F7%C2%FE%40%BB%BD%8C%FC%8A%B5V%EBu%40%F9%3B%A72%FA%AE%8C%D4%01%CC%B5%DA%13%9CB%AB%E2I%18%24%B0n%A9%0CZ*Ce%9C%A22%8E%D8NJ%1E%EB%FF%8F%AE%CAP%19*%C3%BAEKe%AC%D1%AAX%8C*%DEH%8F%C5W%A1e%AD%D4%B7%5C%5B%19%C5%DB%0D%EF%9F%19%1D%7B%5E%86%BD%0C%95%A12%AC%5B*%83%96%CAP%19%F62T%86%CAP%19*%83%96%CA%B8Xe%BC%FE)T%19%A1%17xg%7F%DA%CBP%19*%C3%BA%A52T%86%CAP%19%F62T%86%CA%B0n%A9%0CZ%1DV%C6%3D%F3%FCH%DE%B4%B8~%7F%5CZc%F1%D6%1F%AF%84%F9%0F6%E6%EBVt9%0E~%BEr%AF%23%B0%97%A12T%86%CAP%19%B4T%86%CA%B8Re%D8%CBP%19*%C3%BA%A52huX%19%AE%CA%E5%BC%0C%7B%19*CeX%B7h%A9%0C%95%E1%BC%0C%7B%19*CeX%B7T%06%AD%CB%5E%95%2B%BF.%8F%C5%97%D5%E4%7B%EE%82%D6%FB%CF-%9C%FD%B9%CF%3By%7B%19%F62T%86%CA%B0n%D1R%19*%A3%D3%CA%B0%97%A12T%86uKe%D0%EA%B02*%3F1%99%5DB%2B%A4%B5%F8%3A%7C%BA%2B%8Co%7D%5C%EDe%A8%0C%95a%DDR%19%B4T%C66%82fA%B2%ED%DA%9FC%FC%17GZ%06%C9%E1%B3%E5%2C%1A%9FoiB%EB%96%CA%A0%D5qe4%7B%7D%FD%85%F7%5B%ED_%E0s%07%F0k%951%ECr%0D%B5C%D7-g%D1%A8%0C%EB%96%CA%A0%A52T%C6)*%C3%5E%86%CAP%19%D6-%95A%EB*%95q%F8%BB%E3%F9%AB%F6%E21%ACZ%B7%22%B7%9B%3F%02%85%CB%A2%5B%B7%BA%5E%B7%9C%97%E1%BC%0C%EB%16-%95%A12z%AC%0C%BFc%A22T%86uKe%D0%EA%B02V%DD%AD%8A%2B%8CWhe%5E%AF%CF%F5%3B%26%CE%CBh%5C%19%CE%CB%B0%F3%A4%095%A1%CAP%19*Ce%A8%0C%3BO*Ce%A8%0C%95%A12%3A%AD%8C%0A%82%7B%F0v%1F%2FD%A9%5B%9F%EE%EA%26%AF%03%CA%DF9%7B%19*Ce%A8%0C%95%A12T%86%CA%B8Ze%D8%CBP%19*Ce%A8%0C%95%D1ae%EC%F7%89I%E1%B4%D7M%D7P%8BjU%5C%BB%3E%F2%20%D8%CBP%19*Ce%A8%0C%95%A12T%C6%D5*%C3%5E%86%CAP%19*Ce%B4O%07%7B%F0W%7Bw%1C%7C%1A%8C%B3%3B%D1%EE%AA%5C%D6-%EBV%83%80%5E%D0%CA%10%5CU%2BD%E07YU%86%CAP%19*%E3%9A%95%91%D9%A0%C8%AD%5B%EDv%9E%82%FFKOee%E4%8FUe%A8%0C%95%A12T%C6%1F%A9%8C%C8%3D%5B%A5%15%FD%14%22r%E7B%9F%17l%F8%BF%ED%EAf%2B%7F%CF%ECe%D8%CBP%19*Ce%A8%0C%95%E1%93~%7B%19%F62T%86%CAP%19*Ce%A8%0C%E7%13%DA%CBP%19*Ce%A8%0CZf%8B%16-Z%B4h%D1R%19f%8B%16-Z%B4h%D1R%19%B4%CC%16-Z%B4h%D1R%19%B4%CC%16-Z%B4h%D1%A2%A52%CC%16-Z%B4h%D1%A2%A52h%99-Z%B4h%D1%A2%A52h%99-Z%B4h%D1%A2EKe%98-Z%B4h%D1%A2EKe%D02%5B%B4h%D1%A2EKe%D02%5B%B4h%D1%A2E%8B%96%CA0%5B%B4h%D1%A2E%8B%96%CA%A0e%B6h%D1%A2E%8B%96%CA%A0e%B6h%D1%A2E%8B%16-%95a%B6h%D1%A2E%8B%16-%95A%CBl%D1%A2E%8B%16-%95A%CBl%D1%A2E%8B%16-Z*%C3l%D1%A2E%8B%16-Z*%83%96%D9%A2E%8B%16-Z*%83%96%D9%A2E%8B%16-Z%B4T%86%D9%A2E%8B%16-Z%B4T%06-%B3E%8B%16-Z%B4T%06-%B3E%8B%16-Z%B4h%A9%0C%B3E%8B%16-Z%B4h%A9%0CZf%8B%16-Z%B4h%A9%0CZf%8B%16-Z%B4h%D1R%19f%8B%16-Z%B4h%D1R%19%B4%CC%16-Z%B4h%D1R%19%B4%CC%16-Z%B4h%D1%A2%A52%CC%16-Z%B4h%D1%A2%A52h%99-Z%B4h%D1%A2%A52h%99-Z%B4h%D1%A2EKe%98-Z%B4h%D1%A2EKe%D02%5B%B4h%D1%A2EKe%D02%5B%B4h%D1%A2E%8B%96%CA0%5B%B4h%D1%A2E%8B%96%CA%A0e%B6h%D1%A2E%8B%96%CA%A0e%B6h%D1%A2E%8B%16-%95a%B6h%D1%A2E%8B%16-%95A%CBl%D1%A2E%8B%16-%95A%CBl%D1%A2E%8B%16-Z*%C3l%D1%A2E%8B%16-Z*%83%96%D9%A2E%8B%16-Z*%83%96%D9%A2E%8B%16-Z%B4T%86%D9%A2E%8B%16-Z%B4T%06-%B3E%8B%16-Z%B4T%06-%B3E%8B%16-Z%B4h%A9%0C%B3E%8B%16-Z%B4h%A9%0CZf%8B%16-Z%B4h%A9%0CZf%8B%16-Z%B4h%D1R%19f%8B%16-Z%B4h%D1R%19%B4%CC%16-Z%B4h%D1R%19%B4%CC%16-Z%B4h%D1%A2%A52%CC%16-Z%B4h%D1%A2%A52h%99-Z%B4h%D1%A2%A52h%99-Z%B4h%D1%A2EKe%98-Z%B4h%D1%A2EKe%D02%5B%B4h%D1%A2EKe%D02%5B%B4h%D1%A2E%8B%96%CA0%5B%B4h%D1%A2E%8B%96%CA%A0e%B6h%D1%A2E%8B%96%CA%A0e%B6h%D1%A2E%8B%16-%95a%B6h%D1%A2E%8B%16-%95A%CBl%D1%A2E%8B%16-%95A%CBl%D1%A2E%8B%16-Z*%C3l%D1%A2E%8B%16-Z*%83%96%D9%A2E%8B%16-Z*%83%96%D9%A2E%8B%16-Z%B4T%86%D9%A2E%8B%16-Z%B4T%06-%B3E%8B%16-Z%B4%AE%A4%F5%25%C0%00%DE%BF%5C'%0F%DA%B8q%00%00%00%00IEND%AEB%60%82") repeat-y;
        border-left: 1px solid #BBBBBB;
        border-right: 1px solid #000000;
        border-bottom: 1px dashed #BBBBBB;
    }
    .overflowRulerX > .firebugRulerV {
        left: 0;
    }
    .overflowRulerY > .firebugRulerH {
        top: 0;
    }
    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    
    .firebugLayoutBox {
        margin: 0;
        padding: 0;
        border: 0 none;
        opacity: 1;
        outline: 0;
        width: auto;
        min-width: 0;
        max-width: none;
        min-height: 0;
        max-height: none;
        -moz-transform: rotate(0deg);
        -moz-transform-origin: 50% 50%;
    }
    .firebugLayoutBox:before, .firebugLayoutBox:after {
        content: "";
    }
    .firebugLayoutBoxOffset {
        z-index: 2147483646;
        position: fixed;
        opacity: 0.8;
    }
    .firebugLayoutBoxMargin {
        background-color: #EDFF64;
    }
    .firebugLayoutBoxBorder {
        background-color: #666666;
    }
    .firebugLayoutBoxPadding {
        background-color: SlateBlue;
    }
    .firebugLayoutBoxContent {
        background-color: SkyBlue;
    }
    .firebugLayoutLine {
        z-index: 2147483646;
        background-color: #000000;
        opacity: 0.4;
        margin: 0;
        padding: 0;
        outline: 0;
        border: 0 none;
        min-width: 0;
        max-width: none;
        min-height: 0;
        max-height: none;
        -moz-transform: rotate(0deg);
        -moz-transform-origin: 50% 50%;
    }
    .firebugLayoutLine:before, .firebugLayoutLine:after {
        content: "";
    }
    .firebugLayoutLineLeft, .firebugLayoutLineRight {
        position: fixed;
        width: 1px;
        height: 100%;
    }
    .firebugLayoutLineTop, .firebugLayoutLineBottom {
        position: fixed;
        width: 100%;
        height: 1px;
    }
    .firebugLayoutLineTop {
        margin-top: -1px;
        border-top: 1px solid #999999;
    }
    .firebugLayoutLineRight {
        border-right: 1px solid #999999;
    }
    .firebugLayoutLineBottom {
        border-bottom: 1px solid #999999;
    }
    .firebugLayoutLineLeft {
        margin-left: -1px;
        border-left: 1px solid #999999;
    }
    .fbProxyElement {
        position: absolute;
        background-color: transparent;
        z-index: 2147483646;
        margin: 0;
        padding: 0;
        outline: 0;
        border: 0 none;
    }

    (3) corner.html
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>css&js Corner</title>
    <link rel="stylesheet" type="text/css" href="corner.css" />
    <style type="text/css">
    body {
        padding: 20px;
        background-color: #377CB1;
        font: 100.01% "Trebuchet MS", Verdana, Arial, sans-serif;
    }
    h1, p, form {
        margin: 0 10px;
    }
    h1 {
        font-size: 250%;
        color: #FFF;
    }
    div#nifty {
        margin: 0 10%;
        background: #9BD1FA;
    }
    div.rounded div {
        height: 1px;
        overflow: hidden;
    }
    #radiusx, #radiusy {
        text-align: right;
        width: 30px;
    }
    </style>
    <script type="text/javascript" src="corner.js"></script>
    <script type="text/javascript">
        window.onload = function () {
            if (!NiftyCheck()) {
                return;
            }
            Rounded("div#nifty", "#377CB1", "#9BD1FA", 30, 30);
        }
    
        function adjustRadius() {
            d = getElementsBySelector("div.rounded");
            for (var i = 0; i < d.length; ++i) {
                d[i].parentNode.removeChild(d[i]);
            }
            var x = document.getElementById("radiusx").value;
            var y = document.getElementById("radiusy").value;
            Rounded("div#nifty", "#377CB1", "#9BD1FA", x, y);
            return false;
        }
    </script>
    </head>
    
    <body>
    <div id="nifty">
      <h1>Nifty Anti-aliased Corners</h1>
    </div>
    </body>
    </html>