zoukankan      html  css  js  c++  java
  • 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>
    打开有惊喜

     

  • 相关阅读:
    Pandas
    多进程编程
    python的多线程编程
    Scrapy中集成selenium
    生成器函数yield和使用yield模拟协程
    迭代器和可迭代对象
    HDU5988 Coding Contest(浮点费用流)
    codeforces Technocup 2017
    codeforces724E Goods transportation(欧拉回路)
    UVAlive4097 Yungom(思路)
  • 原文地址:https://www.cnblogs.com/skylarzhan/p/7255925.html
Copyright © 2011-2022 走看看