了解CSS盒模型、页面布局在UI设计中的作用
我司实行UI规范已过去一段时间,页面风格已逐渐实现统一。但近期在实际业务开发中发现,在UI验收环节不断出现小数值调整情况,极大的延长验收时间。
在和UI设计人员探讨后发现设计者对前端盒模型概念不甚了解,故此篇介绍了css盒模型和组件的概念,以及简单的前端布局思路,UI设计人员在设计时也能结合代码层面考虑,规范前端页面UI标准,减少双方沟通和开发成本。
安卓、iOS、Web布局基本是互通的,因为本人为Web开发,所以从CSS盒模型的角度进行分享。如果你是web前端的初学者,相信这个分享也能给你带来帮助。
CSS盒模型
首先我们来看一段html代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>css盒模型</title>
</head>
<style type="text/css">
.content {width: 300px;height: 400px;border: 5px solid #242424;padding: 20px;background-color: #898989;
}
</style>
<body><div class="content" id="zwkkkk1"></div>
</body>
</html>
这段代码很好理解,设置一个div宽300px高400px。运行到网页端后可以得到一个矩形(如下图所示)
这里我们打开网页的调试模式,会发现这个div的长宽比为350x450
,上面的代码明明设置的是300x400
为什么长宽各增加了50呢?下面我们就来一探究竟。
我们再网页上使用检查模式,点击此元素可以得到这张示意图:
在这里我们可以看到300x400
在最内处蓝色区域content
(内容),与此同时我们还看到绿色部分的padding
(内边距)和黄色部分的border
(边框)以及橙色部分的margin
(外边距)
margin
(外边距) - 清除边框外的区域,外边距是透明的。
border
(边框) - 围绕在内边距和内容外的边框。
padding
(内边距) - 清除内容周围的区域,内边距是透明的。
content
(内容) - 盒子的内容,显示文本和图像。
为了正确设置元素在所有浏览器中的宽度和高度,我们需要知道盒模型是如何工作的。
在这个例子中看到的350x450
盒子是由以下计算得到:
350(width)
= 300(content)
+ 20(padding)
* 2 + 5(border)
* 2
450(height)
= 400 (content)
+ 20(padding)
* 2 + 5(border)
* 2
css的两种盒模型
而引起上面效果的原因来自于 css 的两种盒模型的不同,这里我先对两种盒模型做个介绍。
W3C的标准盒模型
在标准的盒子模型中,width指content部分的宽度
IE的盒模型
在IE盒子模型中,width表示content+padding+border这三个部分的宽度
我们可以看出我们上面的使用的默认正是W3C标准盒模型
。
而这里盒模型的选取更倾向于项目和开发者的习惯,并没有绝对的好坏之分。
box-sizing的使用
如果想要切换盒模型也很简单,这里需要借助css3的box-sizing
属性
box-sizing: content-box 是W3C盒子模型
box-sizing: border-box 是IE盒子模型
box-sizing的默认属性是content-box。
元素与元素之间的间距
通过上述盒模型
的介绍,我们了解了元素高度和宽度是怎么计算的,在实际应用中,元素和元素之间通常会设置间距,来保证页面布局美观。
line-heigth
我们先来看下下图三段文章的排版:
我们可以看到,红色段落文字上下非常拥挤,甚至有部分遮盖住了蓝色区域,而相对的黄色段落行与行之间间距就大了很多。这是因为我们给三段文字设置了不同的line-heigth
(行高)。
在不设置height
高度的情况下,元素内容(如上述中font-size
字体大小)及行高影响着content
容器的高度。当行高不等于字体大小时,行高的高度影响容器的高度。
margin
在上述
盒模型在原型及高保真设计中的应用
在UI验收环节,拥有“像素眼”的设计师经常发现页面中大小或间距出现细微差别,前端也发现在高保取值中见到各种不常见数值,这就是由于UI设计和前端布局之间的差异造成的。下面我们以墨刀这款设计器为基础,以前端UI库Element为例,讲解如何规范得按盒模型来设计页面。
首先我们从最小颗粒出发——组件。
组件化的优点:
1、可以快速的帮助我们开发一个新页面,复用性搞,减少开发成本。
2、风格标准统一,易维护。
元素宽高设置
以Button按钮为例,在墨刀设计常规按钮大小时,我们可以如下设置:
固定宽高按钮设置
web页面组件元素为保证用户阅读,通常不需要进行缩放,这时我们可以直接选择墨刀中Button组件,设置好固定宽高和字体大小即可,此时适用的是IE盒模型(推荐,减少双方计算),border
(边框)大小是包含在其中的,若想以W3C盒模型,则需要加上border
宽度。
但值得注意的是,如果此时按钮中文字数量不同,需要避免因固宽后文字溢出问题。
针对文字溢出的问题,我们可以使用设置最小宽度和固定padding
(内边距)值来解决。
固定padding和最小宽高按钮设置
设置固定padding
可以很好的根据内容文字的数量和大小来自动适配整体宽高,保证了内部元素和边框之间距离的统一,无需手动计算。
如果需要按钮保持最小宽高,我们可以标注按钮最小宽高比,如下图所示,当文字不足以撑满最小宽度时,则按钮宽度为设置的最小宽度。
间距
元素与元素之间的间距也是前段UI库与UI设计见出现问题最多的地方,这里我们先以前段UI库Element的表单组件为例,介绍下前段布局的思路。
(图一)
(图二)
(图三)
我们先来看看图一,我们经常把组价比作“积木”,这里我们把一个表单项看做成一个拼好的“方块”,再由不同的方块搭建成一个“表单房子”,而为了统一“方块”的一些数值是需要保持一致的,如input
高度、文字大小等。
一个“方块”由表单项的名称label
和表单项input
组成,可以看到这里为了保证label
和input
属于居中对齐,这两块“积木”的高度是一致的40px
,这里的label
通过设置line-heith
撑开高度,如果文字宽度超出label
设置的宽度,则会换行,此时label
的高度为40px*2
(如图二“此活动名称”),此“方块”的整体高度也同样会被撑高。
Element采用的统一文字、元素高度、间距来编写页面,但由于没有边框,会使得视觉上觉得间距忽大忽小,但如果我们使用红框圈一下后会发现,组件实际间距是相同的。
当然,如果想实现label
文字超出换行且与input
垂直居中、不同input
间距特殊处理(如图三,“开关”与“活动性质”间距为10,“活动性质”与“特殊资源”间距为0,实际展示效果为图二),代码层面也可以实现,但由于第三方组件库都是已经封装编译好的代码,改写难度大甚至无法改写,不推荐强行修改,以免因不可控性造成渲染问题。
如果是必要需求,可提前说明并告知是否为通用设计,共同讨论下实际应用场景下不同的展示效果,前端开发人员可根据需求重新封装新的组件,同样也可达到复用的目的。
布局
嵌套
开发页面时,标签可以并列、可以嵌套、可以多层嵌套,当然标签的嵌套也是有一定规则的,这里就不赘述了。知道这一点,可以帮助UI设计人员了解前端实现页面的思路,更规范严谨的设计页面。
我们以放置在卡片中的表格为例:
此图由两个独立组件组成:card
(卡片)和table
(表格)组成。
通常,我们会给card
组件设置一个padding
内边距,这个开发时会写到通用样式中且只写一次,而非每次都特别设置。这样无论card
中放置什么组件,组件最外层与card
最外层的距离都是相同的,这样既保证了统一性,又避免了代码的重复开发,减少开发成本。
标签的嵌套如同大盒子套小盒子,通常小盒子内的物体是不会超出大盒子的,如同上图中,当某一行被激活时active
,有一个底色改变的效果,且这个底色、行与行间的border
边框线与边缘card
边缘存在间距,而这个间距就是我们之前为card
设置的padding
值。
若想实现底色及边框线与最外层的card
左右定顶边对齐呢?代码实现上是完全没有问题,但代码写法及标签的使用完全不一样,需要特殊处理或重新编写设计组件。
类似的需求,在组件设计初期都应与开发人员讨论,将所有的可能性考虑进去,平衡组件的一致性和灵活性。
自适应
页面自适应实际分为两种:
- 页面大小及元素根据设备窗口大小整体缩放
- 元素大小不变,根据设备窗口大小适应布局
整体缩放多用于移动端,开发人员只需拿到设计稿设置对应的数值,页面在不同设备展示时会根据设备的分辨率按规则进行缩放。
下面我们来重点讲讲第二种自适应的不同布局方案
百分比
常见的栅格布局就是使用百分比的方式来实现的。
同时我们可以给元素之间设置的间距,如果间距是固定值,那么元素会根据窗口大小改变,间距不会。
而常用的布局容器则会采用固定Aside
宽度、Header
Footer
高度,让内容区域Main
根据窗口(100vw - Aside宽度)* (100vh - Header高度 - Footer高度)
vw
容器宽度
vh
容器高度
固宽高比
当需要元素不变,又需要元素以某种方式对齐,我们可以采用flex布局,这时如果容器大小改变,元素大小不变,间距改变。
流式布局
如果想适配两个尺寸差距过大的窗口,又不想改变元素及间距的大小,我们可以采用流式布局
标注
了解代码实现页面效果可以帮助UI设计人员更好的把想法传递给开发人员,那么在高保真设计时,有哪些方式可以帮助开发人员更快的开发页面呢?
通常,前端开发人员拿到墨刀工具设计的高保真页面,选择标注模式可以看到元素的数值,甚至墨刀会自动为这个元素生成一段css代码,开发人员只要根据这些数值开发就好了。
但如果对页面有些特殊需求(如最小最大宽度、特殊布局方案),或者使用墨刀的组件无法通过标注模式查看到内边距等信息,导致取值困难情况,这时就需要在页面中标注。
还有一种情况是,由于文字行号设置不对,而墨刀的文字组件是根据组件框大小计算距其他地方的距离,这也容易造成数值出现问题,类似问题需要在设计高保真时尽量避免。
了解CSS盒模型、页面布局在UI设计中的作用相关推荐
- CSS盒子模型/页面布局
1.盒子模型 页面布局要学习三大核心,盒子模型,浮动和定位.学好盒子模型对我们布局页面帮助很大! 1.1看透网页布局的本质 网页布局过程: 先准备好相关的网页元素,网页元素基本都是盒子 利用CSS设置 ...
- css盒模型、布局模型、 flex弹性盒模型及样式设置小技巧
一.盒模型 元素分类 常用的块状元素有: <div>.<p>.<h1>...<h6>.<ol>.<ul>.<dl> ...
- 导航菜单UI设计中的作用,优秀案例临摹起来!
导航菜单是人机交互的最主要的桥梁和平台,主要作用是不让用户迷失方向.一个网页或App产品要想有很好的可用性,需要做好的最基本的一点就是导航的设计或者说引导用户的设计. 导航毫无疑问是设计师设计产品可用 ...
- 【Day06】请画出 Css 盒模型,基于盒模型的原理,说明相对定位、绝对定位、浮动实现样式是如何实现的?
一.Css 盒模型 页面上任何一个元素,我们都可以看成是一个盒子,盒子会占用一定的空间和位置,他们之间相互制约,就形成了网页的布局. w3c 的盒模型的构成:content border paddin ...
- CSS学习—盒模型和布局模型
最近做的小项目需要搭建一个小网站,因此从 慕课网 上学习HTML+CSS的基础知识,将接触到的知识点用这个博客总结出来. 一.盒模型 1.元素分类 在CSS中,html中的标签元素大体被分为三种不同的 ...
- 从零开始学前端 - 7. CSS盒模型 margin和padding详解
作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...
- 简要介绍css的盒模型,CSS盒模型的介绍
CSS盒模型的概念与分类 CSS盒模型就是一个盒子,封装周围的HTML元素,它包括内容content.边框border.内边距padding.外边距margin. CSS盒模型分为标准模型和IE模型: ...
- 深入理解CSS盒模型 - 程序猿的程 - 博客园
深入理解CSS盒模型 本文是学习中传思客在慕课网开的课程<前端跳槽面试必备技巧>的学习笔记.课程地址:https://coding.imooc.com/class/evaluation/1 ...
- 尖刀出鞘的display常用属性及css盒模型深入研究
一:diplay:inline-block 含义:指元素创建了一个行级的块级元素,该元素内部(内容)被格式化成一个块级元素,同时元素本身则被格式化成一个行内元素.更简单的说就是说inline-bloc ...
最新文章
- 怎么用Leangoo管理Bug
- 2017 年脑机接口研发热点回眸
- Swift2.0 中的String(一):常用属性
- hashmap 不释放空间_刁难问题,为什么HashMap默认容量为16加载因子为0.75
- | 一文读懂迁移学习(附学习工具包)
- 《影视特效镜头跟踪技术精粹(第2版)》——导读
- 认识HttpModule
- python 3 json 序列化
- JAVAFX-1 开发应用
- 关于sentaurus使用感
- 从分类到选型,一文了解 SITOP 电源
- 30个最快速的Webnbsp;Proxy代理
- 教你如何写初/高级前端简历
- 数据分析课堂笔记Day10(20221123)
- panic: reflect: reflect.Value.SetString using value obtained using unexported field
- 第1章 Redis查阅官网和基本配置
- 使用MS Word设计和打印自己的圣诞贺卡,第1部分
- 态度决定高度,高度决定命运。对自己要狠一点,再狠一点,因为,你要的比别人多,就必须付出得比别人多。
- 全球最大多物种水族馆将于5月23日向公众开放,容纳68000多只海洋动物 | 美通社头条...
- git在远程仓库传项目出现的问题
热门文章
- 推荐一个快速部署Java,NodeJS,Python,Scala,.NET等Web应用程序的开源PASS平台
- Layui时间插件laydate只选择时分
- python 绘图英文字体_如何在matplotlib和networkx中显示非英语字体?
- 毕业设计 基于Web停车场管理系统的设计与实现
- 特征工程与CTR预估
- Z-Score归一化方法
- 【SpringAOP进阶】添加注解方式进行接口增强
- 2017年蓝桥杯模拟赛
- java structs_Structs2 Action使用
- 开源php留言板源码,PHP开源多功能留言板(SyGuestBook)