如何写好CSS系列之表单(form)
时间:2022-04-22
本文章向大家介绍如何写好CSS系列之表单(form),主要内容包括一、表单布局的实现、二、表单元素的实现(部分)、2.2. checkbox和radio元素、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
表单模块可以分为两部分:一是表单的布局,也就是规范表单元素单元的排列位置;二是表单元素,如:输入框、单选、复选、列表组件、搜索组件等,由于列表组件、搜索组件不是单纯的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字体库中对应图标的宽度不一样。
- HTML5录音控件
- Microsoft 线性回归分析算法
- Spring Boot配置文件放在jar外部
- CSS引入方式
- Scrapy爬虫轻松抓取网站数据(以bbs为例,提供源码)
- CSS3实现loading图
- Netty断线重连
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
- gitbook安装与使用,并使用docker部署
- 【专业技术】在C/C++程序中打印当前函数调用栈
- 关于定位position的相关知识
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
- 段落首字下沉
- 【编程基础】C语言指针、引用和取值
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- Ubuntu系统下扩展LVM根目录的方法
- 将宝塔面板linux版装在/www以外的目录的方法
- 详解在Linux下9个有用的touch命令示例
- 一步步教你如何开启、关闭ubuntu防火墙
- Linux环境ActiveMQ部署方法详解
- Ubuntu 16.04无法切换root权限问题的解决
- leetcode栈之用队列实现栈
- 在Linux上识别同样内容的文件详解
- Ubuntu下pycharm无法导入类的解决方法
- leetcode栈之最小栈
- Linux基础学习之利用tcpdump抓包实例代码
- Linux/Unix关于时间和时间戳的命令行
- git文件管理心得分享
- Linux如何实现断点续传文件功能
- Xshell实现Windows上传文件到Linux主机的方法