Baseline Widely available
radio
ç±»åç <input>
å
ç´ é常ç¨äºä¸ä¸ªåéç»ä¸ï¼å
¶ä¸å
å«ä¸ç»æè¿°ä¸ç³»åç¸å
³é项çåéæé®ã
å¨ç»å®åéç»ä¸ï¼åæ¶åªå¯ä»¥éæ©ä¸ä¸ªé项ãåéæé®é常渲æä¸ºå°ååï¼å½éä¸è¯¥é项æ¶ï¼ååè¢«å¡«å æé«äº®ã
å°è¯ä¸ä¸<fieldset>
<legend>Select a maintenance drone:</legend>
<div>
<input type="radio" id="huey" name="drone" value="huey" checked />
<label for="huey">Huey</label>
</div>
<div>
<input type="radio" id="dewey" name="drone" value="dewey" />
<label for="dewey">Dewey</label>
</div>
<div>
<input type="radio" id="louie" name="drone" value="louie" />
<label for="louie">Louie</label>
</div>
</fieldset>
p,
label {
font:
1rem "Fira Sans",
sans-serif;
}
input {
margin: 0.4rem;
}
å®ä»¬è¢«ç§°ä¸ºåéæé®ï¼å 为å®ä»¬çå¤è§åæä½æ¹å¼ä¸è弿 线çµä¸çæé®ç±»ä¼¼ï¼å¦ä¸å¾æç¤ºã
夿³¨ï¼ å¤éæ¡ç±»ä¼¼äºåéæé®ï¼ä½æ¯æä¸ªéè¦çåºå«ââåéæé®ä¸ºéæ©éåä¸çå ¶ä¸ä¸é¡¹è设计ï¼ç¶èå¤éæ¡å 许å³å®å个å¼çé宿 åµãå½å¤ä¸ªæ§ä»¶å卿¶ï¼åéæé®å è®¸éæ©å ¶ä¸çä¸ä¸ªï¼èå¤éæé®å è®¸éæ©å ¶ä¸å¤ä¸ªã
å¼value
屿§æ¯å
å«è¯¥åéæé®å¼çå符串ãè¿ä¸ªå¼ä¸ä¼å¨ç¨æ·ä»£çæ¾ç¤ºï¼èæ¯ç¨äºè¾¨å«åéç»ä¸æéçåéæé®ã
ä¸ä¸ªåéæé®ç»ç±å
·æç¸å name
屿§çåéæé®ç»æã䏿¦åéæé®ç»è¢«å»ºç«ï¼éæ©é£æé®ç»çä»»ä½åéæé®å°ä¼èªå¨åæ¶åç»å½åéæ©ç任使é®ã
ä½ å¯ä»¥å¨ä¸ä¸ªé¡µé¢ä¸å建å¤ä¸ªåéæé®ç»ï¼åªè¦æ¯ä¸ç»æ¥æå¯ä¸ç name
屿§å³å¯ã
举个ä¾åï¼å¦æä½ éè¦å¨è¡¨åä¸è¯¢é®ç¨æ·çé¦éèç³»æ¹å¼ï¼ä½ å¯ä»¥å建ä¸ä¸ª name
屿§é½ä¸º contact
çåéæé®ï¼åªä¸è¿ä¸ä¸ªæé®ç value
屿§ä¸º email
ï¼å¦ä¸ä¸ªç value
屿§ä¸º phone
ï¼è¿æä¸ä¸ªç value
屿§ä¸º mail
ãç¨æ·ä¸ä¼çè§ value
屿§æ name
屿§ï¼é¤éä½ æ
æç¨ä»£ç æ¾ç¤ºå®ä»¬ï¼ã
æç»ç HTML å¯è½çèµ·æ¥åè¿æ ·ï¼
<form>
<fieldset>
<legend>è¯·éæ©é¦éçèç³»æ¹å¼ï¼</legend>
<div>
<input type="radio" id="contactChoice1" name="contact" value="email" />
<label for="contactChoice1">çµåé®ä»¶</label>
<input type="radio" id="contactChoice2" name="contact" value="phone" />
<label for="contactChoice2">çµè¯</label>
<input type="radio" id="contactChoice3" name="contact" value="mail" />
<label for="contactChoice3">é®ä»¶</label>
</div>
<div>
<button type="submit">æäº¤</button>
</div>
</fieldset>
</form>
ä½ å¯ä»¥å¨è¿éçå°ä¸ä¸ªåéæé®ï¼æ¯ä¸ªæé®ç name
屿§é½è®¾ç½®ä¸º contact
ï¼å¹¶ä¸é½å«æå¨åéæé®ç»ä¸å¯ä¸ç value
屿§ãæ¯ä¸ä¸ªåéæé®ä¹æä¸ä¸ªç» <label>
å
ç´ ç for
屿§ä½¿ç¨ç id
ï¼å°æ ç¾ï¼labelï¼ååéæé®å
³èã
ä½ å¯ä»¥å¨è¿éæ¥çè¿ä¸ªä¾åï¼
åéç»çæ°æ®è¡¨ç¤ºå½ä¸é¢ç表åå¨æäº¤æ¶éæ©äºä¸ä¸ªåéæ¡ï¼è¡¨åçæ°æ®å°±å
æ¬äº contact=value
项ãä¾å¦ï¼è¥ç¨æ·ç¹å»âçµè¯âåéæé®ï¼ç¶åæäº¤è¡¨åï¼æäº¤çæ°æ®ä¸å°å
æ¬ contact=phone
项ã
å¦æä½ å¨ HTML ä¸çç¥äº value
屿§ï¼é£ä¹æäº¤çè¡¨åæ°æ®å°±ä¼å°è¯¥å¼åé
å° on
ä¸ãå¨è¿ç§æ
åµä¸ï¼å¦æç¨æ·éä¸äºâçµè¯âé项并æäº¤äºè¡¨åï¼æäº¤çè¡¨åæ°æ®å°æ¯ contact=on
ï¼è¿å¹¶æ²¡æä»ä¹ç¨ãæä»¥å«å¿äºè®¾ç½®ä½ ç value
屿§ï¼
夿³¨ï¼ å¦æå¨æäº¤è¡¨åæ¶æ²¡æéæ©ä»»ä½åéæé®ï¼åæäº¤çè¡¨åæ°æ®ä¸æ ¹æ¬ä¸å æ¬åéç»ï¼å 为没æè¦æ¥åçå¼ã
卿²¡æéæ©ä»»ä½ä¸ç»åéæé®çæ åµä¸æäº¤è¡¨åçæ åµå¹¶ä¸å¤è§ï¼æä»¥éå¸¸ææºçåæ³æ¯è®©ä¸ä¸ªåéæé®é»è®¤ä¸ºâéä¸âç¶æãåè§ä¸é¢çé»è®¤éæ©åéæé®ã
让æä»¬ç»æä»¬çä¾åæ·»å ä¸ç¹ä»£ç ï¼è¿æ ·æä»¬å°±å¯ä»¥æ£æ¥è¿ä¸ªè¡¨åæäº§ççæ°æ®ã对 HTML è¿è¡ä¿®æ¹ï¼å¢å ä¸ä¸ª <pre>
åï¼å°è¡¨åæ°æ®è¾åºå°å
¶ä¸ï¼
<form>
<fieldset>
<legend>è¯·éæ©é¦éçèç³»æ¹å¼ï¼</legend>
<div>
<input type="radio" id="contactChoice1" name="contact" value="email" />
<label for="contactChoice1">çµåé®ä»¶</label>
<input type="radio" id="contactChoice2" name="contact" value="phone" />
<label for="contactChoice2">çµè¯</label>
<input type="radio" id="contactChoice3" name="contact" value="mail" />
<label for="contactChoice3">é®ä»¶</label>
</div>
<div>
<button type="submit">æäº¤</button>
</div>
</fieldset>
</form>
<pre id="log"></pre>
ç¶åæä»¬æ·»å ä¸äº JavaScript 代ç ï¼è®¾ç½®çå¬ submit
äºä»¶ççå¬å¨ï¼å½ç¨æ·ç¹å»âæäº¤âæé®æ¶ä¼è§¦å该äºä»¶ï¼
const form = document.querySelector("form");
const log = document.querySelector("#log");
form.addEventListener(
"submit",
(event) => {
const data = new FormData(form);
let output = "";
for (const entry of data) {
output = `${output}${entry[0]}=${entry[1]}\r`;
}
log.innerText = output;
event.preventDefault();
},
false,
);
è¯è¯è¿ä¸ªä¾åï¼ä¼åç° contact
ç»çè¾åºç»ææ°¸è¿ä¸ä¼å¤äºä¸ä¸ªã
é¤äºææ <input>
å
ç´ å
±éç屿§å¤ï¼radio
è¾å
¥è¿æ¯æä»¥ä¸å±æ§ï¼
checked
ä¸ä¸ªå¸å°å¼å±æ§ï¼å¦æåºç°ï¼ä»£è¡¨è¿ä¸ªåéæé®æ¯ç»ä¸è¢«éä¸çé£ä¸ªã
ä¸åå
¶ä»æµè§å¨é£æ ·ï¼Firefox é»è®¤å¨ä¸å页é¢ä¹é´ä¿æäº <input>
卿鿩çç¶æãä½¿ç¨ autocomplete
屿§æ¥æ§å¶è¿ä¸ªç¹æ§ã
value
value
屿§æ¯ææ <input>
å
ç´ å
±æç屿§ä¹ä¸ï¼ç¶èï¼å¯¹äº radio
ç±»åçè¾å
¥ï¼æç¹æ®ç¨éï¼å½è¡¨åæäº¤æ¶ï¼åªæå½åéå®çåéæé®æä¼æäº¤å°æå¡å¨ï¼å¹¶ä¸æ¥åçå¼ä¸º value
屿§çå¼ãå¦ææ²¡ææå® value
ï¼é»è®¤ä¸ºå符串 on
ãè¿ä¸ªè¡ä¸ºå·²ç»å¨å¼è¿ä¸èä¸æè¿°ã
required
required
屿§æ¯ææ <input>
å
ç´ å
±æç屿§ä¹ä¸ã妿嫿ç¸å name çåéæé®ç»ä¸ä»»æä¸ä¸ªæé®å
å« required
屿§ï¼é£ä¹è¯¥ç»çåéæé®å¿
须被éå®ï¼å³ä½¿å®å¹¶ä¸éè¦åºç¨è¯¥å±æ§ã
æä»¬å·²ç»è¯´æäºåéæé®çåºæ¬ä½¿ç¨ï¼ç°å¨æ¥ççå ¶ä»ä½ å¯è½éè¦ç¥éçä¸åéæé®ç¸å ³çç¹æ§åææ¯ã
é»è®¤éæ©åéæé®ä¸ºäºè®©åéæé®é»è®¤è¢«éæ©ï¼éè¦å
å« checked
屿§ï¼å°±åè¿ä¸ªä¿®æ¹è¿ç示ä¾ä¸æ ·ï¼
<form>
<fieldset>
<legend>è¯·éæ©é¦éçèç³»æ¹å¼ï¼</legend>
<div>
<input
type="radio"
id="contactChoice1"
name="contact"
value="email"
checked />
<label for="contactChoice1">çµåé®ä»¶</label>
<input type="radio" id="contactChoice2" name="contact" value="phone" />
<label for="contactChoice2">çµè¯</label>
<input type="radio" id="contactChoice3" name="contact" value="mail" />
<label for="contactChoice3">é®ä»¶</label>
</div>
<div>
<button type="submit">æäº¤</button>
</div>
</fieldset>
</form>
å¨è¿ä¸ªç¤ºä¾ä¸ï¼ç¬¬ä¸ä¸ªåéæé®é»è®¤æ¯éæ©ç¶æã
夿³¨ï¼ å¦æä½ å¨å¤äºä¸ä¸ªåéæé®ä¸æå®äº checked
屿§ï¼åé¢çå®ä¾å°è¦çåé¢çå®ä¾ï¼ä¹å°±æ¯è¯´ï¼æåä¸ä¸ªå
å« checked
屿§çåéæé®æ¯å½åéæ©çæé®ãè¿æ¯å 为ä¸ä¸ªåéæé®ç»åªè½åæ¶éåä¸ä¸ªåéæé®ï¼ç¨æ·ä»£çä¼å¨éæ©æ°çåéæé®æ¶èªå¨åæ¶éæ©å
¶ä»åéæé®ã
å¨å述示ä¾ä¸ï¼ä½ å¯è½ä¼æ³¨æå°ï¼å¯ä»¥éè¿ç¹å»å
¶å
³èç <label>
å
ç´ æ¥éåä¸ä¸ªåéæé®ï¼ä¸éååéæé®æ¬èº«è¡¨ç°ä¸è´ãè¿æ¯ HTML è¡¨åæ ç¾çä¸ä¸ªæç¨çç¹æ§ï¼ä½¿ç¨æ·æ´å®¹æç¹å»ä»ä»¬æ³è¦çé项ï¼ç¹å«æ¯å¨æºè½ææºçå°å±å¹è®¾å¤ä¸ã
é¤äºæ éç¢ä¹å¤ï¼è¿ä¹æ¯å¨è¡¨å䏿£ç¡®è®¾ç½® <label>
å
ç´ çå¦ä¸ä¸ªå¥½çç±ã
åéæé®ä¸åä¸çº¦æéªè¯ï¼å®ä»¬æ²¡æçæ£çå¼å¯ä¾çº¦æã
为åéæé®æ·»å æ ·å¼ä¸é¢çç¤ºä¾æ¾ç¤ºäºæä»¬å¨æç« 䏿çå°çä¾åçä¸ä¸ªç¨å¾®å½»åºççæ¬ï¼æä¸äºé¢å¤çæ ·å¼ï¼å¹¶ä¸éè¿ä½¿ç¨ä¸é¨çå ç´ å»ºç«äºæ´å¥½çè¯ä¹ãHTML 代ç çèµ·æ¥åè¿æ ·ï¼
<form>
<fieldset>
<legend>è¯·éæ©é¦éçèç³»æ¹å¼ï¼</legend>
<div>
<input
type="radio"
id="contactChoice1"
name="contact"
value="email"
checked />
<label for="contactChoice1">çµåé®ä»¶</label>
<input type="radio" id="contactChoice2" name="contact" value="phone" />
<label for="contactChoice2">çµè¯</label>
<input type="radio" id="contactChoice3" name="contact" value="mail" />
<label for="contactChoice3">é®ä»¶</label>
</div>
<div>
<button type="submit">æäº¤</button>
</div>
</fieldset>
</form>
è¿ä¸ªç¤ºä¾ä¸æ¶åå°ç CSS æ ·å¼å°±æ¯è¾éè¦ï¼
html {
font-family: sans-serif;
}
div:first-of-type {
display: flex;
align-items: flex-start;
margin-bottom: 5px;
}
label {
margin-right: 15px;
line-height: 32px;
}
input {
appearance: none;
border-radius: 50%;
width: 16px;
height: 16px;
border: 2px solid #999;
transition: 0.2s all linear;
margin-right: 5px;
position: relative;
top: 4px;
}
input:checked {
border: 6px solid black;
}
button,
legend {
color: white;
background-color: black;
padding: 5px 10px;
border-radius: 0;
border: 0;
font-size: 14px;
}
button:hover,
button:focus {
color: #999;
}
button:active {
background-color: white;
color: black;
outline: 1px solid black;
}
è¿éæå¼å¾æ³¨æçæ¯ appearance
屿§ç使ç¨ï¼ä¸ºäºæ¯ææäºæµè§å¨ï¼éè¦å åç¼ï¼ãé»è®¤æ
åµä¸ï¼åéæé®ï¼åå¤éæ¡ï¼çæ ·å¼ä½¿ç¨äºæä½ç³»ç»å¯¹è¿äºæ§ä»¶çæ¬å°æ ·å¼ãéè¿æå® appearance: none
ï¼ä½ å¯ä»¥å®å
¨å 餿¬å°æ ·å¼ï¼å¹¶ä¸ºå®ä»¬å建èªå·±çæ ·å¼ãè¿éæä»¬ä½¿ç¨äº border
å border-radius
ï¼ä»¥å transition
æ¥å建ä¸ä¸ªæ¼äº®ç带å¨ç»åéã请注æ :checked
伪类æ¯å¦ä½ç¨æ¥æå®åéæé®è¢«é䏿¶çå¤è§æ ·å¼çã
夿³¨ï¼ å¦æä½ æ³ä½¿ç¨ appearance
屿§ï¼ä½ éè¦å°å¿æµè¯ãå³ä½¿å¤§å¤æ°æµè¡æµè§å¨é½æ¯æå®ï¼å®çå®ç°ååå¾å¹¿ãå¨è弿µè§å¨ä¸ï¼å³ä½¿æ¯å
³é®å none
ï¼ä¸åæµè§å¨ä¹é´å·®å¼ä¹å¾å¤§ï¼æäºæµè§å¨æ ¹æ¬ä¸æ¯æã卿°çæµè§å¨ä¸ï¼å·®å«å°±ä¼å°å¾å¤ã
注æï¼å½ç¹å»åéæé®æ¶ï¼æä¸ä¸ªæµç çæ¸å ¥ãæ¸åºææï¼æ¤å¤ï¼å¾ä¾åæäº¤æé®ç飿 ¼åé¢è²é½æ¯èªå®ä¹çï¼å ·æå¼ºçç对æ¯ãè¿å¯è½ä¸æ¯ä½ å¨çæ£ç web åºç¨ä¸æ³è¦çå¤è§ï¼ä½å®å±ç¤ºäºå®ç°çå¯è½æ§ã
ææ¯æ»ç» è§è æµè§å¨å ¼å®¹æ§ åè§<input>
åå®ç°å®ç HTMLInputElement
æ¥å£ãRadioNodeList
ï¼æè¿°ä¸ç³»ååéæé®çæ¥å£RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4