HTML有一個設計問題,我認爲,由此形式輸入元件是不一致type
<input />
(checkbox
,text
等)或都是自己的單元類型(select
,textarea
等)的。我知道它是基於元素對子元素的需求與否(<select>
和<textarea>
有孩子,但<input />
沒有),但不同類型的<input />
會導致截然不同的呈現效果 - 例如,checkbox
和radio
通常呈現爲一個小的可點擊的平方共享輸入,而text
和password
是沒有指定寬度的矩形。有沒有一種簡單的方法來選擇所有的HTML表單輸入元素而不重複規則選擇器?
這意味着如果你是造型輸入,你會需要需要多重規則。
鑑於此HTML:
<div class="field">
<label>
<input type="checkbox" /> Option 1
</label>
<label>
<input type="checkbox" /> Option 2
</label>
</div>
<div class="field">
A question?
<label>
<input type="radio" /> Option 1
</label>
<label>
<input type="radio" /> Option 2
</label>
</div>
<div class="field">
<label>
Your name
<input type="text" />
</label>
</div>
<div class="field">
<label>
An essay
<textarea></textarea>
</label>
</div>
如果你想樣式僅文本輸入框,你可能會認爲你只需要:
input,
textarea {
border: 1px inset green;
}
然而,這也將(不當)樣式的radio
和checkbox
輸入,因此您需要輸入input
的樣式,然後爲input[type=radio]
和input[type=checkbox]
添加新規則,以重新設計它們以匹配您的設計或重新設置其風格 - 或更改rul e匹配input[type=text]
。
但也不是完美的,因爲輸入規則仍然沒有對其他類型的input
指定樣式:這些文本框爲藍本(如password
和email
),或那些沒有(color
,image
,file
等)。除了所有其他表單元素(例如select
,textarea
,button
等)外,您還需要爲每種類型添加一條規則,然後您需要重複這些選擇器每種情況下,風格需要在一個新的環境不同:
input[type=text],
input[type=password],
input[type=search],
input[type=tel],
input[type=url],
input[type=email],
textarea {
border: 1px inset green;
}
input[type=radio],
input[type=checkbox] {
border: none;
}
.someWrapper input[type=text],
.someWrapper input[type=password],
.someWrapper input[type=search],
.someWrapper input[type=tel],
.someWrapper input[type=url],
.someWrapper input[type=email],
.someWrapper textarea {
border: 1px inset green;
}
.someWrapper input[type=radio],
.someWrapper input[type=checkbox] {
border: none;
}
/* etc */
不過,我覺得有很多的投入可分爲「輸入類」,如「文字輸入」類:text
,password
,textarea
,email
,search
等 - 「框輸入」類:checkbox
,radio
,「日期」類:date
,datetime
, month
等,等等。
因此,而不是手動添加這些類如class
值到我在HTML輸入,是否有任何瀏覽器的固有方式,諸如通過CSS僞類,例如input:textbox
或input:boxinput
?如果是這樣,這將大大簡化表單的CSS選擇器,並減少缺少選擇器的CSS錯誤。
你上市將是「文字輸入」類的一部分,「日期」類。支持它們的瀏覽器會添加額外的UI,但將其基於標準文本輸入字段。另外,不支持新的HTML5輸入類型的瀏覽器將把它們全部渲染爲默認文本框。但是,不,CSS中沒有通用的「文本框類型輸入域」選擇器。 – Adrian
爲什麼你甚至需要包裝?難道你不能只創建一個表單字段類,其中所有的用戶輸入都具有「form-field」類嗎? – Adjit
@Adjit是的,但我想知道是否有辦法做到這一點,而不改變我的HTML來添加額外的'class'屬性值。 – Dai