CSS學習筆記四:下拉選擇框以及其動畫特效


以前學的只是了解了css的一些基本屬性,在做項目的時候都是直接使用bootstrap響應式來寫項目,這樣子很方便,很快捷,但是在自己看來還是有一點缺陷的,畢竟,我很多時候不怎么清楚它里面的具體運作。所以在學習原生,一個一個小標符號學習起來,學習原生可能會讓我學習到更多的東西。

學習了兩種下拉框,一種是往在彈,一種是從中間往外彈。

第一種下拉框

現在學習的做東西,都是先確定好自己需要那幾樣東西,先把body的內容寫了,再來一樣一樣規划樣式。

 1 <div class="content">
 2         <div class="select ">
 3             <p>所有選項</p>
 4             <ul>
 5                 <li data-value="所有選項" class="selected">所有選項</li>
 6                 <li data-value="html">html</li>
 7                 <li data-value="css">css</li>
 8                 <li data-value="javascript">js</li>
 9                 <li data-value="jquery">jq</li>
10             </ul>
11             
12         </div>
13         
14     </div>

1、body,p,ul本身就自帶了邊界和內邊距的距離,第一步是將他們給清除掉

2、設置body的基本屬性值,背景顏色以及字體顏色

3、content是將它們總體往下移

4、content 中的 select 的樣式設定設置其邊距和邊界等等,在after中設置的是一個三角形的樣式,一開始是倒三角形,當點擊按鈕后就會旋轉,將按鈕往上翻轉。

5、select p 中設置的是該處的內邊距值和將其如果接觸到該處,則鼠標變為手指狀 cursor:pointer;。

6、select ul 中是將其本身的樣式清楚掉,本來ul中的物品都會帶着點,list-style:none;將點去除 ;select ul li 中將每個列都設置好行距。 其中 ul li:hover 是指鼠標划過帶來的樣式變化,而selected 則是選擇它會改變的樣式

7、open 樣式是在你點擊下拉框時,它將高度變大,將所有值都顯示出來,其after 時將三角形的轉向改變。

8、transition里面帶有動畫效果 ease-in,ease-out 時值物體滑入滑出。所用時間的長短設置

 

 1 <style type="text/css">
 2         body,p,ul{
 3             margin:0;
 4             padding:0;
 5         }
 6         body{
 7             background-color: pink;
 8             color:#333;
 9         }
10         .content{
11             padding-top:5%;
12 
13         }
14         .content .select{
15             width: 300px;
16             height: 40px;
17             margin: 0 auto;
18             font-family: "Microsoft Yahei";
19             font-size: 16px;
20             background-color: #fff;
21             position: relative;
22 
23         }
24         .content .select:after{
25             content:'';
26             display:block;
27             width: 10px;
28             height: 10px;
29             border-left: 1px #ccc solid;
30             border-bottom: 1px #ccc solid;
31             position:absolute;
32             top:11px;
33             right: 12px;
34             transform:rotate(-45deg);
35             transition: transfrom .3s ease-in,top .3s  ease-out;
36 
37         }
38         .content .select p{
39             padding: 0 15px;
40             line-height: 40px;
41             cursor: pointer;
42         }
43         .content .select ul{
44             list-style-type:none;
45             background-color: #fff;
46             width: 100%;
47             overflow-y:auto;
48             position: absolute;;
49             top: 40px;
50             left: 0;
51             max-height: 0;
52         }
53         .content .select ul li{
54             padding: 0 15px;
55             line-height: 40px;
56             cursor: pointer;
57         }
58         .content .select ul li:hover{
59             background-color: #e0e0e0;
60         }
61         .content .select ul li.selected{
62             background-color: #39f;
63             color: #fff;
64         }
65         @-webkit-keyframes slide-down{
66             0%{transform: scale(1,0);}
67             25%{transform: scale(1,1.2);}
68             50%{transform: scale(1,0.85);}
69             75%{transform: scale(1,1.05);}
70             100%{transform: scale(1,1);}
71         }
72         .content .select.open ul{
73             max-height: 250px;
74             transform-origin: 50% 0;
75             -webkit-animation:slide-down .5s ease-in;
76             transition: max-height .2s ease-out;
77         }
78         .content .select.open:after{
79             transform: rotate(-225deg);
80             top: 18px;
81             transition: all .3s ease-in;
82         }
83 </style>

一開始是將select跟open 兩個樣式放一起,但是這樣子它就是一直展開的,所以要做到動態效果,就要將open 先去掉,然后點擊以后就做出相應反應。

1、第一個函數是點擊后,jQuery中利用toggleClass將open的樣式添加進去,從而打開樣式。

2、第一個函數是值當事件點擊觸發li 中的將一個更換為data-value,同時一處selected 效果和open效果

3、第三個函數是在你打開該列表后,在整個界面任意的地方點擊都能讓該下拉框回收,也就是移除open樣式。 

 1 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
 2     </script>
 3 <script type="text/javascript">
 4         $(function(){
 5             $('.select > p').on('click',function(e){
 6                 $('.select').toggleClass('open');
 7                 e.stopPropagation();
 8             });
 9             // 檢查是否由這個屬性,沒就添加樣式
10             // 綁定單擊事件e.stopPropagation();加了以后四處點擊都i回收
11             $('.select ul li').on('click',function(e){
12                 var _this = $(this);
13                 $('.select > p').text(_this.attr('data-value'));
14                 _this.addClass('selected').siblings().removeClass('selected');
15                 $('.select').removeClass('open');
16                 e.stopPropagation();
17             });
18             $(documnent).on('click',function(){
19                 $('.select').removeClass('open');
20             });
21         });
22     </script>
打開有驚喜

二、第二種下拉框

第二種下拉框跟第一種相比,區別在與其動畫效果,其他並沒有太大的變化

這里的動畫是一條一條進入,跟第一種全部進入會有不同,所以這里用到了:nth-child :規定屬於其父元素的第一個子元素的每個 li的動畫效果;

 1         .content .select.open ul li:nth-child(1){
 2             transition: opacity .3s ease-in .05s,transform .3s ease-in .05s;
 3 
 4         }
 5         .content .select.open ul li:nth-child(2){
 6             transition: opacity .3s ease-in .1s,transform .3s ease-in .1s;
 7 
 8         }
 9         .content .select.open ul li:nth-child(3){
10             transition: opacity .3s ease-in .15s,transform .3s ease-in .15s;
11 
12         }
13         .content .select.open ul li:nth-child(4){
14             transition: opacity .3s ease-in .20s,transform .3s ease-in .20s;
15 
16         }
17         .content .select.open ul li:nth-child(5){
18             transition: opacity .3s ease-in .25s,transform .3s ease-in .25s;
19 
20         }
  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>Documnent</title>
  6     <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
  7     </script>
  8     
  9     <style type="text/css">
 10         body,p,ul{
 11             margin:0;
 12             padding:0;
 13         }
 14         body{
 15             background-color: pink;
 16             color:#333;
 17         }
 18         .content{
 19             padding-top:20%;
 20 
 21         }
 22         .content .select{
 23             width: 300px;
 24             height: 40px;
 25             margin: 0 auto;
 26             font-family: "Microsoft Yahei";
 27             font-size: 16px;
 28             background-color: #fff;
 29             position: relative;
 30 
 31         }
 32         .content .select >i{
 33             position: absolute;
 34             top: 12px;
 35             right: 10px;
 36             width: 20px;
 37             height: 11px;
 38             border-top:3px #ccc solid;
 39             border-bottom:3px #ccc solid;
 40         }
 41         .content .select >i:after{
 42             content:'';
 43             position: absolute;
 44             top: 4px;
 45             left: 0;
 46             width: 100%;
 47             height: 3px;
 48             background-color: #ccc;
 49         }
 50 
 51         .content .select p{
 52             padding: 0 15px;
 53             line-height: 40px;
 54             cursor: pointer;
 55         }
 56         .content .select ul{
 57             list-style-type:none;
 58             background-color: #fff;
 59             width: 100%;
 60             overflow:hidden;
 61             position: absolute;;
 62             top: 20px;
 63             left: 0;
 64             z-index: 1;
 65             height: 0;
 66             transition: height .3s ease-out,top .3s ease-out;
 67         }
 68         .content .select ul li{
 69             padding: 0 15px;
 70             line-height: 40px;
 71             cursor: pointer;
 72             opacity:0;
 73             transform: translateX(300px);
 74             transition: transfrom .3s ease-out;
 75         }
 76         .content .select ul li:hover{
 77             background-color: #e0e0e0;
 78         }
 79         .content .select ul li.selected{
 80             color: #0c9;
 81         }
 82         
 83         .content .select.open ul{
 84             height: 200px;
 85             top: -80px;
 86             transition: all .2s ease-in;
 87         }
 88         .content .select.open ul li{
 89             opacity: 1;
 90             transform:translateX(0);
 91 
 92         }
 93         .content .select.open ul li:nth-child(1){
 94             transition: opacity .3s ease-in .05s,transform .3s ease-in .05s;
 95 
 96         }
 97         .content .select.open ul li:nth-child(2){
 98             transition: opacity .3s ease-in .1s,transform .3s ease-in .1s;
 99 
100         }
101         .content .select.open ul li:nth-child(3){
102             transition: opacity .3s ease-in .15s,transform .3s ease-in .15s;
103 
104         }
105         .content .select.open ul li:nth-child(4){
106             transition: opacity .3s ease-in .20s,transform .3s ease-in .20s;
107 
108         }
109         .content .select.open ul li:nth-child(5){
110             transition: opacity .3s ease-in .25s,transform .3s ease-in .25s;
111 
112         }
113         
114 
115     </style>
116 </head>
117 <body>
118     <div class="content">
119         <div class="select">
120             <p>所有選項</p>
121             <i></i>
122             <ul>
123                 <li data-value="所有選項" class="selected">所有選項</li>
124                 <li data-value="html">html</li>
125                 <li data-value="css">css</li>
126                 <li data-value="javascript">js</li>
127                 <li data-value="jquery">jq</li>
128             </ul>
129             
130         </div>
131         
132     </div>
133     <script type="text/javascript">
134         $(function(){
135             $('.select > p').on('click',function(e){
136                 $('.select').toggleClass('open');
137                 e.stopPropagation();
138             });
139             // 檢查是否由這個屬性,沒就添加樣式
140             // 綁定單擊事件e.stopPropagation();加了以后四處點擊都i回收
141             $('.select > ul li').on('click',function(e){
142                 var _this = $(this);
143                 $('.select > p').text(_this.attr('data-value'));
144                 _this.addClass('selected').siblings().removeClass('selected');
145                 $('.select').removeClass('open');
146                 e.stopPropagation();
147             });
148             $(documnent).on('click',function(){
149                 $('.select').removeClass('open');
150             });
151         });
152     </script>
153 
154 </body>
155 </html>
打開有驚喜

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM