在一个布局中,假设有导航元素和内容元素,切给他们都分别应用了背景,理想情况下,背景应该拉长到整个布局的最大高度,从而形成列的效果,但是实际上,因为导航元素没有扩展到最大高度,所以它们的背景不会拉长,如图所示,左边的导航的灰色背景的高度没有达到最大高度。

解决方法:为创建列的效果,需创建一个伪列,即在一个占据布局最大高度的元素上应用重复的背景效果——faux列。关键在于创建合适的背景图片。

固定宽度的布局

只需在容器元素上应用一个垂直重复的背景图像,其宽度与导航区域相同。为固定宽度的布局设计faux列是很容易的,因为知道列的尺寸和位置。

#wrapper{
background: #fff url() repeat-y left top;
}

流式布局

流式布局有点复杂,因为列的尺寸和位置随着浏览器窗口缩放而变化,技巧是按百分比对背景图像进行定位。

  • 使用像素设置背景的位置:图像的左上角会定位在距离元素左上角指定像素数的地方。
  • 使用百分数定位:会对图像上的对应点进行定位,例如:将垂直和水平位置设置为20%,那么实际上会把图像上距离左上角20%的点定位到父元素上距离左上角20%的位置。

例如需要创建如下图的布局:左边导航为次内容区,占总内容区的25%,右边为主内容区,主内容区中左边为主内容区,占主内容区的72.82%,右边为次内容区。

简单代码如下:

<div class="wrapper">
<div class="inner-wrapper">
<div class="content">
<div class="primary">
<div class="primary"> </div>
<div class="secondary"> </div>
</div>
<div class="secondary"> </div>
</div>
</div>
</div>
<style>
.wrapper{
width:76.8%; /*960÷1250=76.8%*/
margin:0 auto;
text-align:left;
min-width : 62em; /*比较小的窗口尺寸,布局太挤,所以添加以em为单位的min-width*/
max-width : 125em; /*设置为em为单位的max-width是为了确保文本行的长度适合阅读*/
}
.content .primary{
width : 72.82%; /*670÷920=72.82% ,因为在wrapper设置了水平居中,所以40px均匀分布在content容器两侧各20px*/
float:right;
display:inline;
}
.content .secondary{
width:25%; /*230÷920=25%*/
float:left;
display:inline;
}
.content .primary .primary{
width:59.7%; /*400÷670=59.7%*/
float:left;
display:inline;
}
.content .primary .secondary{
width:34.33%; /*230÷670=34.33%*/
padding-right:3%; /*20÷670=3% 设置内边距,避免其包含的文本紧挨着元素的右边缘*/
float:right;
display:inline;
}
</style>

上述代码实现了三列,但是并没有实现两侧的背景图像,下面步骤来逐步实现:

1.给次内容区创建faux列

  • 先创建一个faux图像,4000px宽,5px高。
  • 因次要内容区是总宽度的25%,所以在背景图像上创建宽25%的对应区域,即图像的faux列部分是宽为1000px的灰色,其余为白色。
  • 图像的faux列的右边缘与图像的左边相距25%,次内容区的右边缘与容器的左边相距25%,所以如果把这个图像作为背景应用于容器,并将水平位置设置为25%,那么faux列的右边缘会正好与次内容区的右边缘对齐。

增加的代码为:

.wrapper{
background:#fff url(1.gif) repeat-y 25% 0;
}

2.为主内容区创建背景

  • 先创建一个faux图像。
  • 因主内容区1是主内容区总宽度的72.82%,所以在背景图像上创建宽72.82%的对应区域为白色,其余为灰色。
  • 图像的faux列的左边缘与图像的左边相距72.82%,次内容区的左边缘与容器的左边相距72.82%,所以如果把这个图像作为背景应用于容器,并将水平位置设置为72.82%,那么faux列的左边缘会正好与次内容区的左边缘对齐。
  • 因为在wrapper元素上已经应用了背景,所以需要添加一个容器元素,然后将该faux列的背景图像应用于这个新的容器元素,即inner-wrapper元素。

增加的代码为:

.inner-wrapper{
background:#fff url(2.gif) repeat-y 72.82% 0;
}

ch8 faux列的更多相关文章

  1. html+css笔记

    文档结构 1.html文档结构 ①文档类型声明 严格型(标准模式):    <!DOCTYpE HTML>   HTML5 XHTML 1.0:<!DOCTYpE html pUbL ...

  2. 精通CSS:高级Web标准解决方式(第2版)

    精通CSS:高级Web标准解决方式(第2版) 跳转至: 导航. 搜索 层叠重要度:(也就是说.用户!important能够覆盖inline style) !important.用户>作者.最后是 ...

  3. ch4 背景图像基础

    如果希望网站有一个好看的背景,只需将背景应用于主体元素,即在body上应用background-image,默认情况下浏览器水平和垂直的重复显示背景图像,让图像平铺在整个页面上,可以选择背景图像是垂直 ...

  4. ch8 基于浮动的布局(两列浮动布局、三列浮动布局)

    CSS布局技术的根本是3个基本概念:定位.浮动.外边距操纵. 只需要设置希望定位的元素的宽度,然后将它们向左或向右浮动.因为浮动的元素不再占据文档流中的任何空间,它们就不再对包围他们的块框产生任何影响 ...

  5. ch8 CSS 3列(等高文本列)

    css 3可以创建等高文本列,通过column-count.column-width.column-gap属性实现.假设标记如下: <h1>Socrates</h1> < ...

  6. ch8 高度相等的列--CSS方法

    如下图所示效果,可以使用表格实现,本文采用在CSS中实现. 标记如下: <div class="wrapper"> <div class="box&qu ...

  7. 八种创建等高列布局【出自w3c】

    高度相等列在Web页面设计中永远是一个网页设计师的需求.如果所有列都有相同的背景色,高度相等还是不相等都无关紧要,因为你只要在这些列的父元素中设置一个背景色就可以了.但是,如果一个或多个列需要单独设置 ...

  8. 古老的CSS同高列问题

    今日在网页设计时,遇到了希望页面的几列同高需求的实现问题,搜罗了一下google,找到以下文章,感觉不错,翻译过来,同时作为学习加深印象. https://css-tricks.com/fluid-w ...

  9. 在SQL2008查找某数据库中的列是否存在某个值

    在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...

随机推荐

  1. 安卓开发:在Mac系统中搭建安卓开发环境

    第一步:检查下自己的电脑上有没有安装JDK(Java Development Kit)(2019年7月安装的最新版是JDK 1.8.0_181版本),通过在终端中输入"java -versi ...

  2. 杭电2602 Bone Collector

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. 谈一谈并查集QAQ(上)

    最近几日理了理学过的很多oi知识...发现不知不觉就有很多的知识忘记了... 在聊聊并查集的时候顺便当作巩固吧.... 什么是并查集呢? ( Union Find Set ) 是一种用于处理分离集合的 ...

  4. Pipenv & 虚拟环境

    本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地说,您希望如何管理依赖项可能会根据 ...

  5. 洛谷 P3371 【模板】单源最短路径(弱化版) && dijkstra模板

    嗯... 题目链接:https://www.luogu.org/problem/P3371 没什么好说的,这是一个最短路的模板,这里用的dijkstra做的... 注意: 1.dijkstra和邻接表 ...

  6. LeetCode.62——不同路径

    问题描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 ...

  7. MySQL高级 InnoDB 和 MyISAM 的区别

    InnoDB:支持事务处理等不加锁读取支持外键支持行锁不支持FULLTEXT类型的索引不保存表的具体行数,扫描表来计算有多少行DELETE 表时,是一行一行的删除InnoDB 把数据和索引存放在表空间 ...

  8. 下载安装charles并导入证书、使用

    抓包原理 1.截获真实客户端的 HTTPS请求,伪装客户端向真实服务端发送 HTTPS 请求. 2.接受真实服务器响应,用 Charles 自己证书伪装服务端向真实客户端发送内容 3.证书导入 看博客 ...

  9. 编写自己的JDBC框架

    目的 简化代码,提高开发效率 设计模式 策略设计模式 代码 #连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost ...

  10. 1013 Battle Over Cities (25分) DFS | 并查集

    1013 Battle Over Cities (25分)   It is vitally important to have all the cities connected by highways ...