ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:23.20KB ,
资源ID:6743820      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6743820.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(margin的布置.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

margin的布置.docx

1、margin的布置margin系列之布局篇发表于2013-12-31 | 分类于CSS | 14条评论前端工程师对CSS的基本诉求布局能力或许是Web前端工程师对CSS的最基本的诉求,当开始进入到这个岗位,就避免不了要和CSS打交道,而和CSS交往,布局当然是不可或缺的。很遗憾的是,CSS2.1之前都没有出现真正意义上的布局属性,直至现如今的CSS3,才开始出现了一些,如:flex, grid 等,不过其兼容性及国内浏览器的使用情况,真令人捉急。不过,有需求就会有变通,对于达成布局目的,已衍生出各式各样的方法,如:float, inline-block, table, absolute 等等。

2、margin的布局之道其实,这个话题有点脱离margin的能力范围,因为单纯的margin并无法完成复杂布局,它更多做的是辅助,但却又难以替代。经典左右结构两栏结构应该是最常见和经典的网页呈现之一吧?如下图一:classsic layout(图一)相信对于这样一个网页呈现,你不会陌生。那么你有多少种方案可以达成该布局?我想,4至5种应该是保守估计吧?这次,我们只看margin是如何做的。absolute + margin 方式HTML头部 侧边栏固定宽度 主内容栏自适应宽度底部CSS#aside position:absolute; top:0; left:0; width:200px;#ma

3、in margin-left:210px;如上关键代码,我们即可实现图一布局,该布局有一个特点就是,#main可以自适应可用空间。假定HTML是给定的,我们来解读一下CSS代码:我们知道块级元素的特性之一是换新行,也就是说,如果想让#main和#aside在同行显示,我们要么改变其显示属性为inline-level(即之前说的inline-block布局方式),要么改变其流方式(absolute, float, flex and etc)。如上述代码,我们使用了absolute,即让 #aside 脱离常规流,通过绝对定位到想要的位置。主内容栏自适应宽度同时你会发现,我们并有改变#main的显

4、示属性或者流方式,也就是说其仍然具备块级元素的特性,所以它会自动适应剩余宽度,即我们常说的自适应宽度。我们并不希望#main区域会包含#aside在内,于是利用margin给 #aside 预留出足够其显示的空间,即可达成我们所要的布局。可能你会问为什么是margin-left:210px而不是200px,实际确实应该是200px,多出来的10px只是为了创建一个列间隙,与布局实现无关。来看看具体的实现DEMO1:margin+absolute布局:左栏固定主内容自适应就这样,是不是很简单?其实它还有亮点,那就是:任意调整列顺序在不修改HTML的情况下,只需简单的修改CSS,我们即可让左右两栏

5、的顺序调换,来看代码:CSS#aside position:absolute; top:0; right:0; width:200px;#main margin-right:210px;其实现原理没变,同样看看DEMO2:margin+absolute布局:右栏固定主内容自适应主内容优先显示可以更Cool一点,你觉得呢?很多时候,你也许会考虑到,不论在何种情况下,总想保证主要的内容优先于次要的内容呈现给用户,那么,怎么做?很简单,只需要将主要内容的HTML排在次要内容的HTML之前即可,因为它是顺序加载渲染的。我们可以这样:HTML头部 主内容栏自适应宽度 侧边栏固定宽度底部是的,我们只需要将

6、#main的HTML挪到#aside的HTML前面,令人兴奋的是,改变HTML之后,CSS不需要做任何改变。我们来看DEMO3:margin+absolute布局:左栏固定主内容自适应,主内容有限显示当然,调正列顺序的DEMO4:margin+absolute布局:右栏固定主内容自适应,主内容有限显示也同样简单,我们只需要写HTML时注意一下即可。致命缺陷列举了absolute+margin布局的很多优点,但只说一个问题,就足以让你在是否选用这种方式时深思熟虑,是什么呢?我们知道absolute是定位流,脱离正常排版,也就是说绝对定位元素不影响其上下文的排版方式,你意识到我想说什么了么?OK,

7、用代码来演示:HTML头部 主内容栏自适应宽度 侧边栏固定宽度,我的内容可能比主内容多,高度比主内容栏高底部看完代码,估计你猜到了。是的,#aside无法撑开父元素的高度,它将会溢出父元素区域,结果如下图:classsic layout(图二)来看看这缺陷所导致的情况DEMO5:margin+absolute布局的致命缺陷此时假设你设置父元素overflow:hidden那么溢出部分将会被裁减,同样不符合布局意图,无法可破。所以在内容量不可控的场景,不推荐使用这种方式。float + margin 方式和absolute + margin方式一样,float + margin方式一样是经典的利

8、用来布局的方案,并且被更广泛使用。我们仍然以图一为例,来看代码:HTML头部 侧边栏固定宽度 主内容栏自适应宽度底部CSS#aside float:left; width:200px;#main margin-left:210px;如上述代码,我们使用了float,即从图文环绕形态演变而来。当#aside定义了float,那么紧随其后的元素将会环绕在其周围。不过环绕并不是我们想要的结果,我们想要的是 #main 也自成封闭矩形,所以利用margin留出足够#aside显示的空间,中断环绕即可。当然,此时#main也是自适应宽度的,来看具体实例DEMO6:margin+float布局:左栏固定主

9、内容自适应它是否也具备可任意调整列顺序的特点?何不一试?CSS#aside float:right; width:200px;#main margin-right:210px;看过DEMO7:margin+float布局:右栏固定主内容自适应,你会发现,是的,这种方式也支持任意调整列顺序,很棒。从这种趋势看来,貌似float + margin的方式会成为黑马,不过遗憾的告诉你,这种方式无法支持主内容优先显示。但我们有更Cool的解决方案。float + 负margin 方式接下来我要说的大家可能都猜到了,对,经典的圣杯布局。至于圣杯的名字由来,大家可以自行Google,这里不做赘述。恩,HTM

10、L当然是使用主内容优先显示的那种:HTML头部 主内容栏自适应宽度 侧边栏固定宽度底部CSS#bd padding-left:210px;#aside float:left; position:relative; left:-210px; width:200px; margin-left:-100%;#main float:left; width:100%;如上代码,既是圣杯布局的核心Code,如果你看懂了,你会发现,这其实很简单,不是么?简单解释一下上面的CSS Code,首先我们是在做一个左侧固定宽度,右侧自适应宽度的布局。我们说过要让块级元素在同行显示的条件:改变显示方式,改变流方式,这

11、里我们选择了使用float来将#main和#aside变成浮动流。OK,这时我们具备#main和#aside能在同行显示的前置条件。我们知道,浮动元素其宽度如果没有显式定义,则由其内容决定。正好,#aside是定宽的,所以显示给它定义width:200px,但此时#main该怎么办?不设置width不对,因为宽度将被内容左右,设置width:100%也不对,因为这样的话,就没有#aside的立足之地了,正确的应该是width: calc(100% - 200px),不是么?可惜,这是新特性,只好作罢。变通?是的,有的时候稍微换个思路,你会觉得豁然开朗。#main不是要自适应吗?那就给它个100

12、%,怎么做?我们在包含块#bd中就将#aside的宽度刨除,宽度全部都给#main。恩,我们只需要这样#bdpadding-left:210px;(10px仍然是用来做间隙的),这时#main就可以设置width:100%了,由于#bd设置了padding,所以已在左边预留出了一块宽210px的区域。此时的问题在于如果将#aside挪到这个地方,你想对了,我们是在聊负margin布局,自然需要利用上。#asidemargin-left:-100%;这样可以了吗?很明显,这样还不行,此时#aside和#main的起始位置将会重合,因为#aside的margin-left计算值是相对包含块来计算的

13、,而此时包含块的宽度等于#main的宽度。如何让#aside再向左偏移210px?显然margin是不行了,因为我们已经用掉它了。如果你看过之前的文章的话,你可能还记得,有一篇文章讲margin系列之与相对偏移的异同。恩,是的,这时我们可以借助相对偏移。向左偏移210px是件很简单的事:#asideposition:relative;left:-210px;。至此,你的布局OK了,这就是圣杯的实现方式。来看已实现好的示例DEMO8:圣杯:左栏固定主内容自适应当然,圣杯布局必须可以任意调整列顺序,要不,怎么能说是更Cool些的方案呢?CSS#bd padding-right:210px;#aside float:left; position:relative; right:-210px; width:200px; margin-left:-200px;#main float:left; width:100%;这个就直接看示例好了,不再一一解释代码DEMO9:圣杯:右栏固定主内容自适应所以圣杯布局具备前两种方式共同的优点,同时没有他们的不足,但圣杯本身也有一些问题,在IE6/7下报废,不过不用慌,因为它可被修复。你想到方法了吗?

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1