在该笔记中将学到一些常用的表单美化的方法与展示效果
单选按钮美化
在表单中,原本单选按钮的实现方法是 form + input( type=”radio”) + lable 来实现的,这样在点击该单选按钮的时候,该元素自带的 CSS 动作就可以添加到按钮上。
但是,如果需要对单选按钮被点击的效果进行美化,比如去掉单选按钮之前的小圆点,更好的方法是放弃使用 input(type=”radio”),而是使用 dl + dt + dd(或者使用 ul + li 和 ol + li ) 来实现。这样更加方便添加需要的 CSS 效果。
<html>
<head>
<title>单选按钮的美化</title>
<meta charset="utf-8">
<style type="text/css">
* {
margin:0;
padding:0;
}
body{
font-size: 12px;
}
.type {
width: 400px;
height: 32px;
margin: 30px auto;
border: 1px solid #DFDFDF;
}
.type dl{
margin-left: 15px;
height: 32px;
line-height: 32px;
}
.type dd{
float: left;
margin: 0 10px 0 8px;
}
.type dt{
float: left;
}
.type dd a{
text-decoration: none;
color: black;
margin-left: 5px;
}
.type dd a:hover{
color: #CC0000;
text-decoration: underline;
}
.type dd a:hover i,.type .selected i{
background-position:-1px -108px;
}
.type dd i{
display: inline-block;
width: 12px;
height: 10px;
float: left;
margin-top: 10px;
border: 1px solid #DFDFDF;
background: url("http://ofjjubwp5.bkt.clouddn.com/image/png/img29.png") no-repeat;
background-position: 0 -7px;
}
</style>
</head>
<body>
<div class="type">
<!--<form action="#" method="POST" name="formType">
<label>配送类型:</label>
<input type="radio" name="type" checked><label>全部</label>
<input type="radio" name="type"><label>京东配送</label>
<input type="radio" name="type"><label>第三方配送</label>
</form>-->
<dl id="sendType">
<dt >配送类型:</dt>
<dd class="selected" onclick="show(0)"><a href="#"><i></i>全部</a></dd>
<dd onclick="show(1)"><a href="#"><i></i>京东配送</a></dd>
<dd onclick="show(2)"><a href="#"><i></i>第三方配送</a></dd>
</dl>
</div>
<script>
function show(index){
var dd = document.getElementById("sendType").getElementsByTagName("dd"),
len, i;
for(i=0, len=dd.length; i<len; i++){
if(i === index) {
dd[i].className = "selected";
} else{
dd[i].className = null;
}
}
}
</script>
</body>
</html>
显示效果为:
复选按钮的美化
因为不同浏览器对复选框的默认样式都不一样,所以如果想要使得所有的浏览器对复选框的显示效果都相同,则使用图片等元素来替代复选框的默认样式。
可以对 input 元素设置 display:none 来删除表单元素的默认显示效果。
<html>
<head>
<title>多选按钮美化</title>
<meta charset="utf-8">
<style type="text/css">
*{
margin: 0;
padding: 0;
}
body{
font-size: 13px;
}
.typeList{
width: 370px;
height: 30px;
margin: 50px auto;
border: 1px solid #DFDFDF;
border-width: 1px 0px;
}
.typeList ul {
list-style: none;
height: 30px;
line-height:30px;
text-align: center;
padding-left: 20px;
}
.typeList ul li {
float: left;
margin-right: 20px;
}
.typeList ul li:hover i,.typeList ul li.selected i{
background-position:-1px -108px;
}
.typeList ul li input {
display: none;
}
.typeList ul li i{
background: url("http://ofjjubwp5.bkt.clouddn.com/image/png/img29.png") no-repeat;
display: inline-block;
width: 12px;
height: 10px;
border: 1px solid #DFDFDF;
background-position: 0 -7px;
float: left;
margin: 10px 2px 0 0;
}
</style>
</head>
<body>
<div class="typeList">
<form action="#" method="POST" name="typeList">
<ul id="checkedList">
<li class="selected"><input type="checkbox" name="typeList" id="bao"/><i></i><label for="bao">包邮</label></li>
<li><input type="checkbox" name="typeList" id="xiao"/><i></i><label for="xiao">消费者保障</label></li>
<li><input type="checkbox" name="typeList" id="huo"/><i></i><label for="huo">货到付款</label></li>
<li><input type="checkbox" name="typeList" id="hai"/><i></i><label for="hai">海外商品</label></li>
</ul>
</form>
</div>
<script>
window.onload = function(){
var lis = document.getElementById("checkedList").getElementsByTagName("li"),
i, len;
for(i=0, len = lis.length; i<len; i++) {
lis[i].onclick = function() {
if(this.className == "selected") {
console.log( "not selected");
this.className = null;
} else {
console.log("selected");
this.className = "selected";
}
}
}
}
</script>
</body>
</html>
小bug:如果鼠标点击在文字上的时候,li 会被判定为点击了两次(一次是点击 li ,另一次是出发 lable 点击了 input,此时勾选的显示效果就会变成:勾选->不勾选)
显示效果为:
文本框的美化
文本框 input[type-text] 的美化,可以使用 placeholder 来替换 value 属性,从而达到提示是灰色,当有输入的时候,提示的文字不显示的效果。
也可以在文本框中调用 CSS3 的 transition 属性,设置属性的过度,使得当文本框获得焦点的时候,显示效果有过渡的改变。
<html>
<head>
<title>text</title>
<meta charset="uft-8">
<style type="text/css">
*{
margin: 0;
padding: 0;
}
.content{
width: 700px;
height: auto;
background-color: #F6F6F6;
padding: 10px;
margin: 40px auto;
}
.content *:focus{
outline: none;
}
.content ul {
list-style: none;
}
.content ul li{
font-size: 14px;
margin-left: 20px;
border-bottom: 1px solid #DFDFDF;
padding: 12px;
}
.content ul li label{
width: 100px;
display: inline-block;
float: left;
}
.content ul li input[type=text]{
padding: 3px 8px;
height: 20px;
width: 220px;
border: 1px solid green;
border-radius: 4px;
}
.content ul li input:focus{
border: 1px solid red;
}
.content ul li input[type=text]{
transition: width .25s;
-moz-transition: width .25s; /* Firefox 4 */
-webkit-transition: width .25s; /* Safari 和 Chrome */
-o-transition: width .25s; /* Opera */
}
.content ul li input:focus{
width: 250px;
}
</style>
</head>
<body>
<div class="content">
<form action="#" method="POST">
<ul>
<li>
<label for="name">姓名:</label>
<input type="text" name="yourname" placeholder="姓名" id="name">
</li>
<li>
<label for="name2">姓名:</label>
<input type="text" name="yourname" placeholder="姓名" id="name2">
</li>
</ul>
</form>
</div>
</body>
</html>
显示效果如下:
下拉列表的美化
原来自带的下拉列表是 select ,但是由于 select 带有的浏览器自定义渲染格式,使得对下拉列表的美化比较困难,所以使用 ul + li 来构造下拉列表:
<html>
<head>
<title>select 演示</title>
<meta charset="utf-8">
<style type="text/css">
*{
padding: 0;
margin: 0;
}
body{
font: 13px/24px "微软雅黑";
background-color: #333;
}
#box{
width: 500px;
height: 326px;
position: absolute;
left: 50%;
top:50%;
background-color: white;
margin: -163px 0 0 -250px;
}
.province{
width: 320px;
height: 42px;
background-color:#C00;
margin: 80px auto;
}
.province strong{
color: white;
width: 64px;
height: 42px;
line-height: 42px;
text-align: center;
display: inline-block;
font-weight: normal;
float: left;
}
.province #selectProvince{
width: 200px;
height: 28px;
display: block;
background-color: white;
margin-top: 7px;
float: left;
padding-left: 8px;
color: #CCC;
cursor: pointer;
}
#allprovince{
width: 318px;
height: auto;
border: 1px solid #DFDFDF;
clear: both;
list-style: none;
line-height: 30px;
}
#allprovince li{
height: 30px;
border-bottom: 1px solid #DFDFDF;
cursor: pointer;
}
#allprovince li b{
display: inline-block;
width: 40px;
font-size: bold;
text-align: center;
}
#allprovince li span{
font-weight: bold;
}
#allprovince li span:hover{
color: #C00;
}
</style>
</head>
<body>
<div id="box">
<div class="province">
<strong>送货至:</strong>
<span id="selectProvince">北京</span>
<ul id="allprovince">
<li><b>A</b><span>安徽</span></li>
<li><b>B</b><span>北京</span></li>
<li><b>C</b><span>重庆</span></li>
<li><b>F</b><span>福建</span></li>
</ul>
</div>
</div>
</body>
</html>
显示效果如下: