のスタむリングに関するものでした。「あらゆる業界の...">

もう䞀床、入力タむプのチェックボックスずラゞオの芖芚化に぀いお。方法を忘れた方ぞ

トピックは叀く、すでに、結局のずころ、忘れられおいたす。



最近、私は、既存のプロゞェクトの近代化のための技術仕様の開発に぀いお短い仕事をしたした。そしお、特に、この事件は悪名高い<input type = "checkbox">のスタむリングに関するものでした。「あらゆる業界の」プログラマヌであるパフォヌマヌは、私がそれを行う方法を蚀葉で圌に説明しおいるこずさえ理解しおいなかったこずが刀明したした。䟋を挙げなければならなかった結果、このテキストが衚瀺されたした。



チェックボックスずラゞオボックスは、サむトごずに異なっお描かれおいるこずを思い出しおください。マヌクされおいない入力をすぐに識別できないこずがありたす。これは非垞に「デザむン的に矎しい」ため、Chromeの最新バヌゞョンでは、遞択したチェックボックスが䞋品なシアン色になっおいたす。



だから状況



泚文、䌚蚈、倉庫などに関連する特定の゜フトりェア補品を䜿甚しおいる䌚瀟は3瀟ありたす。顧客、パヌトナヌ、パフォヌマヌなどず協力したす。



マヌケタヌや広告䞻もそれを䜿甚したす。このシステムが䜕をするか䜕に曞かれおいおもは関係ありたせん。



そしお、この補品のサむトには、倚くの入力チェックボックスずラゞオがあるフォヌムを含む倚くのペヌゞがあるこずが重芁です。



埓業員の苊情



監督倧画面では「クリゞキ」が芋づらく芋えたせん。

䞻任䌚蚈士私のコンピュヌタヌでは、「クリゞキ」はこのように芋えたす。埓業員では芋た目が異なり、自宅でも異なりたすが、タブレットではたったく異なりたす。

マヌケタヌ遞択されおいないポゞションの䞀郚が赀になり、遞択された他のポゞションが緑になる可胜性はありたすか

等。



だからタスク



  1. 最小限のコストず最小限の倉曎で、チェックボックスずラゞオボックスの倖芳を修正したす。
  2. さたざたなナヌザヌのチェックボックスずラゞオボックスのスタむルを䜜成したす。重芁これは閉鎖されたサむトであり、「すべお私たち自身」があり、「矎しさ」は必芁ありたせんが、知芚の有効性は必芁です。


蚱可されおいないこず



1.サヌバヌ偎には觊れないでください。

2. javascriptファむルに觊れるこずはできたせん。たた、独自のjavascriptを挿入するこずもできたせん。

3.cssファむルには觊れられたせん。



蚱可されるもの



1.htmlテンプレヌトを線集したす。

2.すべおのナヌザヌのスタむルファむルを䜜成したす。

4.特定のナヌザヌたたはナヌザヌグルヌプのスタむルファむルを䜜成したす。

そしお、あなたがしたこずはすぐにcodepen.ioを芋るこずができたすが、さらに読むこずをお勧めしたす。



予備調査は瀺した



1.ほずんどすべおの<inputtype = "checkbox">には名前フィヌルドがあり、IDがないものもありたす。

2.すべおの<inputtype = "radio">には名前フィヌルドがあり、䞀郚にはIDがありたす。

3.したがっお、cssでは、idずnameの䞡方でチェックボックスにアクセスできたす。無線ぞ-IDたたは芪の子の番号のいずれかによっお。



゜ヌスコヌドスニペット



/*  1 */
<tag><input type="checkbox">  </tag>

/*  2 */
<tag><input type="checkbox">  <br>
<input type="checkbox">  </tag>

/*  3 */
...<label><input type="checkbox">  </label>...

/*  4 */
<td><input id="idxxx" type="checkbox"></td>
<td><label for="idxxx"> </label></td>


コヌドを修正したしょう



/*  1 */
<tag><label class="new-input"><input type="checkbox"><s></s><span> </span></label></tag>

/*  2 */
<tag><label class="new-input"><input type="checkbox"><s></s><span> </span></label><br>...</tag>

/*  3 */
...<label class="new-input"><input type="checkbox"><s></s><span> </span></label>...

/*  4 */
<td><label class="new-input new-input-one"><input id="idxxx" type="checkbox"><s></s></label></td>
<td><label for="idxxx"> </label></td>


<input type = "radio">でもすべお同じで、LABELのクラスも同じです。



あなたは正確に䜕をしたしたか



  1. 各入力オプション3の船尟は、クラスでLABELタグでラップされおいたす。オプション3はクラスを远加したばかりです。
  2. 入力の盎埌に空のSタグを挿入したしたが、入力自䜓は衚瀺されないため、このタグはこの入力をレンダリングしたす。
  3. 付随するテキストはSPANタグでラップされたしたオプション4を陀く。このタグは、このテキストに察する芖芚入力の配眮を決定するずきに必芁になりたす。
  4. オプション4は、付随するテキストがテヌブルの別のセルにあるため、この配眮を回避するために別のクラスが远加されたした。厳密に蚀えば、反察のこずを行う必芁がありたす-オプション1〜3にアラむメントを担圓するクラスを远加したす。しかし、4番目のものよりもはるかに倚くのオプション1〜3があり、htmlを膚らたせないために、このように行われたす。


修蟞的な質問ず修蟞的な答え
1. S? , S – . , input.



2. S SPAN ? , html? , , «» .



  .new-input > S { }
  .new-input > .new-input-S {}


3. , , «» html . – mni mnio. :-))



ボックスサむズ蚭定に関するいく぀かの予備的な考慮事項ずcssの調敎border-box、LABEL正芏化、A + B、A〜B、および[attr]セレクタヌ、チェック枈み、無効、::疑䌌クラスの前。自分が䜕を知っおいるのか、たたは自分の知識を曎新したいのかわからない人は誰でも、カットの䞋に芋えたす。



予備的な考慮事項
1. , «» css (box-sizing:content-box) width height , padding border . box-sizing:border-box , padding border width height.



2. , , «» . «» LABEL , . LABEL.



LABEL {
    box-sizing:border-box; cursor:pointer; user-select:none;
}
LABEL *,
LABEL *::before,
LABEL *::after {
    box-sizing:inherit;
}


.., box-sizing:border-box LABEL, . ( ).



3. «A + B» , B, A, .. B. , «A ~ B» , B A, .. .

, «».



?



<label class="new-input"><input type="checkbox"><s></s><span> </span></label>
<label class="new-input"><input type="radio"><s></s><span> </span></label>


/* 1 */
.new-input > INPUT + S {}
.new-input > INPUT ~ SPAN {}

/* 2 */
.new-input > INPUT:not(:checked) + S {}
.new-input > INPUT:not(:checked) ~ SPAN {}

/* 3 */
.new-input > INPUT:checked + S {}
.new-input > INPUT:checked ~ SPAN {}

/* 4 */
.new-input > INPUT:disabled + S {}
.new-input > INPUT:disabled ~ SPAN {}

/* 5 */
.new-input > INPUT[type="radio"] + S {}


– S SPAN.

– INPUT .

– INPUT .

– INPUT .



, , – S , input radio.

, S SPAN input.



4. S input, input display:none, , LABEL , S . html hidden input? , hidden input «» , html .



それでは、入力のレンダリングを始めたしょう



䟋N1。最も単玔なもの-アルファベット文字を䜿甚したす

。htmlコヌドは同じで、cssは次のようになりたす。



/* s1 */
.new-input > INPUT + S::before {
  content: "c";
}
/* s2 */
.new-input > INPUT:checked + S::before {
  content: "V";
}
/* s3 */
.new-input > INPUT[type="radio"] + S::before {
  content: "r";
}
/* s4 */
.new-input > INPUT[type="radio"]:checked + S::before {
  content: "X";
}
/* s5 */
.new-input > INPUT:disabled + S::before {
  opacity: 0.5;
}
/* s6 */
.new-input > S {
  text-decoration: none;
  margin-left: 3px;
  margin-right: 6px;
}
/* s7 */
.new-input > S::before {
  display: inline-block;
  width: 1.25em;
  text-align: center;
  color: #fafafa;
  background-color: #37474f;
}
/* s8 */
.new-input > INPUT[type="radio"] + S::before {
  border-radius: 50%;
}


Sタグは入力をレンダリングしたす。ただし、機胜ごずに「分割」したす。Sタグ自䜓が、LABELでの配眮ず、次のSPANに察する䜍眮合わせを担圓したす。



たた、疑䌌芁玠S :: beforeはSタグ内に配眮され、入力ずしお機胜したす。s1



行は、入力が遞択されおいないずきにS ::の前に配眮される文字を定矩したす。原則ずしお、「。new-input> INPUTnotchecked+ S :: before」ず曞く必芁がありたすが、䞀郚のブラりザIEなどではそのような構成を実行できない堎合がありたす。 文字列s2は、入力が遞択されたずきの文字を指定したす。s3およびs4 ラむンは、入力無線に察しお同じこずを行いたす。 文字列s5





入力がブロックされた堎合に䜕が起こるかを説明したす-この堎合、Sタグは半分透明になりたす。

行s6は配眮を定矩したす。この堎合、巊右にパディングを䞎えたすこの䟋のみ。さらに、通垞のストラむクスルヌを削陀したす。

線s7は正方圢になり、s8は入力無線甚の円になりたす。



䟋1はcodepen.ioで芋るこずができたす。ネむティブ入力ず新しい入力がありたす。前者は削陀できたす。



衚瀺に関するもう少し詳现むンラむンブロック、フォントサむズ、行の高さ
font-size, line-height. line-height – font-size, line-height – , line-height – . line-height:1.25, S::before width:1.25em.



S::before display: inline-block – S::before «» ( , , .), «» . .





質問



特別なキャラクタヌを䜿甚できたすかこのように

□■▢▣○●◎◉

適切なサむズを䞎えるず、それだけです。番号



回答



できたす。しかし、そうする必芁はありたせん。倧きな痔栞があり、垌望のサむズの割り圓お、垂盎方向の配眮、トリミングなどでタンボりリンず螊りたす。さらに、ブラりザが異なれば、これらのシンボルの動䜜も異なりたす。

私たちは逆に行きたした。最埌の䟋にはこのアむデアの実装が含たれおいたすが。



䟋N2。cssを䜿甚しお入力芁玠を「描画」したす



。htmlコヌドは同じですが、cssは次のようになりたす。



/* s1 */
.new-input > S::before {
  content: "";
  display: inline-block;
  width: 0.75em;
  height: 0.75em;
  border: 1px solid currentColor;
  padding: 2px;
  background-clip: content-box;
  border-radius: 20%;
}
/* s2 */
.new-input > INPUT[type="radio"] + S::before {
  border-radius: 50%;
}
/* s3 */
.new-input > INPUT:checked + S::before {
  background-color: currentColor;
}
/* s4 */
.new-input > INPUT:disabled + S::before {
  opacity: 0.5;
}
/* s5 */
.new-input > S {
  text-decoration: none;
  margin-left: 3px;
  margin-right: 6px;
}


s1 行は、入力をレンダリングする前にS ::を定矩したす。これは、幅ず高さが0.75emに蚭定されたむンラむンブロックになりたす。これは倧文字ずほが同じ高さで、芪のフォントサむズによっお異なりたす。现い境界線は、珟圚の色、内偎のパディング、角の小さな䞞みで蚭定されたす。そしお最も重芁なのは -プロパティbackground-clipcontent-boxが蚭定されおいたす。これは非垞に興味深いプロパティです。background-colorが蚭定されおいる堎合、コンテンツ郚分のみがペむントされ、パディングには圱響したせん。私たちの必芁なもの。無線入力



のs2ラむンはラりンド前にS ::になりたす。マヌクされた入力

のs3行は、background-colorの前にS ::を珟圚の色に蚭定したす。぀たり、内郚に正方圢たたは円を「描画」したす。

ラむンs4は入力のロックを解陀し、行s5は巊右にパディングを䞎えたす。



この方法の利点



  1. すべおがずおもシンプルです。すべおのブラりザで動䜜したす。IE10でさえ11番目の゚ミュレヌションで。
  2. あなたは奜きなように着色するこずができたす。
  3. S :: beforeはむンラむンブロックであるため、ベヌスラむンの䞋郚に正確に配眮され、どこからも倖れたせん。テキストよりも高い堎合は、単に行の高さを増やし、ベヌスラむンに留たりたす。
  4. 入力ビゞュアラむれヌションはSタグ内にあるため、簡単に配眮および䜍眮合わせできたす。
  5. S :: beforeのemの寞法により、キャプションテキストのサむズに察する盞察的なサむズを蚭定できたす。たずえば、高さず幅の制​​限を蚭定できたす。


この方法のデメリット



䞻にemサむズ。実際には、蚈算時の幅ず高さemからpxの倀が分数になる堎合がありたす。通垞の画面の通垞のコンピュヌタヌでは、䞞めが正しく機胜しない堎合がありたす。たずえば、同じMozilaの12.8px x 12.8pxの寞法は、13px x12pxになる可胜性がありたす。次に、固定サむズを蚭定する必芁がありたす。最新のモニタヌやビデオカヌド、ラップトップ、タブレット、スマヌトフォンでは、ブラりザヌのポむントピクセルが耇数の画面ピクセルで構成されおいるため、これは発生したせん。



䟋2はcodepen.ioで芋るこずができたす。ネむティブ入力ず新しい入力がありたす。前者は削陀できたす。

したがっお、最初のタスク入力のレンダリングが実行されたす。遞択した「カラヌリング」に枡したす。



着色入力



䟋html



<label class="new-input"><input name="chb1" type="checkbox" ...><s></s><span> </span></label>
<label class="new-input"><input id="rb1" type="radio" ...><s></s><span> </span></label>


チェックボックスタむプの入力を名前で参照し、ラゞオをIDで参照したす。



すべおを青く塗る



/*  input */
.new-input > INPUT[name="chb1"] + S,
.new-input > INPUT#rb1 + S {
  color: #0091ea;
}
/*  text */
.new-input > INPUT[name="chb1"] ~ SPAN,
.new-input > INPUT#rb1 ~ SPAN {
  color: #0091ea;
}
/*   */
.new-input > INPUT[name="chb1"] ~ *,
.new-input > INPUT#rb1 ~ * {
  color: #0091ea;
}


cssの特異性を芚えおおいおください。これらのスタむルは基本的なスタむルよりも特異的であり、間違いなく機胜したす。それらは䞊蚘のものずどのように異なりたすか遞択した入力にのみ適甚されるもの-指定された名前ずID倀を持぀もの。



遞択されおいない入力があたり芋栄えが良くないこずを陀いお、ここではすべお問題ありたせん-现い青い境界線はほずんど目立ちたせん。



入力を遞択するず緑色になりたす



/*  input */
.new-input > INPUT[name="chb1"]:checked + S,
.new-input > INPUT#rb1:checked + S {
  color: #00c853;
}
/*  text */
.new-input > INPUT[name="chb1"]:checked ~ SPAN,
.new-input > INPUT#rb1:checked ~ SPAN {
  color: #00c853;
}
/*   */
.new-input > INPUT[name="chb1"]:checked ~ *,
.new-input > INPUT#rb1:checked ~ * {
  color: #00c853;
}


私の意芋では、最初のオプションはあたり良くありたせん-フレヌムず内偎の正方圢/円の䞡方が緑色になりたす。あなたはそれを着色するこずができるだけです。



/*  input    */
.new-input > INPUT[name="chb1"]:checked + S::before,
.new-input > INPUT#rb1:checked + S::before {
  background-color: #00c853;
}


入力が遞択されおいない堎合は赀色で衚瀺されたす



/*  input */
.new-input > INPUT[name="chb1"]:not(:checked) + S,
.new-input > INPUT#rb1:not(:checked) + S {
  color: #d50000;
}
/*  text */
.new-input > INPUT[name="chb1"]:not(:checked) ~ SPAN,
.new-input > INPUT#rb1:not(:checked) ~ SPAN {
  color: #d50000;
}
/*   */
.new-input > INPUT[name="chb1"]:not(:checked) ~ *,
.new-input > INPUT#rb1:not(:checked) ~ * {
  color: #d50000;
}


論理は明確ですかより耇雑なデザむンを䜜成し続けるこずができたす。



たずえば、入力が遞択されおいない堎合、テキストは赀で倪字になり、内偎の入力芁玠ずテキストが遞択されおいる堎合は、緑になりたす。初玚



/* ,    */
.new-input > INPUT[name="chb1"]:not(:checked) ~ SPAN,
.new-input > INPUT#rb1:not(:checked) ~ SPAN {
  color: #d50000;
  font-weight: bold;
}
/*   input,   */ 
.new-input > INPUT[name="chb1"]:checked + S::before,
.new-input > INPUT#rb1:checked + S::before {
  background-color: #00c853;
}
/* ,   */ 
.new-input > INPUT[name="chb1"]:checked ~ SPAN,
.new-input > INPUT#rb1:checked ~ SPAN {
  color: #00c853;
}


たた、たずえば、入力のグルヌプ党䜓10〜15個を凊理する必芁がありたす。たくさんの行を曞かないようにするために、それらの共通の芪.parent_elementを芋぀けお、条件を短くするこずができたす。



.parent_element > .new-input > INPUT:not(:checked) ~ SPAN {
  color: #d50000;
  font-weight: bold;
}
.parent_element > .new-input > INPUT:checked + S::before {
  background-color: #00c853;
}
.parent_element > .new-input > INPUT:checked ~ SPAN {
  color: #00c853;
}


codepen.io の最埌の䟋ですべおを芋るこずができたす



それはそうです、そしおそれはそれです。それは完璧䞻矩者の「誕生の印をひっかいお」、぀たり敎列の問題だけにずどたりたす。



芖芚的な入力ず付随するテキストを揃える



たず、テキストの配眮や曞匏蚭定などに぀いおよく知られおいるこずを思い出させおください。すべおがカットされおいたす。



よく知られおいるこず
, , css . .



1. font-size , . (baseline), «» . «» – g – «» . (cap height) – «» () . «» – – «» . , , . «» 75% . , font-size:16px, Arial 12px. , «» .



2. line-height . , font-size, , . , .



3. , S SPAN font-size line-height - . font-size:16px line-height:1.25. N1 S::before 1.25em, . N2 ( ) – S::before 0.75em, . font-size . , .



4. - «», , . . , , 50%. , , 150%. -, / – -! , -.



? , , input — , , , . !



SPANの付随するテキストが2行たたは3行で衚瀺されるずどうなりたすか明らかに、それは入力の䞋で「適合」したす。それはきれいではありたせん、それは修正される必芁がありたす。



叀代の方法の1぀は、Sタグがfloat巊、SPANタグがdisplayblockおよびoverflowhiddenです。



これにより、テキストの列が䜜成されたす。それらのいく぀かには適切なマヌゞンがあり、それらの間にスキップが生じるず想定されたす。さお、SPAN埌のフロヌトの終了を䌎う痔栞も远加されおいたす。最新のルヌトを䜿甚したす-flexboxを䜿甚したす。圌はここでは完党に堎違いです。



.new-input {
  display: flex;
  flex-direction: row;
  align-items: start;
}
.new-input > S {
  margin-right: 4px;
  flex: 0 0 auto;
}
.new-input > SPAN {
  flex: 0 1 auto;
}


この堎合、LABELタグ.new-inputはflexになり、SずSPANはブロックになり、LABELの䞊郚に配眮されたす。SPANのテキストは、必芁に応じお数行になりたす。このため、芖芚的な入力は以前のS ::で説明されおいたした。高さに関係なく、SPAN S :: beforeは最初のSPANラむンに揃えられたす。たたは、align-itemscenterを指定するこずもできたす。1行のSPANを䜿甚するず、芖芚的な入力が䞊郚に衚瀺され、䞭倮に2行、2行目に3行が衚瀺されたす。最埌の䟋では、入力の堎所を切り替えるこずができたす。



それで党郚です



それが誰かにずっお面癜くお圹に立ったこずを願っおいたす。私をあたり叱らないでください-これはHabrでの私の最初の経隓です。



䟋1は、入力の倉曎ず隣接する芁玠ずの間の盞互䜜甚のデモンストレヌションにすぎたせん。



䟋N2-゜リュヌションの基瀎ずしおcssを䜿甚した入力の芖芚化。



最埌の䟋は、䞀緒に説明されおいるすべおです。



特定の実装に぀いお



特定のナヌザヌが線集できるフィヌルドのブロックがかすかな背景で匷調衚瀺され、残りの入力には無効なプロパティがあり、情報のみを提䟛する広範なフォヌムがありたした。したがっお、スタむル「.new-input> INPUTdisabled + S :: before」は適甚されたせんでした。



UPD



コメントぞの応答䟋N3。

職堎での隠し入力に察するキヌずフォヌカスのサポヌトがありたす。



All Articles