整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端需要知道的冷知識2 input - margin

          前端需要知道的冷知識2 input - margin重疊 - 大小寫 - 盒模型

          測試瀏覽器版本號——chrome 75.0.3770.80;opera 60.0.3255.109;firefox 67.0;ie 11。

          接上篇文章,我們繼續來講一些平常可能會用到但是又比較冷門的知識。

          一 input提示語句

          我們在使用input輸入框和textarea輸入框時,有時候需要給用戶一些提示,比如這個輸入框應該填寫的內容,有人說提前預設“value”不就可以了嗎?如果不是太摳細節,用“value”屬性實現也是可以,但是如果使用“value”做提示,用戶輸入的時候需要先把預設的值刪除,然后才能輸入。這樣做會使用戶體驗大打折扣。因此我們需要其他的方法來實現,這個時候“placeholder”屬性就派上用場啦!“placeholder”翻譯過來就是占位符的意思,我們通過給“placeholder”屬性賦值來占據位置。

          <!-- input提示語句 -->
          <input type="text" placeholder="請輸入用戶名">
          <input type="text" value="請輸入用戶名">
          

          以上面代碼為例,我們得到下圖的結果,點擊第一個輸入框,輸入提示光標在最左邊,輸入文字后提示性語句消失;點擊第二個輸入框,輸入提示光標接在“請輸入用戶名”后面,輸入文字其也不會消失,需要我們手動刪除。

          二 input[type="text"]輸入框兼容性

          都知道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時,他們之間的間距有時候會不等于兩個盒子的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的margin-bottom值改為-40px并將其他邊的margin值改為20px;
          2. 將第二個盒子和第四個盒子的margin-left值改為-20px;
          3. 將第三個盒子的margin-right值改為-20px;

          得到下圖的結果。審查元素發現:1. 豎直方向box-1和box-2的間距=-20px;2水平方向不存在規律

          再繼續修改代碼:

          1. 將box-2的margin-top值改為-20px;

          得到下圖的結果。審查元素發現:box-1和box-2的間距=-40px。

          綜上我們發現豎直方向是有規律的,但是水平方向沒有規律,為什么會出現這種情況呢?

          查閱W3C規范恍然大悟,里面的結論歸納一下是這樣的:

          1. 兩個相鄰的盒子margin值都是正數時,兩盒子間距=兩盒子較大的margin值

          2. 兩個相鄰的盒子margin值都是負數時,兩盒子間距=兩盒子較小的margin值

          3. 兩個相鄰的盒子margin值一正一負時,兩盒子間距=兩盒子margin值之和

          注意:根據W3C規范,以上結論有以下前提:

          1. margin必須相鄰且是豎直方向相鄰;
          2. 兩盒子必須處于普通文檔流(normal flow),
          3. 兩盒子父元素必須相同;
          4. 兩盒子必須都是塊級元素(不能是inline-block元素);

          四 字母大小寫

          有些情況我們需要單詞全部顯示大寫,例如文章大標題,按鈕提示詞等等,有的時候也需要全部小寫。為了避免誤輸入,我們可以設定當前元素的文本自動轉換大小寫,具體屬性值如下:

          <!--注意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來控制它的樣式。

          文本域標簽就介紹完了,大家一起動手實現一個吧。

          文章配套視頻「鏈接」


          單動畫1

          html源碼

          <div class="inputBox">
              <input class="effect-1" type="text" placeholder="Placeholder Text">
              <span class="focus-border"></span>
          </div>

          css源碼

          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;
          }


          表單動畫2

          html源碼

          <div class="inputBox">
              <input class="effect-2" type="text" placeholder="Placeholder Text">
              <span class="focus-border"></span>
          </div>

          css源碼

          .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;
          }



          表單動畫3

          html源碼

          <div class="inputBox">
              <input class="effect-3" type="text" placeholder="Placeholder Text">
              <span class="focus-border"></span>
          </div>

          css源碼

          .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;
          }

          搬你想搬,蓋你所需,碼字不易,且行且珍惜!


          主站蜘蛛池模板: eeuss鲁片一区二区三区| 精品人妻少妇一区二区| 免费视频一区二区| 日韩AV无码一区二区三区不卡| 精品人妻中文av一区二区三区| 国产无线乱码一区二三区| 精品久久久久一区二区三区| 国产福利电影一区二区三区| 三上悠亚日韩精品一区在线| 国产在线无码一区二区三区视频| 日本成人一区二区三区| 无码人妻AⅤ一区二区三区| 麻豆AV一区二区三区久久| 日韩中文字幕精品免费一区| 国内精品视频一区二区三区| 日本丰满少妇一区二区三区| 成人区精品一区二区不卡| 日韩一区二区久久久久久| 亚洲视频一区二区三区四区| 精品无码综合一区二区三区| 一区二区三区视频网站| 国产无线乱码一区二三区| 无码国产精品一区二区免费 | 国产精品无码一区二区在线观一| 国产精品主播一区二区| 夜夜添无码一区二区三区| 秋霞无码一区二区| 秋霞日韩一区二区三区在线观看| 动漫精品第一区二区三区| 最美女人体内射精一区二区| 精品国产a∨无码一区二区三区| 国产拳头交一区二区| 国模吧一区二区三区| 久久久无码精品人妻一区| av无码一区二区三区| 亚洲国产精品一区二区三区在线观看 | 日本高清不卡一区| 亚洲AV无码一区二区三区久久精品| 日本一区二区三区在线视频| 色欲AV蜜臀一区二区三区| 蜜桃视频一区二区三区|