博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端css:“圣杯布局”
阅读量:6252 次
发布时间:2019-06-22

本文共 2457 字,大约阅读时间需要 8 分钟。

昨天面试前端,一面危险通过,面试官建议我看看“圣杯布局”,听起来很玄妙的名字,花了一晚上弄明白怎么回事,惊讶于前端工作的细节和技巧!

我先看几个基础,在后面要用到的:

 

1.CSS right/left 属性

right/left属性规定元素的右/左边缘。定义了定位元素右/左外边,与其包含块右/左边界之间的偏移。

right:50px:设置元素位置,使其右边缘距离其包含元素的右边缘5。它的右边和包含它的元素的右边之间的距离5px;

                    
pppppppppppp

元素位于最右侧距离窗口右侧10px处;

 

2.margin-left:-100%  这种表示中负数什么意思?

先看一个例子:

 

                    
tttttttttttttt
tttttttttttttt
tttttttttttttt
tttttttttttttt
tttttttttttttt
tttttttttttttt
tttttttttttttt
tttttttttttttt
tttttttttttttt
pppppppppppp
pppppppppppp
pppppppppppp
pppppppppppp
pppppppppppp

 

我们知道,浮动的元素,只有在位置不够的时候才会被挤到第二行。上面两个div都有足够的位置,所以排在一行没有换行:

使用margin-left:-600px;后是这样:

 

margin-left:10px 是左边距10px,效果是content向右移10px,那么-10px就是content,就是蓝色块向左移10px;

这里刚好移动-600px达到红色box的左边!

 

如果红色块如果宽度设置为100%,蓝色块只浮动,不使用margin左负值,后面的元素是会被挤在第二行的。

如果把宽度设为-100%:

 

 我们可以通过以上方式,让红色box的width=100%,自适应窗口大小,然后让左右两边通过负边距来放置两个box;实现如下:

 

下面,我们尝试实现“圣杯布局”

利用浮动元素的负边距来定位,代码如下:

center
left

现在,通过简单的负边距,已经让left和right定位到正确的位置,剩下的问题是如何让center也定位到正确的位置(现在center是100%铺满的,第一个想法就是在center两侧预留两块位置给left 和 right):

试着给container添加padding:

#container{        overflow: auto;        padding: 0 190px 0 190px;

结果现在center定位正确了,left和right位置不对了!如何修改left和right? 我们尝试在其现有位置上进行偏移,用position: relative!
#left{        background:green;        width:190px;        margin-left:-100%;                position: relative;                left: -190px;       }    #right{          background:yellow;           width: 190px;                margin-left: -190px;               position: relative;                right: -190px;        }

相对其原来位置再进行偏移:

基本上效果出来了! 不过感觉用former也可以达到这个效果!求讨论。    

 

转载于:https://www.cnblogs.com/McQueen1987/p/3978328.html

你可能感兴趣的文章
struct dev_t
查看>>
Java 原型模式
查看>>
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
查看>>
手机web——自适应网页设计(html/css控制) - 51CTO.COM
查看>>
ibatis resultMap 的用法
查看>>
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
webview与JS的交互
查看>>
国内外MD5在线解密网站
查看>>
187实现录制视频功能
查看>>
iframe刷新父页面
查看>>
如何提高团队管理能力1
查看>>
Redmine中使用SVN进行版本管理经验总结
查看>>
【OC语法要闻速览】一、方法调用
查看>>
使用光标
查看>>
find命令之exec
查看>>
Modular Inverse(模逆元,扩展欧几里德)
查看>>
找出两个文本文件的不同的行
查看>>
练习PYTHON之GEVENT
查看>>
Web持久化存储Web SQL、Local Storage、Cookies(常用)
查看>>