:測試瀏覽器版本號——chrome 75.0.3770.80;opera 60.0.3255.109;firefox 67.0;ie 11。
接上篇文章,我們繼續來講一些平常可能會用到但是又比較冷門的知識。
我們在使用input輸入框和textarea輸入框時,有時候需要給用戶一些提示,比如這個輸入框應該填寫的內容,有人說提前預設“value”不就可以了嗎?如果不是太摳細節,用“value”屬性實現也是可以,但是如果使用“value”做提示,用戶輸入的時候需要先把預設的值刪除,然后才能輸入。這樣做會使用戶體驗大打折扣。因此我們需要其他的方法來實現,這個時候“placeholder”屬性就派上用場啦!“placeholder”翻譯過來就是占位符的意思,我們通過給“placeholder”屬性賦值來占據位置。
<!-- input提示語句 --> <input type="text" placeholder="請輸入用戶名"> <input type="text" value="請輸入用戶名">
以上面代碼為例,我們得到下圖的結果,點擊第一個輸入框,輸入提示光標在最左邊,輸入文字后提示性語句消失;點擊第二個輸入框,輸入提示光標接在“請輸入用戶名”后面,輸入文字其也不會消失,需要我們手動刪除。
都知道input輸入框是能輸入一行文字,input內文字始終在content內上下居中。但是這里有個例外,在ie(本例版本為ie11)中,當content的高度<文字的line-height時,文字不上下居中。
以下面代碼為例
<input type="text" style="width:200px;height:10px;padding: 20px;border: 1px solid #000;line-height: 30px" placeholder="我是test文字">
得到結果如下圖。我們發現在ie中文字會根據自己行高來判斷自己的位置。這點在做兼容的時候需要特別注意。
解決方案是設置input的content高度>=line-height。
大家一定有過這樣的體驗,當兩個相鄰的盒子都有margin時,他們之間的間距有時候會不等于兩個盒子的margin之和。為什么會出現這種情況呢?以下面代碼為例,box-1和box-2都有外邊距且外邊距不一樣。
/* css樣式 */ html,body { margin: 0; padding: 0; } .box-1 { margin:40px; border: 1px solid #000; background: skyblue; } .box-2 { margin:20px; border: 1px solid #000; background: skyblue; } .in-1{ display: inline-block; width: 200PX; height: 100px; border: 1px solid red; margin: 20px; background: yellowgreen; } <!-- margin重疊 --> <div class="box-1"> <div class="in-1"> 第一個盒子 </div> <div class="in-1"> 第二個盒子 </div> </div> <div class="box-2"> <div class="in-1"> 第三個盒子 </div> <div class="in-1"> 第四個盒子 </div> </div>
得到結果如下圖。我們發現:1. 豎直方向box-1和box-2之間的間距為40px(兩盒子中較大的margin值)而不是60px(兩盒子margin值之和);2. 水平方向第一個盒子和第二個盒子之間的間距為40px(兩盒子margin值之和)。
我們得到結論:水平方向兩盒子間距=兩盒子margin值之和;豎直方向兩盒子間距=max(盒子1margin值,盒子2margin值)。
上面的結論真的正確的嗎???
我們知道margin還可以取負值,如果按照上面的結論,假設兩個盒子的margin值一個是負值,一個是正值,那么他們之間的間距一定是正值的數值。為了驗證上述猜測的正確性,我們將上面的例子做以下修改:
得到下圖的結果。審查元素發現:1. 豎直方向box-1和box-2的間距=-20px;2水平方向不存在規律
再繼續修改代碼:
得到下圖的結果。審查元素發現:box-1和box-2的間距=-40px。
綜上我們發現豎直方向是有規律的,但是水平方向沒有規律,為什么會出現這種情況呢?
查閱W3C規范恍然大悟,里面的結論歸納一下是這樣的:
1. 兩個相鄰的盒子margin值都是正數時,兩盒子間距=兩盒子較大的margin值
2. 兩個相鄰的盒子margin值都是負數時,兩盒子間距=兩盒子較小的margin值
3. 兩個相鄰的盒子margin值一正一負時,兩盒子間距=兩盒子margin值之和
注意:根據W3C規范,以上結論有以下前提:
有些情況我們需要單詞全部顯示大寫,例如文章大標題,按鈕提示詞等等,有的時候也需要全部小寫。為了避免誤輸入,我們可以設定當前元素的文本自動轉換大小寫,具體屬性值如下:
<!--注意full-width兼容性很差,一般不使用--> text-transform: none(默認不改變) | capitalize(首字母大寫) | uppercase(全部大寫) | lowercase(全部小寫) | full-width(全寬度);
以下面代碼為例。
<p>tEst enGlish</p> <p style="text-transform: none">tEst enGlish</p> <p style="text-transform: capitalize">tEst enGlish</p> <p style="text-transform: uppercase">tEst enGlish</p> <p style="text-transform: lowercase">tEst enGlish</p> <p style="text-transform: full-width">tEst enGlish</p>
得到結果如下圖。
之前的學習我們了解了標準盒模型(box-sizing=content-box)和怪異盒模型(box-sizing=border-box)兩種。兩種模型的用途各不相同,沒有優劣之分。我們的困惑是為什么有時候設置的width是content的width,而有時候是border+padding+content的width呢?下面我們來講一講html常見元素默認的盒模型類型。
方法很簡單,利用chrome的調試工具中的“computed”查看元素box-sizing屬性的值。在四個實驗瀏覽器檢查下面兩圖中的塊級元素和行內元素發現只有selcet元素默認的盒模型是怪異盒模型(box-sizing=border-box),其他元素默認的盒模型均為標準盒模型(box-sizing=content-box)。
節課,我們學習表單的多行文本框控件。
多行文本框控件,也稱文本域控件。生活中多行文本框隨處可見,例如:在線簡歷中的個人優勢區域;在線問卷調查中的個人觀點和看法區域;流調信息表中的詳細地址,都使用到了多行文本輸入框。
多行文本框相對于單行文本框而言,允許用戶輸入多行文本。文本觸達右側邊界后會自動折行;文本超出底部邊界后會產生滾動條,可以滾動鼠標滾輪查看完整的輸入信息。
在HTML中如何實現多行文本框呢?
可以通過在 form 標簽內,嵌套 textarea 標簽來實現。這里的 text 譯為文本,area譯為區域,textarea 連起來就是文本域的意思。
textarea 是一個雙標簽,基本語法格式為:<textarea>文本</textarea>,文本需要放在標簽對內部。
打開編輯器,新建一個 textarea.html 文件,自動補全基礎代碼,在 body 標簽內部編寫一個 form 表單標簽,在 form 標簽里面添加文本 "請填寫詳細地址:" ,緊鄰文本后面添加一個 textarea 標簽。保存。
用瀏覽器打開頁面,一個多行文本輸入框就做好了。點擊多行文本輸入框,向里面輸入文本,當輸入的文本觸達多行文本框右側的時候,文本自動換到下一行,一直輸入,文本溢出后,文本框會出現滾動條。窗口太小看不到,也可以鼠標拖拽,縮放窗口。
事實上,textarea, 多行文本輸入框,是可以設置顯示區域的寬度和高度的。
使用 cols 屬性,cols 是 columns 的縮寫,用來指定一個文本區的可見寬度,值是個數字。使用 rows 屬性,用來指定一個文本區域中的可見行數,值也是數字。
回到編輯器,在 textarea 標簽上定義 cols 等于 "10" (cols="10") rows 等于 "3" (rows="3")。實現多行文本框的可見大小為 3 行 10 列。保存。
回到瀏覽器,刷新,多行文本輸入框的寬度和高度發生了改變。向框內再次輸入數字 "0123456789",當你輸入到 9 的時候,你會發現數字 9 后面與留白位置還可以繼續輸入。
不要著急,咱們繼續輸入,隨著內容的不斷增加,行數也越來越多,同時右側會隨之會產生一個滾動條,在滾動條產生的那一瞬間,我們發現,滾動條是占位置的。
雖然通過 cols 和 rows 能控制可見寬高,但在實際開發項目時,為了美觀和輸入文本的多樣性,一般會通過CSS來控制它的樣式。
文本域標簽就介紹完了,大家一起動手實現一個吧。
文章配套視頻「鏈接」
<div class="inputBox">
<input class="effect-1" type="text" placeholder="Placeholder Text">
<span class="focus-border"></span>
</div>
inputBox class類用于布局,就是一個input容器,便于觀看,我這里設置每一行分為3個列(可根據自己需求設置)。
.inputBox {
float: left;
width: 27.33%;
margin: 40px 3%;
position: relative;
}
然后為input元素設置一些通用樣式。
input[type="text"]{
font: 15px/24px "Lato", Arial, sans-serif;
color: #333;
width: 100%;
box-sizing: border-box;
letter-spacing: 1px;
}
:focus{
outline: none;
}
effect-1 class類就代表這不同的input表單獲取焦點的動畫樣式種類, effect-1就代表第一種,以此類推。
.focus-border是輸入框聚焦后的邊框樣式。它采用絕對單位,位置在輸入框的左下角位置,高度為2像素,開始時寬度被設置為0,不可見。并設置了0.4秒的過渡動畫效果。
當輸入框聚焦時以及在輸入框中有內容時,將.focus-border的寬度設置為100%。
.effect-3{
border: 0;
padding: 7px 0;
border-bottom: 1px solid #ccc;
}
.effect-1 ~ .focus-border{
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 2px;
background-color: #3399FF;
transition: 0.4s;
}
.effect-1:focus ~ .focus-border{
width: 100%;
transition: 0.4s;
}
<div class="inputBox">
<input class="effect-2" type="text" placeholder="Placeholder Text">
<span class="focus-border"></span>
</div>
.effect-2{
border: 0;
padding: 7px 0;
border-bottom: 1px solid #ccc;
}
.effect-2 ~ .focus-border{
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 2px;
background-color: #3399FF;
transition: 0.4s;
}
.effect-2:focus ~ .focus-border{
width: 100%;
transition: 0.4s;
left: 0;
}
<div class="inputBox">
<input class="effect-3" type="text" placeholder="Placeholder Text">
<span class="focus-border"></span>
</div>
.effect-3{
border: 0;
padding: 7px 0;
border-bottom: 1px solid #ccc;
}
.effect-3 ~ .focus-border{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 2px;
z-index: 99;
}
.effect-3 ~ .focus-border:before,
.effect-3 ~ .focus-border:after{
content: "";
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 100%;
background-color: #3399FF;
transition: 0.4s;
}
.effect-3 ~ .focus-border:after{
left: auto;
right: 0;
}
.effect-3:focus ~ .focus-border:before,
.effect-3:focus ~ .focus-border:after{
width: 50%;
transition: 0.4s;
}
搬你想搬,蓋你所需,碼字不易,且行且珍惜!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。