以前学的只是了解了css的一些基本属性,在做项目的时候都是直接使用bootstrap响应式来写项目,这样子很方便,很快捷,但是在自己看来还是有一点缺陷的,毕竟,我很多时候不怎么清楚它里面的具体运作。所以在学习原生,一个一个小标符号学习起来,学习原生可能会让我学习到更多的东西。

学习了两种下拉框,一种是往在弹,一种是从中间往外弹。

第一种下拉框

现在学习的做东西,都是先确定好自己需要那几样东西,先把body的内容写了,再来一样一样规划样式。

 <div class="content">
<div class="select ">
<p>所有选项</p>
<ul>
<li data-value="所有选项" class="selected">所有选项</li>
<li data-value="html">html</li>
<li data-value="css">css</li>
<li data-value="javascript">js</li>
<li data-value="jquery">jq</li>
</ul> </div> </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 时值物体滑入滑出。所用时间的长短设置

 <style type="text/css">
body,p,ul{
margin:0;
padding:0;
}
body{
background-color: pink;
color:#333;
}
.content{
padding-top:5%; }
.content .select{
width: 300px;
height: 40px;
margin: 0 auto;
font-family: "Microsoft Yahei";
font-size: 16px;
background-color: #fff;
position: relative; }
.content .select:after{
content:'';
display:block;
width: 10px;
height: 10px;
border-left: 1px #ccc solid;
border-bottom: 1px #ccc solid;
position:absolute;
top:11px;
right: 12px;
transform:rotate(-45deg);
transition: transfrom .3s ease-in,top .3s ease-out; }
.content .select p{
padding: 0 15px;
line-height: 40px;
cursor: pointer;
}
.content .select ul{
list-style-type:none;
background-color: #fff;
width: 100%;
overflow-y:auto;
position: absolute;;
top: 40px;
left: 0;
max-height: 0;
}
.content .select ul li{
padding: 0 15px;
line-height: 40px;
cursor: pointer;
}
.content .select ul li:hover{
background-color: #e0e0e0;
}
.content .select ul li.selected{
background-color: #39f;
color: #fff;
}
@-webkit-keyframes slide-down{
0%{transform: scale(1,0);}
25%{transform: scale(1,1.2);}
50%{transform: scale(1,0.85);}
75%{transform: scale(1,1.05);}
100%{transform: scale(1,1);}
}
.content .select.open ul{
max-height: 250px;
transform-origin: 50% 0;
-webkit-animation:slide-down .5s ease-in;
transition: max-height .2s ease-out;
}
.content .select.open:after{
transform: rotate(-225deg);
top: 18px;
transition: all .3s ease-in;
}
</style>

一开始是将select跟open 两个样式放一起,但是这样子它就是一直展开的,所以要做到动态效果,就要将open 先去掉,然后点击以后就做出相应反应。

1、第一个函数是点击后,jQuery中利用toggleClass将open的样式添加进去,从而打开样式。

2、第一个函数是值当事件点击触发li 中的将一个更换为data-value,同时一处selected 效果和open效果

3、第三个函数是在你打开该列表后,在整个界面任意的地方点击都能让该下拉框回收,也就是移除open样式。

 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
</script>
<script type="text/javascript">
$(function(){
$('.select > p').on('click',function(e){
$('.select').toggleClass('open');
e.stopPropagation();
});
// 检查是否由这个属性,没就添加样式
// 绑定单击事件e.stopPropagation();加了以后四处点击都i回收
$('.select ul li').on('click',function(e){
var _this = $(this);
$('.select > p').text(_this.attr('data-value'));
_this.addClass('selected').siblings().removeClass('selected');
$('.select').removeClass('open');
e.stopPropagation();
});
$(documnent).on('click',function(){
$('.select').removeClass('open');
});
});
</script>
打开有惊喜

二、第二种下拉框

第二种下拉框跟第一种相比,区别在与其动画效果,其他并没有太大的变化

这里的动画是一条一条进入,跟第一种全部进入会有不同,所以这里用到了:nth-child :规定属于其父元素的第一个子元素的每个 li的动画效果;

         .content .select.open ul li:nth-child(1){
transition: opacity .3s ease-in .05s,transform .3s ease-in .05s; }
.content .select.open ul li:nth-child(2){
transition: opacity .3s ease-in .1s,transform .3s ease-in .1s; }
.content .select.open ul li:nth-child(3){
transition: opacity .3s ease-in .15s,transform .3s ease-in .15s; }
.content .select.open ul li:nth-child(4){
transition: opacity .3s ease-in .20s,transform .3s ease-in .20s; }
.content .select.open ul li:nth-child(5){
transition: opacity .3s ease-in .25s,transform .3s ease-in .25s; }
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Documnent</title>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
</script> <style type="text/css">
body,p,ul{
margin:0;
padding:0;
}
body{
background-color: pink;
color:#333;
}
.content{
padding-top:20%; }
.content .select{
width: 300px;
height: 40px;
margin: 0 auto;
font-family: "Microsoft Yahei";
font-size: 16px;
background-color: #fff;
position: relative; }
.content .select >i{
position: absolute;
top: 12px;
right: 10px;
width: 20px;
height: 11px;
border-top:3px #ccc solid;
border-bottom:3px #ccc solid;
}
.content .select >i:after{
content:'';
position: absolute;
top: 4px;
left: 0;
width: 100%;
height: 3px;
background-color: #ccc;
} .content .select p{
padding: 0 15px;
line-height: 40px;
cursor: pointer;
}
.content .select ul{
list-style-type:none;
background-color: #fff;
width: 100%;
overflow:hidden;
position: absolute;;
top: 20px;
left: 0;
z-index: 1;
height: 0;
transition: height .3s ease-out,top .3s ease-out;
}
.content .select ul li{
padding: 0 15px;
line-height: 40px;
cursor: pointer;
opacity:0;
transform: translateX(300px);
transition: transfrom .3s ease-out;
}
.content .select ul li:hover{
background-color: #e0e0e0;
}
.content .select ul li.selected{
color: #0c9;
} .content .select.open ul{
height: 200px;
top: -80px;
transition: all .2s ease-in;
}
.content .select.open ul li{
opacity: 1;
transform:translateX(0); }
.content .select.open ul li:nth-child(1){
transition: opacity .3s ease-in .05s,transform .3s ease-in .05s; }
.content .select.open ul li:nth-child(2){
transition: opacity .3s ease-in .1s,transform .3s ease-in .1s; }
.content .select.open ul li:nth-child(3){
transition: opacity .3s ease-in .15s,transform .3s ease-in .15s; }
.content .select.open ul li:nth-child(4){
transition: opacity .3s ease-in .20s,transform .3s ease-in .20s; }
.content .select.open ul li:nth-child(5){
transition: opacity .3s ease-in .25s,transform .3s ease-in .25s; } </style>
</head>
<body>
<div class="content">
<div class="select">
<p>所有选项</p>
<i></i>
<ul>
<li data-value="所有选项" class="selected">所有选项</li>
<li data-value="html">html</li>
<li data-value="css">css</li>
<li data-value="javascript">js</li>
<li data-value="jquery">jq</li>
</ul> </div> </div>
<script type="text/javascript">
$(function(){
$('.select > p').on('click',function(e){
$('.select').toggleClass('open');
e.stopPropagation();
});
// 检查是否由这个属性,没就添加样式
// 绑定单击事件e.stopPropagation();加了以后四处点击都i回收
$('.select > ul li').on('click',function(e){
var _this = $(this);
$('.select > p').text(_this.attr('data-value'));
_this.addClass('selected').siblings().removeClass('selected');
$('.select').removeClass('open');
e.stopPropagation();
});
$(documnent).on('click',function(){
$('.select').removeClass('open');
});
});
</script> </body>
</html>

打开有惊喜

CSS学习笔记四:下拉选择框以及其动画特效的更多相关文章

  1. CSS自定义select下拉选择框(不用其他标签模拟)

    今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...

  2. HTML、CSS小知识--兼容IE的下拉选择框select

    HTML <div class="s_h_ie"> <select id="Select1" disabled="disabled& ...

  3. jQuery插件——下拉选择框

    其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $. ...

  4. FancySelect – 更好用的 jQuery 下拉选择框插件

    FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...

  5. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 一款javascript实现的超炫的下拉选择框

    今天为给大家带来一款javascript实现的超炫的下拉选择框.下拉的列表由半用透明的幽灵按钮组成.显示下拉的时候,列表项由左右两侧飞入.消息时飞向左右两侧.一起看下效果图 在线预览   源码下载 实 ...

  7. jquery.chosen.js下拉选择框美化插件项目实例

    由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生 ...

  8. selenium的下拉选择框

    今天总结下selenium的下拉选择框.我们通常会遇到两种下拉框,一种使用的是html的标签select,另一种是使用input标签做的假下拉框. 后者我们通常的处理方式与其他的元素类似,点击或使用J ...

  9. CSS3不一样的下拉选择框

    本例中包含两个下拉选择框的动画示例,本例中并未使用select标签.本例中第一个案例也可用于标题.导航栏等位置. 案例一: html布局 <div class="content&quo ...

随机推荐

  1. 【算法导论】图的深度优先搜索遍历(DFS)

    关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...

  2. 类模板语法知识体系梳理(包含大量常犯错误demo,尤其滥用友元函数的错误)

    demo 1 #include <iostream> #include <cstdio> using namespace std; //template <typenam ...

  3. STL常用遍历算法for_each和transform的比较

    for_each()和transform()算法比较 1)STL 算法 – 修改性算法  for_each()  copy()  copy_backward()  transform()  merge ...

  4. 套接字编程相关函数(1:套接字地址结构、字节序转换、IP地址转换)

    1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下 ...

  5. 尽量用pass-by-reference-to-const(const引用)替换pass-by-value(传值)

    默认情况下C++以pass-by-value传递对象至函数(或从函数返回). eg1: class Person { public: Person(); virtual ~Person(); priv ...

  6. Linux的常用命令(1) - 指定运行级别

    命令:init [0123456] 运行级别 0:关机 1:单用户 2:多用户状态没有网络服务 3:多用户状态有网络服务 4:系统未使用保留给用户 5:图形界面 6:系统重启 常用运行级别是3和5,要 ...

  7. 解决winform窗体闪烁问题

    如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码: 请在构造函数里面底下加上如下几行: SetStyle( ...

  8. nfc近场通信

    NFC简介: Near Field Communication 近场通信,是一种数据传输技术. 与wifi.蓝牙.红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm. NFC支持3种工作 ...

  9. 自定义Interpolator

    nterpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果.那么什么叫做非线性运动的动画效果呢?就是说动画改变的速 ...

  10. OpenGL Shader Key Points (3)

    Shader和Program Program Link过后,Shader就可以从Program中Detach并删掉.这样是不是可以节省一点点显存呢? 链接到同一个program的vertex和frag ...