CSSでチェックボックスのボーダースタイルを変更するにはどうすればよいですか?


122

チェックボックス(入力)ボーダーのスタイルを変更するにはどうすればよいですか?私はborder:1px solid #1e5180それを着ましたが、FireFox 3.5では何も起こりません!

回答:


63

何かが発生した場合に任意のブラウザで、私は驚かれることと思います。これは、ブラウザーがそれほどスタイルを設定できない傾向にある優れたフォーム要素の1つであり、通常、人々は何かをスタイル/コード化してチェックボックスのように振る舞うようにJavaScriptで置き換えようとします。


4
Operaはチェックボックスでスタイリングを非常にうまく処理します。IEには、(チェックボックス自体ではなく)チェックボックスを囲むいくつかのスタイルがあります。
畏敬の念

4
彼らは実際には最近醜いです:D
GergelyFehérvári2017

1
2020年も依然として醜い
ポール

210

「ボーダー」の代わりに「アウトライン」を使用することをお勧めします。次に例を示しますoutline: 1px solid #1e5180


3
アウトラインは素晴らしい選択肢です。
ニッピサウルス

4
アウトラインは非常に優れており、すべての入力ボックスと選択ボックスで機能するため、「。error」クラスに役立ちます。
SztupY

2
!importantアウトラインを使用する場合、CSSに追加する必要がある場合があります。私はこれをFirefox 12.0でテストしていましたが、重要なことをしないと、チェックボックスをクリックしている間はアウトラインが消えてしまいます。
Weezle、2012年

3
これは素晴らしい代替案ですが、アウトラインの問題はIE7では機能しないことです。
Yises、2012

13
@Yises IE7について心配する必要がありますか?いや、ごめんなさい。
theblang

71

あなたは使うべきです

-moz-appearance:none;
-webkit-appearance:none;
-o-appearance:none;

次に、デフォルトのチェックボックスの画像/スタイルを取り除き、スタイルを設定できます。とにかく国境はまだFirefoxにあります


2
Operaでは、追加のハッカーを使わずにチェックボックスのスタイルを設定できます。-o-appearanceスタイルは省略します。ただし、-moz-appearanceと-webkit-appearanceは優れています。
ニール

7
エラー:すぐに話してください: "-webkit-appearance:none;" チェックボックスの動作を無効にしているようです。
Neall

6
私(chrome 5)はそうではありません、:checked状態をスタイルする必要があります
Valerij

1
外観はCSS標準の一部ではありませんでした。使用しないでください。
エフゲニー

これはすごいです。プラグインを削除します。私は何でもできる=> | input [type = checkbox] | input [type = checkbox]:hover | input [type = checkbox]:checked | input [type = checkbox]:checked:after ...
h0mayun

21

ボックスシャドウを使用して境界線を偽造できます。

-webkit-box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
-moz-box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);
box-shadow: 0px 0px 0px 1px rgba(255,0,0,1);

@retrovertigoどのバージョンですか?
Dennis Heiden

バージョン12.0.2(14606.3.4)/ MacOSの10.14の最新
retrovertigo

@retrovertigo私は私のソリューションをテストしました、そしてあなたは正しいです。私の答えは、(-webkit-appearance:none;のように)さらに変更を加えないと、Safariでは機能しません。3年後、pendingfoxまたはAdanから提供されたソリューションを使用します。しかし、私は数週間以内に私の答えを拡張しようとします。ご意見ありがとうございます。
Dennis Heiden

11

これは、CSS3 LINKを使用したMartinのカスタムチェックボックスとラジオボタンに基づく純粋なCSS(画像なし)クロスブラウザソリューションです。http://martinivanov.net/2012/12/21/imageless-custom-checkboxes-and-radio-buttons -with-css3-revisited /

ここにjsFiddleがあります:http ://jsfiddle.net/DJRavine/od26wL6n/

私は以下のブラウザでこれをテストしました:

  • FireFox(41.0.2)(42)
  • Google Chrome(46.0.2490.80 m)
  • オペラ(33.0.1990.43)
  • Internet Explorer(11.0.10240.16431 [更新バージョン:11.0.22])
  • Microsoft Edge(20.10240.16384.0)
  • SafariモバイルiPhone iOS9(601.1.46)

label,
input[type="radio"] + span,
input[type="radio"] + span::before,
label,
input[type="checkbox"] + span,
input[type="checkbox"] + span::before
{
    display: inline-block;
    vertical-align: middle;
}
 
label *,
label *
{
    cursor: pointer;
}
 
input[type="radio"],
input[type="checkbox"]
{
    opacity: 0;
    position: absolute;
}
 
input[type="radio"] + span,
input[type="checkbox"] + span
{
    font: normal 11px/14px Arial, Sans-serif;
    color: #333;
}
 
label:hover span::before,
label:hover span::before
{
    -moz-box-shadow: 0 0 2px #ccc;
    -webkit-box-shadow: 0 0 2px #ccc;
    box-shadow: 0 0 2px #ccc;
}
 
label:hover span,
label:hover span
{
    color: #000;
}
 
input[type="radio"] + span::before,
input[type="checkbox"] + span::before
{
    content: "";
    width: 12px;
    height: 12px;
    margin: 0 4px 0 0;
    border: solid 1px #a8a8a8;
    line-height: 14px;
    text-align: center;
     
    -moz-border-radius: 100%;
    -webkit-border-radius: 100%;
    border-radius: 100%;
     
    background: #f6f6f6;
    background: -moz-radial-gradient(#f6f6f6, #dfdfdf);
    background: -webkit-radial-gradient(#f6f6f6, #dfdfdf);
    background: -ms-radial-gradient(#f6f6f6, #dfdfdf);
    background: -o-radial-gradient(#f6f6f6, #dfdfdf);
    background: radial-gradient(#f6f6f6, #dfdfdf);
}
 
input[type="radio"]:checked + span::before,
input[type="checkbox"]:checked + span::before
{
    color: #666;
}
 
input[type="radio"]:disabled + span,
input[type="checkbox"]:disabled + span
{
    cursor: default;
     
    -moz-opacity: .4;
    -webkit-opacity: .4;
    opacity: .4;
}
 
input[type="checkbox"] + span::before
{
    -moz-border-radius: 2px;
    -webkit-border-radius: 2px;
    border-radius: 2px;
}
 
input[type="radio"]:checked + span::before
{
    content: "\2022";
    font-size: 30px;
    margin-top: -1px;
}
 
input[type="checkbox"]:checked + span::before
{
    content: "\2714";
    font-size: 12px;
}



input[class="blue"] + span::before
{
    border: solid 1px blue;
    background: #B2DBFF;
    background: -moz-radial-gradient(#B2DBFF, #dfdfdf);
    background: -webkit-radial-gradient(#B2DBFF, #dfdfdf);
    background: -ms-radial-gradient(#B2DBFF, #dfdfdf);
    background: -o-radial-gradient(#B2DBFF, #dfdfdf);
    background: radial-gradient(#B2DBFF, #dfdfdf);
}
input[class="blue"]:checked + span::before
{
    color: darkblue;
}



input[class="red"] + span::before
{
    border: solid 1px red;
    background: #FF9593;
    background: -moz-radial-gradient(#FF9593, #dfdfdf);
    background: -webkit-radial-gradient(#FF9593, #dfdfdf);
    background: -ms-radial-gradient(#FF9593, #dfdfdf);
    background: -o-radial-gradient(#FF9593, #dfdfdf);
    background: radial-gradient(#FF9593, #dfdfdf);
}
input[class="red"]:checked + span::before
{
    color: darkred;
}
 <label><input type="radio" checked="checked" name="radios-01" /><span>checked radio button</span></label>
 <label><input type="radio" name="radios-01" /><span>unchecked radio button</span></label>
 <label><input type="radio" name="radios-01" disabled="disabled" /><span>disabled radio button</span></label>

<br/>

 <label><input type="radio" checked="checked" name="radios-02"  class="blue" /><span>checked radio button</span></label>
 <label><input type="radio" name="radios-02" class="blue" /><span>unchecked radio button</span></label>
 <label><input type="radio" name="radios-02" disabled="disabled" class="blue" /><span>disabled radio button</span></label>

<br/>

 <label><input type="radio" checked="checked" name="radios-03"  class="red" /><span>checked radio button</span></label>
 <label><input type="radio" name="radios-03" class="red" /><span>unchecked radio button</span></label>
 <label><input type="radio" name="radios-03" disabled="disabled" class="red" /><span>disabled radio button</span></label>

<br/>
 
<label><input type="checkbox" checked="checked" name="checkbox-01" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" /><span>disabled checkbox</span></label>

<br/>
 
<label><input type="checkbox" checked="checked" name="checkbox-01" class="blue" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" class="blue" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" class="blue" /><span>disabled checkbox</span></label>

<br/>
 
<label><input type="checkbox" checked="checked" name="checkbox-01" class="red" /><span>selected checkbox</span></label>
<label><input type="checkbox" name="checkbox-02" class="red" /><span>unselected checkbox</span></label>
<label><input type="checkbox" name="checkbox-03" disabled="disabled" class="red" /><span>disabled checkbox</span></label>


10

私は古くなっています。しかし、ちょっとした回避策は、チェックボックスをラベルタグの中に入れて、枠線でラベルをスタイルすることです:

<label class='hasborder'><input type='checkbox' /></label>

次に、ラベルをスタイルします。

.hasborder { border:1px solid #F00; }

1
また、ラベル要素は、チェックボックスがその内部に表示されていなくても、クリックされるたびにチェックボックスをオンにすることに注意してください。だから、ラベルに次のような何かを行うことができlabel { position: relative; overflow: hidden; width: 16px; height: 16px; border: 1px solid #0f0; }、その後、label > input[type=checkbox] { position: absolute; left: -999px; }これはあなた自身のチェックボックスとオリジナルのチェックボックスがまだ確認されます/未チェックあなたのカスタムスタイルをさせますが、ユーザがそれを見ることはありません。カスタムチェックボックスのみが表示されます。
Gavin、2015年

1
追加するのを忘れ、その後、あなたは次のようにセレクタを使用することができます:hoverし、 :checkedカスタムチェックボックスのスタイルの他の州に。
Gavin

10

これは、チェックボックスのティッカーにFontAwesomeを使用する私のバージョンです。FontAwesomeはほとんどの人が使用していると思います。IE / Edgeでテストされていません。誰も気にしないと思います。

input[type=checkbox] {
	-moz-appearance:none;
	-webkit-appearance:none;
	-o-appearance:none;
	outline: none;
	content: none;	
}

input[type=checkbox]:before {
	font-family: "FontAwesome";
    content: "\f00c";
    font-size: 15px;
    color: transparent !important;
    background: #fef2e0;
    display: block;
    width: 15px;
    height: 15px;
    border: 1px solid black;
    margin-right: 7px;
}

input[type=checkbox]:checked:before {

	color: black !important;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>

<input type="checkbox">


9

以下のためのFirefoxクロムサファリ、何も起こりません。

ためIE境界チェックボックス(不チェックボックスの一部として)の外側に適用され、チェックボックスに効果シェーディング「空想」がなくなっ(オールド・ファッションドチェックボックスとして表示されます)。

以下のためのオペラ境界線スタイルは、実際には、チェックボックス要素に境界線を適用しています。
Operaは他のブラウザよりもチェックボックス上の他のスタイリングも適切に処理します:は目盛りのとして適用され、背景色はチェックボックス内の背景色として適用されます(IEは、チェックボックスが<div>背景の中にあるかのように背景を適用します) 。

結論

最も簡単な解決策は、<div>他の人が提案したようにチェックボックスをラップすることです。
外観を完全に制御したい場合は、高度な画像/ JavaScriptアプローチを使用する必要があります。


2
+1は調査用ですが、div内にラップすることは解決策ではありません。チェックボックスのスタイルを設定することはできません。チェックボックスの周りのスタイルを設定することができます。

さて、チェックボックス自体のスタイルを設定できるブラウザはOperaだけです。div内にラップすることは十分に良いソリューションかもしれませんが、それは本当にあなたが望むものに依存します。チェックボックスのスタイルを設定しようとすると、IEは実際にdivに配置するように動作します。
畏敬の念

7

視覚的な外観を大幅に変更したい場合、純粋なCSSではチェックボックス(およびその他の多くの入力要素)のスタイル設定は実際には不可能です。

あなたの最善のは、実際に入力を画像に置き換え、それにJavaScriptの動作を適用してチェックボックス(またはそのほかの要素)を模倣するjqTransformのようなものを実装することです


4

いいえ、まだチェックボックス自体をスタイルすることはできませんが、チェックボックスをクリックする機能維持しながら、錯覚をスタイルする方法を(ついに)見つけました。つまり、カーソルが完全に静止していない場合でも、テキストを選択したり、ドラッグアンドドロップをトリガーしたりせずに切り替えられます。

この例では、スパン「ボタン」とラベル内のテキストを使用していますが、チェックボックスを非表示にして、その後ろに何かを描画する方法についてのアイデアが得られます。

このソリューションは、おそらくラジオボタンにも適合します。

以下はIE9、FF30.0およびChrome 40.0.2214.91で動作し、基本的な例にすぎません。それでも、背景画像や疑似要素と組み合わせて使用​​できます。

http://jsfiddle.net/o0xo13yL/1/

label {
    display: inline-block;
    position: relative; /* needed for checkbox absolute positioning */
    background-color: #eee;
    padding: .5rem;
    border: 1px solid #000;
    border-radius: .375rem;
    font-family: "Courier New";
    font-size: 1rem;
    line-height: 1rem;
}

label > input[type="checkbox"] {
    display: block;
    position: absolute; /* remove it from the flow */
    width: 100%;
    height: 100%;
    margin: -.5rem; /* negative the padding of label to cover the "button" */
    cursor: pointer;
    opacity: 0; /* make it transparent */
    z-index: 666; /* place it on top of everything else */
}

label > input[type="checkbox"] + span {
    display: inline-block;
    width: 1rem;
    height: 1rem;
    border: 1px solid #000;
    margin-right: .5rem;
}

label > input[type="checkbox"]:checked + span {
    background-color: #666;
}

<label>
    <input type="checkbox" />
    <span>&nbsp;</span>Label text
</label>

2

以下は簡単な方法です(擬似要素/クラスの前または後に使用する):

input[type=checkbox] {
    position: relative;
}

input[type=checkbox]:after {
    position: absolute;
    top: 0;
    left: 0;
    /* Above three lines allow the checkbox:after position at checkbox's position */
    content: '';
    width: 32px;
    height: 32px;
    z-index: 1; /* This allows the after overlap the checkbox */
    /* Anything you want */
}

これは、チェックボックスなどのスタイルを変更するスマートな方法だと思います。
Alex Fang

1
FirefoxとIEでは動作しません。さらに重要なのは、void要素にコンテンツを含めることが許可されていないため、Chromeの実装が正しくないことです。
Leo

レオ、あなたは「コンテンツ」という用語を誤って解釈している、それはそれらのvoid要素が終了タグがないのでその間にコンテンツを持つことができないということだけを言っています。たとえば、<a> content </a>には終了タグがあるため、これらのタグの間にコンテンツを置くことができます。ただし、入力には終了タグがないため、原則として内容を含めることはできません。一方、擬似要素には「コンテンツ」と呼ばれるプロパティがあり、どこでも使用できます。
pendingfox

-1

<!DOCTYPE html>
<html>
<head>
<style> 

.abc123
{
	-webkit-appearance:none;
    width: 14px;
    height: 14px;
    display: inline-block;
    background: #FFFFFF;
	border: 1px solid rgba(220,220,225,1);
}
.abc123:after {
  content: "";
  display: inline-block;
  position: relative;
  top: -3px;
  left: 4px;
  width: 3px;
  height: 5px;
  border-bottom: 1px solid #fff;
  border-right: 1px solid #fff;
  -webkit-transform: rotate(45deg);
}

input[type=checkbox]:checked   {
    background: #327DFF;
    outline: none;
    border: 1px solid rgba(50,125,255,1);
}
input:focus,input:active {
	outline: none;
}

input:hover {
   border: 1px solid rgba(50,125,255,1);
}

</style>
</head>
<body>

<input class="abc123" type="checkbox"></input>


</body>
</html>


最初: ":after" create√; 2番目: "-webkit-appearance:none"元のスタイルが機能しないため、スタイルを定義できます。
KeepLearn '20

2
あなたの答えについて短い説明を書いてください。
エンジェルFシラス

-5

それをdivに入れて、divに境界線を追加します


5
次に、二重の境界線が表示されます。
Egor Pavlikhin

<divのスタイル= "国境スタイル:固体;幅:120ピクセル;">の<input type = "チェックボックス"名前= "mycheck">マイチェックボックス</入力> </ div>の作品htmlsandboxと罰金
Midhat

8
「正常に機能する」を定義します。たとえば、120px幅のチェックボックスを見たことがない。

-8
<div style="border-style: solid;width:13px"> 
   <input type="checkbox" name="mycheck" style="margin:0;padding:0;">
   </input> 
</div>

7
@lexu </ input>などはありません
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.