2

HTML、CSS、JavaScriptを使用してカスタムラジオボタンを作成しようとしています。ラジオボタンに関する以前の質問を調べて、提案を実装したように感じますが、jpeg画像はまだ半分にカットされています。私は明らかに何かが欠けていますが、それが何であるかはわかりません。以下は私のHTMLCSSとJavaScriptです。任意の入力をいただければ幸いです。

<style TYPE="text/css">
.has-js .label_check,
.has-js .label_radio { padding-left: 40px;}
.has-js .label_radio {
background: url(images/radio_button-21.jpg) no-repeat;
width: 33px;
height: 35px;}

.has-js .label_check { background: url(check-off.png) no-repeat; }
.has-js label.c_on { background: url(check-on.png) no-repeat; }
.has-js label.r_on { 
background: url(images/radio_button_selected.jpg) no-repeat;
width: 33px;
height: 35px;}

.has-js .label_check input,
.has-js .label_radio input { position: absolute; left: -9999px;}

</style>

</head>

<label class="label_radio" for="radio-01">
    <input name="sample-radio" id="radio-01" value="1" type="radio" />
    Yes
</label>


<br />
<br />

<label class="label_radio" for="radio-02">
    <input name="sample-radio" id="radio-02" value="2" type="radio" />
    No
</label>

<br />
<br />

<label class="label_radio" for="radio-03">
    <input name="sample-radio" id="radio-03" value="3" type="radio" />
    Maybe
</label>


</body>

JavaScriptコード

onload = function() {

    var body = gebtn(d,'body')[0];
    body.className = body.className && body.className != '' ? body.className + ' has-js' : 'has-js';

    if (!d.getElementById || !d.createTextNode) return;
    var ls = gebtn(d,'label');
    for (var i = 0; i < ls.length; i++) {
        var l = ls[i];
        if (l.className.indexOf('label_') == -1) continue;
        var inp = gebtn(l,'input')[0];
        if (l.className == 'label_check') {
            l.className = (safari && inp.checked == true || inp.checked) ? 'label_check c_on' : 'label_check c_off';
            l.onclick = check_it;
        };
        if (l.className == 'label_radio') {
            l.className = (safari && inp.checked == true || inp.checked) ? 'label_radio r_on' : 'label_radio r_off';
            l.onclick = turn_radio;
        };
    };
};
var check_it = function() {
    var inp = gebtn(this,'input')[0];
    if (this.className == 'label_check c_off' || (!safari && inp.checked)) {
        this.className = 'label_check c_on';
        if (safari) inp.click();
    } else {
        this.className = 'label_check c_off';
        if (safari) inp.click();
    };
};
var turn_radio = function() {
    var inp = gebtn(this,'input')[0];
    if (this.className == 'label_radio r_off' || inp.checked) {
        var ls = gebtn(this.parentNode,'label');
        for (var i = 0; i < ls.length; i++) {
            var l = ls[i];
            if (l.className.indexOf('label_radio') == -1)  continue;
            l.className = 'label_radio r_off';
        };
        this.className = 'label_radio r_on';
        if (safari) inp.click();
    } else {
        this.className = 'label_radio r_off';
        if (safari) inp.click();
    };
};
4

3 に答える 3

2

コードを実行することができないか、少なくともその外観のスクリーンショットを見ることができないとは言えません。しかし、ラジオボタン(またはその周りの要素)の幅や高さが、使用している画像のサイズに対して小さすぎるように思えます。その場合は、適切な幅または高さを指定する CSS 宣言で修正する必要があります。

編集: この種のトラブルシューティングを行うには、組み込みの開発者ツールを使用できるように、Chrome ブラウザーで作業するのが好きです。Chrome では、要素を右クリックして [Inspect Element] を選択できます。これにより、DOM をブラウズし、どの CSS 指定子が各要素に影響を与えているかを確認し、問題が診断されるまで実験的に微調整することができます。

于 2012-06-14T00:09:59.020 に答える
1

画像ファイルがラジオ ボタンと同じサイズであることを確認してください。

とにかく、JavaScript がある理由がわかりません。純粋な CSS にすることができます:
http://jsfiddle.net/DerekL/9MtMx/

input[type="radio"]{
    -webkit-appearance:none;
    -moz-appearance:none;
    border-radius:8px;
    border:1px solid #dbdbdb;
    width:16px;
    height:16px;
    cursor:pointer;
    margin:0 1px;
    background-image: -webkit-gradient(linear, left top, left bottom, from(white), to(#f2f2f2));
    vertical-align:bottom;
}

input[type="radio"]:checked{
    background-position:0px 0px;
    background-image: url('checked.png'), -webkit-gradient(linear, left top, left bottom, from(white), to(#f2f2f2));
}
于 2012-06-14T00:25:02.663 に答える
0

これを行う CSS の方法は適切ですが、残念ながらこれをサポートしていない可能性がある IE 6、7、および 8 に我慢する必要があります。最良の方法は、互換性のないブラウザー (IE!!!!) のみに対応する JS メソッドに落ち着いて、残りの部分には CSS を使用することです。

于 2012-10-17T15:48:28.217 に答える