如何写好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做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...
随机推荐
- python 配置文件__ConfigParser
基础读取配置文件 -read(filename) 直接读取文件内容 -sections() 得到所有的section,并以列表的形 ...
- 20175305张天钰《java程序设计》第七周学习总结
<java程序设计>第七周学习总结 第八章 常用实用类 1.String类 1.String类不可以有子类. 2.用户无法输出String对象的引用,输出的是字符序列 3.构造方法:Str ...
- Imcash:一边大裁员,一边大扩招,你能否成为区块链人才中的7%?
农历春节后,互联网创业圈并不太平. 最早,滴滴被曝裁员,占比约为全员的15%,涉及员工约2000人.CEO程维在全员会议上称公司要做好过冬准备.此后,京东接棒,其裁员对象上升至副总裁级别高管,比例占到 ...
- ELK:logstash和filebeat6.0及以上版本的配置
filebeat6.0版本以上没有document_type字段,因此需要另外标记下或者代替document_type字段的功能 案例如下: fielbeat5.5的配置 logstash5.5的配置 ...
- 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼
目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...
- Android EventBus技能点梳理
EventBus为Github上的开源项目,地址:https://github.com/greenrobot/EventBus 疑问:1. 现在都是Android Studio创建的项目,如何导入这些 ...
- 谈谈Java的classpath
Java之ClassPath 大家刚开始写Java代码的时候,如果使用Eclipse作为IDE,同时需要引用其他的类库,一般会有如下操作 在工程中新建lib目录 将jar包复制到lib目录下 右键单击 ...
- tf.contrib.slim.data数据加载(1) reader
reader: 适用于原始数据数据形式的Tensorflow Reader 在库中parallel_reader.py是与reader相关的,它使用多个reader并行处理来提高速度,但文件中定义的类 ...
- fiddler 应用
一 pc 端抓取 例:本地调试代码,转换域名,请求网络数据 1:设置代理,以smart header 为例 ip为 127.0.0.1 端口与自己的fillder一致,注意将不代理的地址列表做修改 ...
- 机器学习——KNN算法(k近邻算法)
一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...