在很多web或者app頁(yè)面中,我們可以看到各種各樣的輸入框,從外觀上看它們可以直觀的看做是input元素,但是實(shí)際上并非如此。我們可以通過(guò)別的標(biāo)簽去模擬input標(biāo)簽的效果,今天我們就來(lái)看看如何使用div標(biāo)簽?zāi)Minput標(biāo)簽的效果。
div+css
這里我們用ofo的主頁(yè)面作為例子,在點(diǎn)擊下面數(shù)字的時(shí)候,數(shù)字的內(nèi)容會(huì)出現(xiàn)在輸入框內(nèi),這個(gè)輸入框就是用div模擬實(shí)現(xiàn)的。
當(dāng)然頁(yè)面內(nèi)容是靜態(tài)的,只是一個(gè)簡(jiǎn)單的html,我們來(lái)看下實(shí)現(xiàn)后的效果。如果感興趣的可以直接去github上去看看,源碼地址:
https://github.com/zhouxiongking/article-pages/tree/master/articles/divToInput
實(shí)現(xiàn)效果
這里我們定義一個(gè)顯示內(nèi)容的div來(lái)模擬input,其css樣式如下。
css樣式
我們使用:before偽元素來(lái)裝載輸入的內(nèi)容,在:before元素中使用content屬性來(lái)動(dòng)態(tài)的元素的屬性值。
使用:before偽元素
在input標(biāo)簽中,如果input元素獲取焦點(diǎn)后,在input元素內(nèi)會(huì)有光標(biāo)在閃爍,這個(gè)效果我們可以通過(guò):after偽元素來(lái)實(shí)現(xiàn)。
我們會(huì)用到動(dòng)畫(huà)animation的知識(shí),首先定義一個(gè)動(dòng)畫(huà)效果,利用opacity屬性來(lái)控制顯示與不顯示,從而造成閃爍效果。
定義閃爍動(dòng)作
然后在:after偽元素中使用。
:after偽元素
在設(shè)置好div效果后,需要在點(diǎn)擊下面的數(shù)字時(shí),將值顯示在div中,這就需要用到Javascript去控制。
首先獲取頁(yè)面上所有存在動(dòng)作的元素。
獲取元素
然后給數(shù)字和刪除元素分別添加對(duì)應(yīng)的事件。
元素綁定事件
綁定事件后,在點(diǎn)擊數(shù)字時(shí)會(huì)將值動(dòng)態(tài)的顯示在div中,在刪除時(shí)也會(huì)相應(yīng)刪掉最后一個(gè)添加的元素值。
對(duì)于整個(gè)頁(yè)面的設(shè)計(jì),采用了header,div和footer的布局。
header和div的html部分代碼如下。
header與div
相應(yīng)的footer部分代碼如下,其主要采用的是table布局,相對(duì)簡(jiǎn)單實(shí)用。
footer部分
至此,整個(gè)頁(yè)面的實(shí)現(xiàn)就講解完畢了,中間有很多的css樣式部分我并沒(méi)有放出來(lái),感興趣的可以自行去github上clone下來(lái)看看。
今天這篇文章主要以ofo主頁(yè)面實(shí)現(xiàn)來(lái)講解了一下如何使用div來(lái)模擬input的效果,你有收獲嗎
例最終效果如下:
一、設(shè)置整個(gè)網(wǎng)頁(yè)的背景色
圖1
圖2
二、創(chuàng)建一個(gè)盒子,讓其水平居中,距離上邊200像素。
圖3
圖4
三、把盒子設(shè)置四個(gè)角為圓角,圓10個(gè)像素。
圖5
圖6
四、在大盒子里做一個(gè)ding盒子,設(shè)置它上面兩個(gè)角是圓角,下面兩個(gè)角是直角。
圖7
圖8
五、ding盒子里輸入幾個(gè)字,讓這幾個(gè)字在盒子里水平居中,垂直居中,關(guān)于盒子內(nèi)居中問(wèn)題可參看我寫(xiě)的文【203】。
圖9
圖10
六、在deng盒子里面再做三個(gè)小盒子,取名為ref,注意如果這三個(gè)盒子不用浮動(dòng),會(huì)有什么效果,這個(gè)你可以試試看。
圖11
圖12
七、往ref盒子里面添加信息,發(fā)下圖,這里順便學(xué)習(xí)兩個(gè)標(biāo)簽,一個(gè)是input,一個(gè)是button。
圖13
圖14
八、去掉背景色,然后用盒子內(nèi)居中的方法,讓這些元素居中。
圖15
圖16
九、通過(guò)樣式,設(shè)置按鈕的大小和字的大小,這里我特地用id來(lái)給元素上名字,不同于class,在樣式里調(diào)用的時(shí)候,一個(gè)是前面加.一個(gè)是前面加#。
圖17
圖18
十、最后設(shè)置一下密碼輸入框,輸入內(nèi)容時(shí)為密碼隱藏符號(hào)。
圖19
圖20
網(wǎng)頁(yè)制作過(guò)程中,布局是我們最重要的一個(gè)環(huán)節(jié)??梢哉f(shuō)布局的好壞直接影響到整個(gè)網(wǎng)頁(yè)的成敗!布局成則事半功倍;布局?jǐn)?,則事倍功半。 隨著移動(dòng)互聯(lián)的到來(lái),響應(yīng)式網(wǎng)站風(fēng)靡。這也就興起了一種新興的布局方式——彈性布局。取代我們之前“display+float+position”的布局形式,采用全新的彈性布局,會(huì)讓你的網(wǎng)站如絲般順滑! 今天,就讓我們一起來(lái)學(xué)習(xí)一下彈性布局,讓我們用5個(gè)div玩轉(zhuǎn)彈性布局吧~
彈性布局,又稱(chēng)“Flex布局”,是由W3C大哥于2009年推出的一種布局方式??梢院?jiǎn)便、完整、響應(yīng)式地實(shí)現(xiàn)各種頁(yè)面布局。而且已經(jīng)得到所有主流瀏覽器的支持,我們可以放心大膽的使用。
>>> 了解兩個(gè)基本概念,接下來(lái)會(huì)頻繁提到:
① 容器: 需要添加彈性布局的父元素;
② 項(xiàng)目: 彈性布局容器中的每一個(gè)子元素,稱(chēng)為項(xiàng)目;
>>> 了解兩個(gè)基本方向,這個(gè)牽扯到彈性布局的使用:
① 主軸: 在彈性布局中,我們會(huì)通過(guò)屬性規(guī)定水平/垂直方向?yàn)橹鬏S;
② 交叉軸: 與主軸垂直的另一方向,稱(chēng)為交叉軸。
<div id="div">
<div class="div1">1</div>
<div class="div2">2</div>
<div class="div3">3</div>
<div class="div4">4</div>
</div>
#div{
width: 400px;
height: 400px;
background-color: yellow;
display: flex;
}
#div div{
width: 100px;
height: 100px;
background-color: blue;
color: white;
font-size: 30px;
}
五個(gè)簡(jiǎn)單的div,只給父容器添加了display: flex;屬性,就可以讓容器內(nèi)部打破原有文檔流模式,展現(xiàn)為彈性布局。
簡(jiǎn)單的了解一下彈性布局后,我們來(lái)詳解一下配合“display: flex;”使用的12大屬性。其中,12個(gè)屬性分為兩類(lèi),6個(gè)作用于父容器,6個(gè)作用于子項(xiàng)目。
nowrap(默認(rèn)):不換行。當(dāng)容器寬度不夠時(shí),每個(gè)項(xiàng)目會(huì)被擠壓寬度;
wrap: 換行,并且第一行在容器最上方;
wrap-reverse: 換行,并且第一行在容器最下方。
>>> 此屬性與主軸方向息息相關(guān)。
主軸方向?yàn)椋簉ow-起點(diǎn)在左邊,row-reverse-起點(diǎn)在右邊, column-起點(diǎn)在上邊,column-reverse-起點(diǎn)在下邊
flex-start(默認(rèn)值): 項(xiàng)目位于主軸起點(diǎn)。
flex-end:項(xiàng)目位于主軸終點(diǎn)。
center: 居中
space-between:兩端對(duì)齊,項(xiàng)目之間的間隔都相等。(開(kāi)頭和最后的項(xiàng)目,與父容器邊緣沒(méi)有間隔)
space-around:每個(gè)項(xiàng)目?jī)蓚?cè)的間隔相等。所以,項(xiàng)目之間的間隔比項(xiàng)目與邊框的間隔大一倍。(開(kāi)頭和最后的項(xiàng)目,與父容器邊緣有一定的間隔)
flex-start:交叉軸的起點(diǎn)對(duì)齊。
flex-end:交叉軸的終點(diǎn)對(duì)齊。
center:交叉軸的中點(diǎn)對(duì)齊。
baseline: 項(xiàng)目的第一行文字的基線對(duì)齊。(文字的行高、字體大小會(huì)影響每行的基線)
stretch(默認(rèn)值):如果項(xiàng)目未設(shè)置高度或設(shè)為auto,將占滿整個(gè)容器的高度。
(當(dāng)項(xiàng)目換為多行時(shí),可使用align-content取代align-items)
flex-start:與交叉軸的起點(diǎn)對(duì)齊。
flex-end:與交叉軸的終點(diǎn)對(duì)齊。
center:與交叉軸的中點(diǎn)對(duì)齊。
space-between:與交叉軸兩端對(duì)齊,軸線之間的間隔平均分布。
space-around:每根軸線兩側(cè)的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。
stretch(默認(rèn)值):軸線占滿整個(gè)交叉軸。
此屬性有兩個(gè)快捷設(shè)置:auto=(1 1 auto)/none=(0 0 auto)
屬性值:與align-items相同,默認(rèn)值為auto,表示繼承父容器的align-items屬性值。
好了,相信到這里,所有同學(xué)都能夠理解flex彈性布局了吧~~學(xué)習(xí)一個(gè)新知識(shí),字不如表,表不如圖。希望這5個(gè)div的圖解,能夠讓所有同學(xué)深刻的理解Flex彈性布局~接下來(lái),讓我們愉快的拋棄Float、拋棄Position,一起擁抱Flex吧!!
最后,所有的源碼附上,需要的同學(xué)自行測(cè)試哦~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#div{ width: 500px;
height: 400px;
background-color: yellow;
display: flex;
/*flex-direction: column-reverse;*/ /*flex-wrap: wrap;*/ /*justify-content: space-around;*/ /*align-items: stretch;*/ /*align-content: stretch;*/
}
#div div{width: 100px;
height: 100px;
background-color: blue;
color: white;
font-size: 30px;
/*flex-shrink: 0;*/
}
#div .div1{ /*font-size: 48px;*/
/*order: 1;*/
/*flex-grow: 1;*/
/*flex-shrink: 0;*/
/*background-color: red;*/
}
#div .div3{ /*flex-grow: 2;*/
background-color: green;
/*flex-basis: 200px;*/
align-self: flex-end;
}
</style>
</head>
<body>
<div id="div">
<div class="div1">1</div>
<div class="div2">2</div>
<div class="div3">3</div>
<div class="div4">4</div>
</div>
</body>
</html>
--如需轉(zhuǎn)發(fā),請(qǐng)注明原文網(wǎng)站,整理不易
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。