අවසාන වශයෙන් ගැටලුවේ මූලාශ්රය දෙස බලමු
පිරික්සුම් කොටු රූප භාවිතයෙන් විදහා දක්වයි (යමෙකුට CSS හරහා අභිරුචි ඒවා සැකසිය හැක). DOM පරීක්ෂක සමඟ ඉස්මතු කර ඇති ෆයර්ෆොක්ස් හි (පරීක්ෂා නොකළ) පිරික්සුම් කොටුවක් මෙන්න:
Chrome හි එකම අස්ථායි පිරික්සුම් කොටුව මෙන්න:
ඔබට ආන්තිකය (තැඹිලි) දැකිය හැකිය; පෑඩින්ග් නොමැත (කොළ පැහැයෙන් දැක්වේ). ඉතින් මෙම ව්යාජ ආන්තිකය දකුණු පසින් සහ පිරික්සුම් කොටුවේ පහළින් ඇත්තේ කුමක්ද? මේවා පිරික්සුම් කොටුව සඳහා භාවිතා කරන රූපයේ කොටස් වේ . සාධාරණ ලෙස භාවිතා කරන්නේ එබැවිනිvertical-align: middle
නිසාම සැබවින්ම ප්රමාණවත් නොවන අතර හරස් බ්රව්සර් ගැටලුවල මූලාශ්රය එයයි.
ඉතින් මේ ගැන අපට කුමක් කළ හැකිද?
පැහැදිලිව පෙනෙන එක් විකල්පයක් නම් - රූප ආදේශ කරන්න! වාසනාවකට මෙන්, කෙනෙකුට මෙය CSS හරහා කළ හැකි අතර බාහිර රූප, base64 (in-CSS) රූප, CSS in svg හෝ ව්යාජ මූලද්රව්ය ආදේශ කළ හැකිය. එය ශක්තිමත් (හරස් බ්රව්සරයක්!) ප්රවේශයක් වන අතර, මෙම ප්රශ්නයෙන් සොරකම් කරන ලද එවැනි ගැලපීම් සඳහා උදාහරණයක් මෙන්න :
.checkbox-custom {
opacity: 0;
position: absolute;
}
.checkbox-custom,
.checkbox-custom-label {
display: inline-block;
vertical-align: middle;
margin: 5px;
cursor: pointer;
}
.checkbox-custom + .checkbox-custom-label:before {
content: '';
display: inline-block;
background: #fff;
border-radius: 5px;
border: 2px solid #ddd;
vertical-align: middle;
width: 10px;
height: 10px;
padding: 2px;
margin-right: 10px;
text-align: center;
}
.checkbox-custom:checked + .checkbox-custom-label:before {
width: 1px;
height: 5px;
border: solid blue;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
border-radius: 0px;
margin: 0px 15px 5px 5px;
}
<div>
<input id="checkbox-1" class="checkbox-custom" name="checkbox-1" type="checkbox">
<label for="checkbox-1" class="checkbox-custom-label">First Choice</label>
</div>
<div>
<input id="checkbox-2" class="checkbox-custom" name="checkbox-2" type="checkbox">
<label for="checkbox-2" class="checkbox-custom-label">Second Choice</label>
</div>
මෙහි ලැයිස්තුගත කර ඇති සමහරක් වැනි එවැනි මෝස්තර පිළිබඳ තවත් ගැඹුරු ලිපි කියවීමට ඔබට අවශ්ය විය හැකිය ; එය මෙම පිළිතුරෙන් පරිබාහිර ය.
හරි, තවමත් අභිරුචි-රූප-හෝ ව්යාජ මූලද්රව්ය විසඳුමක් ගැන කුමක් කිව හැකිද?
TL; DR: මෙය ක්රියාත්මක නොවන බව පෙනේ, ඒ වෙනුවට අභිරුචි පිරික්සුම් කොටුව භාවිතා කරන්න
පළමුවෙන්ම, වෙනත් බ්රව්සර්වල පිරික්සුම් කොටුවේ නිරූපකය තුළ ඇති ව්යාජ ආන්තිකයන් අත්තනෝමතික නම්, ස්ථාවර විසඳුමක් නොමැති බව අපි සටහන් කරමු. එකක් තැනීම සඳහා, පවතින බ්රව්සර්වල එවැනි රූපවල ව්යුහ විද්යාව ගවේෂණය කළ යුතුය.
පිරික්සුම් කොටු වල ව්යාජ ආන්තිකයන් ඇති බ්රව්සර් මොනවාද? මම ක්රෝම් 75, විවාල්ඩි 2.5 (ක්රෝමියම් මත පදනම් වූ), ෆයර්ෆොක්ස් 54 (එවැනි යල් පැන ගිය ඇයිදැයි විමසන්න එපා), අයිඊ 11, එජ් 42, සෆාරි ?? (විනාඩියකට එකක් ණයට ගත්තා, අනුවාදය පරීක්ෂා කිරීමට අමතක විය). ක්රෝම් සහ විවාල්ඩි පමණක් එවැනි ව්යාජ ආන්තිකයන් ඇත (ඔපෙරා වැනි සියලුම ක්රෝමියම් මත පදනම් වූ බ්රව්සර් ද මම සැක කරමි).
එම ව්යාජ ආන්තිකයන්ගේ ප්රමාණය කුමක්ද? මෙය වටහා ගැනීමට කෙනෙකුට විශාලනය කළ පිරික්සුම් කොටුවක් භාවිතා කළ හැකිය:
input {
zoom: 10;
box-shadow: 0 0 1px inset #999;
}
<input type=checkbox>
මගේ ප්රති result ලය පළල / උසින්% 7% ක් වන අතර එබැවින් නිරපේක්ෂ ඒකක වලින් 0.9-1.0px වේ. නිරවද්යතාවය ප්රශ්න කළ හැකි වුවද: zoom
පිරික්සුම් කොටුව සඳහා විවිධ අගයන් උත්සාහ කරන්න . ක්රෝම් සහ විවාල්ඩි යන දෙකෙහිම මා කළ පරීක්ෂණ වලදී ව්යාජ ආන්තිකයේ සාපේක්ෂ ප්රමාණය zoom
10, 20 අගයන් හා 11-19 (??) අගයන්ට වඩා බෙහෙවින් වෙනස් ය :
scale
වඩා අනුකූල බව පෙනේ:
input {
transform: scale(10) translate(50%, 50%);
box-shadow: 0 0 1px inset #999;
}
<input type=checkbox>
එබැවින් බොහෝ විට ~ 14% සහ 2px නිවැරදි අගයන් වේ.
ව්යාජ ආන්තිකයේ ප්රමාණය (?) දැන් අප දන්නා බැවින් මෙය ප්රමාණවත් නොවන බව සලකමු. සියලුම බ්රව්සර් සඳහා පිරික්සුම් කොටුවේ අයිකනවල ප්රමාණය සමානද? අහෝ! අස්ථිර පිරික්සුම් කොටු සඳහා DOM පරීක්ෂක පෙන්වන දේ මෙන්න:
- ෆයර්ෆොක්ස්: 13.3px
- ක්රෝමියම් මත පදනම් වූ: සමස්ත දේ සඳහා 12.8px , එබැවින් දෘශ්ය ලෙස පිරික්සුම් කොටුව ලෙස පෙනෙන දේ සඳහා 12.8 (100% - 14%) = 11px
- IE 11, එජ්: 13px
- සෆාරි: n / a (මේවා එකම තිරයේ සැසඳිය යුතුය, මම විශ්වාස කරමි)
දැන් අපි විසඳුම් හෝ උපක්රම සාකච්ඡා කිරීමට පෙර විමසමු: නිවැරදි දේ කුමක්ද? පෙළගැස්මක් කුමක්ද? අප අත්කර ගැනීමට උත්සාහ කරන්නේ කුමක්ද? යම් තාක් දුරට එය රසය පිළිබඳ කාරණයකි, නමුත් මූලික වශයෙන් මට පහත දැක්වෙන “හොඳ” පෙළගැස්මේ අංශ ගැන සිතිය හැකිය:
පෙළ සහ පිරික්සුම් කොටුව එකම පාදම මත (මම හිතාමතාම මෙහි පිරික්සුම් කොටුවේ ප්රමාණය වෙනස් නොකරමි):
හෝ කුඩා අකුරු අනුව එකම මැද රේඛාවක් තිබිය යුතුය:
හෝ ලොකු අකුරු අනුව එකම මධ්යම රේඛාව (විවිධ අකුරු ප්රමාණය සඳහා වෙනස දැකීම පහසුය):
තවද, පිරික්සුම් කොටුවේ විශාලත්වය කුඩා අකුරක උසකට, ලොකු අකුරකට හෝ වෙනත් දෙයකට (විශාල, කුඩා හෝ කුඩා අකුරු සහ ප්රාග්ධනය අතර) සමාන විය යුතුද යන්න අප විසින් තීරණය කළ යුතුය.
මෙම සාකච්ඡාව සඳහා, පිරික්සුම් කොටුව පා text යට සමාන පදනමක් මත තිබේ නම් සහ ලොකු අකුරක ප්රමාණය (ඉහළ තර්ක කළ හැකි තේරීමක්) තිබේ නම්, පෙළගැස්මක් හොඳයි යැයි කියමු:
දැන් අපට තිබිය යුතු මෙවලම්:
- පිරික්සුම් කොටුවේ ප්රමාණය වෙනස් කරන්න
- ක්රෝමියම් එහි ව්යාජ ආන්තික පිරික්සුම් කොටුව සමඟ හඳුනාගෙන නිශ්චිත මෝස්තර සකසන්න
- පිරික්සුම් කොටුව / ලේබල් සිරස් පෙළගැස්ම සකසන්න
?
සම්බන්ධයෙන් කොටුව සලකුණු ප්රමාණය ගැලපුම් : ඇත width
, height
, size
, zoom
, scale
(මම හැමදාම යමක් ඉගෙනගන්නවා ඇත?). zoom
හා scale
ඔවුන් පමණක් පෙළ ප්රමාණය ගැසීට්රම්දී උදව් විය හැකි නිසා, හරස් වෙබ් බ්රව්සරය ප්රමාණය පිහිටුවා නැත (අප බ්රවුසරයට විශේෂිත නීති ලියන්න පුළුවන් නම්), නියත ප්රමාණය සකස් කිරීමට ඉඩ දෙන්නේ නැහැ. size
ක්රෝම් සමඟ ක්රියා නොකරයි (එය පැරණි අයිඊ සමඟ වැඩ කළාද? කෙසේ වෙතත් එය එතරම් සිත්ගන්නා සුළු නොවේ). width
සහ height
ක්රෝම් සහ වෙනත් බ්රව්සර් වල වැඩ කරන්න, එවිට අපට පොදු ප්රමාණයක් සැකසිය හැකිය, නමුත් නැවතත්, ක්රෝම් හි එය සකසන්නේ සම්පූර්ණ රූපයේ ප්රමාණය මිස පිරික්සුම් කොටුව නොවේ. සටහන: එය අවම (පළල, උස) වන අතර එය පිරික්සුම් කොටුවේ විශාලත්වය අර්ථ දක්වයි (පළල ≠ උස නම්, පිරික්සුම් කොටුවේ පිටත ප්රදේශය "ව්යාජ ආන්තිකයට" එකතු කරනු ලැබේ).
අවාසනාවන්ත දෙයක් නම්, මට පෙනෙන පරිදි, ක්රෝම් පිරික්සුම් කොටුවේ ව්යාජ ආන්තිකයන් කිසිදු පළලක් සහ උසකට ශුන්යයට සකසා නැත.
මේ දිනවල විශ්වාසදායක CSS පමණක් ක්රමයක් නොමැති බව මම බිය වෙමි .
සිරස් පෙලගැස්ම සලකා බලමු. ක්රෝම් හි ව්යාජ ආන්තිකයට vertical-align
සැකසූ විට middle
හෝ ස්ථාවර baseline
ප්රති results ල ලබා දිය නොහැක , සියලුම බ්රව්සර් සඳහා එකම “ඛණ්ඩාංක පද්ධතියක්” ලබා ගැනීමට ඇති එකම සැබෑ විකල්පය නම් ලේබලය සහ ආදානය පෙළගැස්වීම top
:
(පින්තූරයේ: සිරස්-පෙළගැස්වීම: කොටු-සෙවනැල්ල නොමැතිව ඉහළ, පහළ සහ පහළ)
ඉතින් මෙයින් අපට ලැබෙන ප්රති result ලය කුමක්ද?
input[type="checkbox"] {
height: 0.95em;
width: 0.95em;
}
label, input {
vertical-align: top;
}
<label><input type="checkbox">label</label>
ඉහත ස්නිපටය ක්රෝම් (ක්රෝමියම් මත පදනම් වූ බ්රව්සර්) සමඟ ක්රියා කරයි, නමුත් අනෙක් බ්රව්සර් සඳහා පිරික්සුම් කොටුවේ කුඩා ප්රමාණයක් අවශ්ය වේ. ක්රෝමියම් හි පිරික්සුම් කොටුවේ අනුරූප විචලනය වටා ක්රියා කරන ආකාරයට ප්රමාණය සහ සිරස් පෙලගැස්ම යන දෙකම සකස් කළ නොහැකි බව පෙනේ. මගේ අවසාන යෝජනාව නම්: ඒ වෙනුවට අභිරුචි පිරික්සුම් කොටු භාවිතා කරන්න - එවිට ඔබ කලකිරීමට පත් නොවනු ඇත :)