页面动态布局感悟

有时候我们编写好了一个美观的页面,自以为很满意,但是当别人用的时候改变浏览器的宽度,或者放大缩小浏览器,页面的美感就很容易被打破,这就是因为你的页面布局不够动态!

所谓动态布局就是你的页面在各种情况都不会出现布局混乱,元素重叠,空白过多,以及出现左右滚动条等情况。所以写好页面,千万不要因偷懒而草草结束,记着做以下两步:改变你的浏览器的宽度,从最大到最小;按住Ctrl键,滚动鼠标,缩放你的浏览器。如果这两种情况都是OK的。那么就真的完美了!
如何动态布局?下面就根据我前端开发的经验,谈谈自己的心得。
一:长度段位避免一味地用px,多采用em,百分比

相信有经验的前端,都踩过px的很多坑,也许由于有产品经理的效果图,用px能快速精准的绘制出理想的页面,但这有一个致命的问题,缩小浏览器,文字一定会溢出容器,放大浏览器容器一定会溢出浏览器!

用em完全可以代替px。一般情况下1em=16px,用这个公式把你的px都替换成em,你会惊奇的发现刚才所有的问题都消失了。(可能有些细节明显没有px好,这是因为换算不是绝对的,还需要你根据实际情况再修改)
1em就是一个当前字体尺寸,注意是当前!随着你放大缩小屏幕,1em代表的像素也跟着变了,在不同的环境中由于默认字体尺寸不一样,正常的1em也不一样,但是由于你的布局是基于em,总体的相对布局始终不变,这下你就明白为何如此神奇了吧。

动态单位有两类,一类是基于当前字体尺寸,除了em,还有ex等。

另一类是基于长度的,常见的有pt和百分比,pt是固定宽度单位,1英寸=72pt,说他是动态单位是因为它的确有动态的特征,比如相同分辨率但屏幕尺寸不同,那么1pt代表的像素是不同的。百分比通常用于做总体布局,比如一行显示两列可以用50%

应该使用什么长度单位,没有绝对的,需要根据情况灵活选择,不过上面提到的所有单位足够满足任何情况了!最后再说一下:不要总是用px ,多想想em和百分比吧!

二:杜绝 table,多采用div布局

杜绝table也许有点过了,有些时候table还是最好的选择。但是根据我的经验,很多很多时候,你下意识的的选择table时,都不是最好的选择!
table有两个弱点,一是无法直接限制列宽,二是无法换行(指整个tr必须是一行),这两个弱点是雪上加霜的关系。由于无法直接限制列宽,当内容很宽时,所在的td会非常宽,这会导致后续的td没有足够的位置,而同一个tr的td又不能换行,这简直太致命了!
曾经尝试过限制td的宽度,方式是在里面加一层div,限制div的宽度,看起来就像限制td一样,不过最终的效果不是特别的理想。不能直接限制宽度,导致文本溢出用省略号也不行。总之用了table你将无法发挥你css的才华!
建议仅在两种情况下使用table:你要展示的 的确是一个table,而非因为样式比较整齐,且每一列的内容宽度是可知的;明确有规定要用table。

除了div,还有很多类似于div的比如article、session等,这是html5的,语义更强。很多人面对复杂的页面用div布局无从下手,即使做了很长时间的前端开发人员,也无法真正驾驭这种灵活而强大的布局方式。其实没那么难,记住先规划,再布局。先布局好总体结构,再布局小的结构,最后布局细节。还有就是多练习,多感悟吧。
三:明确栅格系统不是万能的
关于栅格系统我就不说了,没用过的可以自己查。

用过的,不要过于吹捧它,的确栅格系统非常‘动态’,甚至还继承了table的整齐风格,而且还不需要你自己去实现,以致于我发现很多人在真正理解并掌握了栅格系统后,开始有种狂热的热情,恨不得将所有的动态布局都交给它。但它的确不是万能的。

随着硬件设备越来越高端,强大,屏幕的分辨率也水涨船高,低分辨率模式(xs,sm,md)都还好,但是到了lg模式就不一样了,lg的container最小宽度是1170px,但是现在的显示器随随便便都是1800px以上。跨度达到了700px,整个一小平板的宽度!
所以lg模式的布局,适应性很差原因就在这里,经常出现某一列过宽,但在某些设备上又刚好,让你完全不知道怎么修改!

先写这里,改天再写!

时间: 2024-08-08 19:17:36

页面动态布局感悟的相关文章

Android 中使用代码动态布局

Android 中使用代码动态布局 本文介绍在android中使用代码动态布局,有时候根据不同的需求,比如需要根据服务器上的条目个数来决定app中页面布局控件(显示个数,图标等).此处介绍通过java代码进行动态布局. 一.效果图: 图片随便找的,将就将就吧 二.给出xml文件布局 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schema

登录页面动态验证码的设置

登录页面动态验证码的设置 采用php中创建对象的思想进行动态验证码的设置 1.创建出一个背景图片,用来存放动态码输出位置 1 function createImage(){ 2 // 创建图片对象,并设置图片的宽高 imagecreatetruecolor 3 $this->image = imagecreatetruecolor($this->width, $this->height); 4 // 图片创建背景颜色 5 // rand(下界,上界), php中的随机数 6 $backg

问题:关于贴友的一个书本页面简单布局(html+css)的实现

贴友需求:以html+css仿照书本的页面实现布局效果(见图) html代码: 1: <!-- 我的博客:http://www.ido321.com --> 2: <!DOCTYPE HTML> 3: <html> 4: <head> 5: <meta http-equiv="content-type" content="text/html;charset=utf-8"> 6: <title>T

关于贴友的一个书本页面简单布局(html+css)的实现

贴友需求:以html+css仿照书本的页面实现布局效果(见图) html代码: 1: <!-- 我的博客:http://www.ido321.com --> DOCTYPE HTML> html> head> meta http-equiv="content-type" content="text/html;charset=utf-8"> title>Test</title> meta name="au

HTML 页面源代码布局介绍

http://www.cnblogs.com/polk6/archive/2013/05/10/3071451.html 此介绍以google首页源代码截图为例: 从上到下依次介绍: 1.<!DOCTYPE html> 此标签可告知浏览器文档使用哪种 HTML 或 XHTML 规范. XHTML规范:必须小写,有开始结束标签,属性也用双引号. HTML规范:不区分大小写,有开始和结束标签,也可把结束标签放在开始标签里,如:<input type='text' /> .属性可用双引号

Android自定义动态布局 — 多图片上传

Android自定义动态布局 - 多图片上传 本文介绍Android中动态布局添加图片,多图片上传. 项目中效果图:    技术点: 1.动态添加格局中的线条和添加图片的+号 2.多张图片异步上传 首先来看一下布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layo

Andriod动态布局

1.近几日接入一个第3方Geesee的直播视频,碰到一个动态布局的问题,有感而发 需求:点击按钮,切换视频View与文档View的位置.而且文档那个小窗口是可以全屏拖动的,所以 没有将两个View写在同一层级. 问题场景:第3方的Demo将视频和文档各自写了个Fragment,我布好局之后,发现切换两者的位置 出现了极大的困难. 网上搜了2种方法, 第1种方法:利用LayoutParams,RelativeLayout等设置 一些属性,但是要求两个交换位置的View在同一个RelativeLay

web页面动态加载UserControl,并调用用户控件中的方法来初始化控件

1,HTML页 头部注册: <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/CeShiBu.ascx" TagPrefix="UserControl" TagName="CeShiBu"%> <%@ Register Src="~/WorkLog/WorkLogNewV1/UserControl/KaiFaBu.ascx" TagPrefix=&quo

WPF实现界面动态布局

以前总觉得动态布局是个很麻烦的问题,是个很需要功力的问题.但是貌似在.NET中,在WPF中却不是那么的麻烦.下面介绍我现在实现的一个动态布局的实例. 因为有需求,所以困难得克服!而我们的需求表名,不同的用户需要的界面元素是不一样的,我们总不能每次都去修改代码吧!所以,需要完成动态布局. 这里主要完成这样一个功能: 1.动态画线 2.动态new控件 3.线和控件都是可拖拽并随意放置位置的 4.线和控件是可删除的 5.控件是可绑定属性和事件的 要完成这样的功能,我们首先得定义三个鼠标事件,即:左键d