如何写好CSS系列之表单(form)
表单模块可以分为两部分:一是表单的布局,也就是规范表单元素单元的排列位置;二是表单元素,如:输入框、单选、复选、列表组件、搜索组件等,由于列表组件、搜索组件不是单纯的css组件,所以暂且没有实现。
一、表单布局的实现
表单布局分为:表单容器、行、表单元素组(包含元素标题、元素)。并且实现根据屏幕进行自适应。示例效果如下:

从示例效果可以看出,布局会根据浏览器大小实现自适应。自适应代码如下:
@import '../mixins/breakpoints';
.f-form-container{
@extend .border-sizing;
margin-top: $form-row-space;
> .f-form-row{
display: block;
white-space: nowrap;
margin: 0px;
padding: 0px;
font-size: 0px;
}
> .f-form-row + .f-form-row{
margin-top: $form-row-space;
}
&.fluid{
//自适应 xs = md -1
@include media-breakpoint-max('xs'){
.f-form-group{
display: block;
margin: 0px;
+ .f-form-group{
margin-top: get-space(lg);
}
}
}
}
}
首先对容器内部的f-form-row(表单行)进行了Magin-top的设置。然后增加了fluid类名,用于控制此表单列表是否需要支持自适应效果 。
二、表单元素的实现(部分)
表单元素只实现的input、checkbox、radio等三个基本元素类型。

2.1 input元素
对Input元素主要实现了前缀和后缀的能力,其中前后缀中的内容可以任意宽度,现在引入的为font-awesome的web字体库。其实check和radio的图标也是来至于font-awesome。代码如下:
.f-form-control{
display: inline-block;
width: 100%;
padding: $form-input-padding;
border: 1px solid $form-border-color;
font-family: $font-family;
font-size: $font-size;
line-height: $line-height;
border-radius: $radius-width-base;
outline: none;
resize: none;
&:focus{
border-color: $form-border-focuscolor;
}
}
.f-input-addon{
//图标
display: inline-block;
font-size: $font-size;
//line-height可以解决两个inline-block高度不致的问题(字体类型不一样的情况下)
line-height: $line-height;
padding: $form-input-padding;
border: 1px solid $form-border-color;
background-clip: padding-box;
&:after{
//解决fa与输入框字体一致的问题
content: '';
display: inline-block;
}
}
//addon position
.f-form-group{
&.addon-before{
.f-input-addon{
border-radius: $radius-width-base;
border-right-width: 0px;
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
}
.f-form-control{
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
}
}
&.addon-after{
.f-input-addon{
border-radius: $radius-width-base;
border-left-width: 0px;
border-top-left-radius: 0px;
border-bottom-left-radius: 0px;
}
.f-form-control{
border-top-right-radius: 0px;
border-bottom-right-radius: 0px;
}
}
}
//处理input宽度占了100%的问题
.f-form-group{
&.addon-before, &.addon-after{
display: inline-table;
.f-input-addon, .f-form-control{
display: table-cell;
}
}
}
其中遇到两个比较棘手的问题处理方案:
1. addon和control两个字体类型不致,导致在相同字体大小的情况下,两个容器的高度表现不一致。所以我就用了行高(line-height)来解决此问题
2. 由于control默认的宽度为100%,而加入了addon之后,会导致control的宽度溢出的现象,所以我就用了table-cell来解决此问题。
2.2. checkbox和radio元素
示例代码只列出了checkbox的,其radio与此相同,就只改变了图标而已:
.f-form-control{
&.checkbox{
> input{
display: none;
&:checked{
+ .checkbox-icon{
@extend .fa-check-square-o;
}
}
}
> .checkbox-icon{
@extend .vertical-middle;
@extend .fa;
@extend .fa-square-o;
width: 16px;
height: 16px;
font-size: $font-size-md;
margin-right: get-space('lg');
}
> .checkbox-desc{
font-size: $font-size;
@extend .vertical-middle;
}
}
}
由于引入的为font-awesome字体库,所以就控制了icon宽度,因为checkbox的选中与不选中的状态,fa的web字体库中对应图标的宽度不一样。
如何写好CSS系列之表单(form)的更多相关文章
- BootStrap 智能表单系列 六 表单数据绑定(编辑页面的数据绑定)
本章介绍如何在生成表单后,将一个model的数据展示到form表单中(一般用于编辑页面) 代码如下(连接地址:https://github.com/xiexingen/Bootstrap-SmartF ...
- BootStrap 智能表单系列 四 表单布局介绍
表单的布局分为自动布局和自定义布局两种: 自动布局就是根据配置项中第二级配置项中数组的长度来自动使用不同的bootstrap栅格,通过设置autoLayout为true可以实现自动布局 自动以布局就是 ...
- amazeui学习笔记--css(HTML元素3)--表单Form
amazeui学习笔记--css(HTML元素3)--表单Form 一.总结 1.form样式使用:在容器上添加 .am-form class,容器里的子元素才会应用 Amaze UI 定义的样式. ...
- BootStrap 智能表单系列 五 表单依赖插件处理
这一章比较简单哦,主要就是生产表单元素后的一些后续处理操作,比如日期插件的渲染.一些autocomplete的处理等,在回调里面处理就可以了, demo: $("input.date-pic ...
- 【SqlServer系列】表单查询
1 概述 如下几个问题,如果你能解决,请继续往下看,若不能解决,请先复习SQL基础知识,再来阅读本篇文章.本篇文章深度中等左右. Q1:表StudentScores如下,用一条SQL语句查询出每门 ...
- [入门到吐槽系列] Webix 10分钟入门 二 表单Form的使用
前言 继续接着上一篇的webix入门:https://www.cnblogs.com/zc22/p/15912342.html.今天完成剩下两个最重要的控件,表单和表格的使用.掌握了这两个,整个Web ...
- html - 表单form
一.表单 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含textarea.select. ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- Bootstrap~表单Form
回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...
随机推荐
- 对JS 的classList 简单记录
一 对classList整体感觉 浏览器支持参考(http://www.runoob.com/jsref/prop-element-classlist.html) classList 是一个对象 ,返 ...
- redis对string进行的相关操作
redis对string类型操作的相关命令以及如何在python使用这些命令 redis对string类型操作的命令: 命令 语法 概述 返回值 Redis SET 命令 set key value ...
- notes for lxf(一)
python代码不能用word和windows自带的记事本保存 word保存的不是纯文本文件 记事本会在文件开始的地方加上特殊字符(UTF-8 BOM) 交互模式启动了解释器 直接运行.py文件是一次 ...
- Hive的DDL操作
DDL:data definittion language 数据定义语言 主要是定义或改变表的结构.数据类型.表之间的链接和约束等初始化操作 DML:data manipulation languag ...
- 微信小程序支付遇到的坑
1,微信公众号支付和微信小程序支付有差异 微信公众号:可以直接跳转走h5的微信支付 微信小程序:在测试环境.沙箱环境使用微信公众号的跳转支付没有问题,在线上存在支付异常 最后商讨的解决方法 openi ...
- functools.wraps函数
原文地址:https://www.cnblogs.com/fcyworld/p/6239951.html 第一次见到functools.wraps是在 Flask Web开发 中,一直不明白怎么回事. ...
- Linux之环境搭建(一)
四大系统比较 Mac OS是苹果机专用系统,是基于Unix内核的图形化操作系统,因此Unix相当于父亲,Linux和Mac OS是对兄弟. CentOS是从Redhat源代码编译重新发布版.CentO ...
- MySQL数据库的定时备份
1. 创建shell脚本 vim backupdb.sh 创建脚本内容如下: #!/bin/sh db_user="root" db_passwd=" db_name=& ...
- 启动两个tomcat服务,以及使用nginx代理实现访问
1.shoudowm.bat\startup.bat\catalina.bat, 将CATALINA_HOME修改为CATALINA_HOME_2 2.server.xml <Server po ...
- [POJ1961]Period (KMP)
题意 求字符串s的最小循环元长度和循环次数 思路 s[1~i]满足循环元要len能整除i并且s[len+1~i]=s[1~i-len] 代码 #include<cstdio> #inclu ...