[翻译]寻找圣杯 In Search of the Holy Grail
作者:abdvl 来源:Alipay UED 发布时间:2008-11-12 13:10:00
最近在内部讨论关于”完美三栏”的话题,看到一篇”In Search of the Holy Grail“,相当的好.故此翻译之.
In Search of the Holy Grail
很抱歉我没有将这篇文章命名.我不是想夸大他的重要性或是轻视其他的Holy Grails.但是确实是这么称呼,我们都明白它的含义.
三栏,一个是固定宽度的导航栏,另一个是GOOGLE广告,或是Filckr图片展示,就像Fancy的松露巧克力一样,和一个重要的柔滑的夹心。在这个博客流行的黄金年代它是相当适用的,加之相当大的实现难度,理所应当的获取了”圣杯”的名称.
有很多文章是讨论关于”圣杯”的,也有很多很好的模板可以使用。但是,所有的方案都是以牺牲以下特性为代价的:合理的内容顺序,宽度自适应,合理的标签。这三者往往是这难以达到合理的布局中要折中的元素
在最近的一个项目中我终于找到了传说中的圣杯。我在不会改变您的代码和灵活性的前提下尽可能的描述他。他会是:
一个自适应适应的中心和固定宽度的侧边栏
允许中间的内容先于其他出现在代码中
允许任何一栏都是最高的高度
只需要额外的一个DIV标签
非常的简单的CSS代码和很少很少的HACK 补丁
站在巨人的肩膀上
这个技术的灵感来自于Alex Robinson’s的One True Layout。他曾经在他的文章里阐述过”圣杯”的若干问题,但是他的解决方法需要两个包装并且要求每一栏都需要一个父级DIV,否则很难写内在结构.
另一方面则是由Eric Meyer’s的写法想到的,他利用了多种类型的单元混合定位。它的例子中也是用了固定的侧边栏和自适应的中心层,可是不幸的是,他依赖于近似的百分比,不是固定的值,而且填充了一部分随屏幕分辨率不同而自适应宽度的层。
言归正传,看看代码
代码是很直观而且很优雅的。
(为了直观起见,我们使用了非语义化的”中心”、”左”和”右”来阐述我们的代码,但是我们建议您在您的代码中使用语义化的标签 -Ed.)
<div id="header"></div>
<div id="container">
<div id="center" class="column"></div>
<div id="left" class="column"></div>
<div id="right" class="column"></div>
</div>
<div id="footer"></div>
一个额外的DIV包含着我们的三个层,这样的结构符合我集中内容上一体的标记为一体的习惯(obsessive compulsive markup habits. 翻译的不准确)
样式很也简单,左边侧栏是200PX,右边是150,为了简便标示用LC,RC,CC分别代表左边,右边和中间,样式如下:
body {
min-width: 550px; /* 2x LC width + RC width */
}
#container {
padding-left: 200px; /* LC width */
padding-right: 150px; /* RC width */
}
#container .column {
position: relative;
float: left;
}
#center {
width: 100%;
}
#left {
width: 200px; /* LC width */
right: 200px; /* LC width */
margin-left: -100%;
}
#right {
width: 150px; /* RC width */
margin-right: -150px; /* RC width */
}
#footer {
clear: both;
}
/*** IE6 Fix ***/
* html #left {
left: 150px; /* RC width */
}
重新度量你想要的模型的价值,你会发现其实很简单.这布局能在Opera, Firefox, and IE6(需要在最后一句HACK).IE5.5则需要HACK CSS盒模型。刚好也给读者一个练习的机会(Orz).
再看一遍这段优化代码(例子)


猜你喜欢
- 列表的索引取值1. 列表的索引和字符串一样,列表中的每一个元素也都有一个属于自己的编号,这个编号就是列表的索引。2. 列表索引取值通过字符串
- 本文实例讲述了Python模拟登录12306的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python# -*- c
- mysql密码过期了,今天遇到了连接mysql,总是连接不上去, 错误现象1: An attempt by a client to chec
- 【原文地址】 Fixes for Common VS 2008 and .NET 3.5 Beta2 Issu
- 创建测试数据:import pandas as pdimport numpy as np#Create a DataFramedf1 = {
- Q1:PEP8是什么?Python之禅(import this)是什么?这题是考察你对编码规范的认识,无论是自己写代码还是在团队中写代码,了
- Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–>迭代器定义:对于list、string、tuple
- 前言:最近在学习PYQT5,感觉还挺有趣的,顺便记录一下自己的打包记录,也就当学习笔记啦,如果刚好也在学习python打包的小伙伴可以学一学
- cuda上tensor的定义a = torch.ones(1000,1000,3).cuda()某一gpu上定义cuda1 = torch.
- 一、打开摄像头import cv2import numpy as npdef video_demo(): capture = c
- 大家都知道在python中,一切皆对象,变量也不再具有类型,变量仅仅是对象的一个引用,我们通常用变量来测类型,通常测得就是被这个变量引用得对
- 如果你想进一步了解如何用JavaScript来为网页添加交互性的话,你也许已经听过JavaScript的事件代理(event delegat
- 我的坐标是深圳,2022年以来,大部分时候要求24小时,少部分时候要求48小时,更少的时候要求72小时,没有更长的情况。本文根据我的核酸检测
- Access SQL 函数 收藏 ▲日期/时间CDate 将字符串转化成为日期 select CDate("2005/
- upload.htm <html><head><title>网站维护 -
- 一、前言1.1 关于描述性统计分析概括地来说,描述性统计分析就是在收集到的数据的基础上,运用制表和分类,图形以及计算概括性数据来描述数据特征
- 合理地扩大页面链接响应区域可以提高网页的易用性。同时还要兼顾到链接的交互一致性以及视觉上的平衡,就需要做一些特殊的处理。实例一:一张图配一个
- urllib3是一款Python 3的HTTP客户端。Python标准库提供了urllib。在Python 2中,另外提供了urllib2;
- 搭建ftp服务器server端# -*- coding:utf-8 -*-from pyftpdlib.authorizers import
- python 打开浏览器,可以做简单的刷网页的小程序。仅供学习,别用非法用途。python的webbrowser模块支持对浏览器进行一些操作