1.布局规划

1.1 网格

网格系统是设计师在切分布局时作为参照的一组行和列。

1.2 布局辅助类

类名用于为布局添加样式。为了让样式可以重用,让类名表达其意图。

.column { /* 一般列的样式 */ }
.column-half { /* 占列宽的一半 */ }
.row { /* 一般行的样式 */ }

另一种做法:

.thing,
.other-thing,
.third-thing,
.fourth-thing {
/* 这里共用的样式 */
}

命名规范是高质量代码的重要组成部分。

如果设计很复杂,那么最好选择一个现成的CSS布局框架

到底是该选择现成的框架还是自己写呢?视情况而定。如果你要快速做一个原型以验证某个想法,当然要选现成的框架。如果你的网站复杂到要修改已有框架的很多代码,那可能还不如自己写更好。

2.创建灵活的页面布局

2.1 包装元素

包装元素是页面布局中常用的一个盛放内容的元素。

<body>
<div class="wrapper">
<h1>My page</h1>
</div>
</body>
body {
margin: 0; /* body元素默认是有外边距的。 */
}
.wrapper {
width: 95%;
max-width: 76em;
margin: 0 auto;
}

通过自动外边距,将包装元素设置为在页面上居中。

2.2 行容器

<div class="media-block">
<img class="media-fig" src="img/pic.png" alt="The pic" />
<div class="media-body">
<h3>Title of this</h3>
<p>Brief description of this</p>
</div>
</div>
.media-block {
background-color: gray;
border: solid 1px black;
}
.media-fig {
float: left;
width: 30%;
}
.media-body {
float: right;
width: 65%;
}

浮动的元素会被拿出文档流,因此类名为.media-blockdiv不会占用空间:它只包含浮动的内容,因此无法在文档流中为它生成高度。在类名为.media-blockdiv内部某处应用clear,从而在使用了clear的元素上方创造出足够的垂直外边距,从而为包住浮动元素创造出空间。

<div class="media-block">
<img class="media-fig" src="img/pic.png" alt="The pic" />
<div class="media-body">
<h3>Title of this</h3>
<p>Brief description of this</p>
<div class="clear"></div> <!-- 额外添加的空div -->
</div>
</div>
.clear {
clear: both;
}

有时候可能会有现成的元素用于清除,但这里为了实现我们想要的布局而引入了空div。虽然我们可以通过overflow属性来包含浮动元素,但是比较大的区块很可能会有定位内容被摆放到行容器之外。因此,比较好做法是使用设置了清除的伪元素。

.media-block:after {
content: '';
display: block;
clear: both;
}

2.3 创建列

<div class="row row-quartet">
<div class="col subcategory-featured">
<h3>Story</h3>
</div>
<div class="col">
<h3>Story</h3>
</div>
<div class="col">
<h3>Story</h3>
</div>
</div>
/* 使用浮动把行分成列 */
.col {
float: left;
box-sizing: border-box;
}
/* 使用通用选择符,降低规则特殊性,后面可以用一个特殊的类名来覆盖这个宽度。 */
.row-quartet > * {
width: 25%;
}
.subcategory-featured {
width: 50%;
}

2.4 流式空距

给列间添加一些空距(gutter)。使用外边距作为空距,保证空距与列宽相协调。

外边距相对包含块来计算,空距与总宽度的比例再除以2就是每一列左右两边的外边距。(假设在一般的屏幕尺寸中,空距等于文本的行高,两个行之间的距离等于行高。)

.row {
/* 抵消最外侧的空距 */
margin: 0 -.9%;
}
.col {
/* 流式空距 */
margin: 0 .9% 1.375em;
}

设置空距的替代方案:

.col {
float: left;
box-sizing: border-box;
/* 使用内边距来设置空距。 */
padding: 0 .6875em 1.375em;
}

2.5 增强列:包装与等高

用行内块包装行与列:

<ul class="row row-quartet row-wrapping">
<li class="col">
<div class="story">
<h3><a href="#">Perferendis, ipsam! Dolor sit amet consectetur</a></h3>
</div>
</li>
<li class="col">
<div class="story">
<h3><a href="#">Aliquam mattis eros id posuere.</a></h3>
</div>
</li>
<!-- 还有更多 -->
</ul>
.row-wrapping {
font-size: 0; /* 去掉行内块之间的间隙 */
margin: 0 -11px; /* 考虑到先后兼容的后备规则 */
margin: 0 -.6875rem;
}
.row-wrapping > * {
float: none;
vertical-align: top;
display: inline-block; /* 行内块 */
font-size: 16px; /* 考虑到先后兼容的后备规则 */
font-size: 1rem;
}

使用Flexbox实现等高的列:

.flexbox .row {
display: flex;
}

这样,我们就已经创建了等高的列,其实这也是可伸缩项会拉伸以填充父元素的默认行为。

.flexbox .col {
display: flex;
flex-direction: column;
}
.flexbox .col > * {
flex: 1; /* flex-grow: 1、flex-shrink: 1、flex-basis: 0。 */
}
/* 对包装行进行增强 */
.flexwrap .row-wrapping {
display: flex;
flex-wrap: wrap; /* 允许折行 */
}

Flexbox是一种强大的设计工具,可以实现精细而又灵活的内容布局。

基于浮动的布局基础上又应用了Flexbox,做到了最大限度的向后兼容。

现代Flexbox性能一般都比浮动要优越。

使用表格实现二维布局,表格中的单元可通过colspanrowspan实现复杂的布局。

参考资料:

  • 《精通CSS》— [英] 安迪·巴德、[瑞典] 埃米尔·比约克隆德

CSS页面布局与网格(上)的更多相关文章

  1. CSS页面布局与网格(下)

    3.二维布局:CSS Grid Layout CSS Grid Layout模块为了能在二维空间里控制元素的顺序.位置和大小而定义了一组CSS属性. 被设值为display: grid的元素叫网格容器 ...

  2. CSS 页面布局、后台管理示例

    CSS 页面布局.后台管理示例 页面布局 1.头部菜单 2.中间内容/中间左侧菜单 3.底部内容 <div class='pg-header'> <div style='width: ...

  3. css页面布局

    写在前面: 页面布局整体上可以分为两类:固定宽度(一般固定960px):流式布局:将流式布局转换为固定布局很容易,只需要外围再包括一个div,为其设置宽度即可. html默认的布局方式是将每个块状标签 ...

  4. CSS页面布局常见问题总结

    在前端开发中经常会碰到各种类型布局的网页,这要求我们对css网页布局非常熟悉.其中水平垂直居中布局,多列布局等经常会被使用到,今天就来解决一下css布局方面的问题. 水平垂直居中的几种方法 说到水平垂 ...

  5. css页面布局总结

    W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html.xml),表现 标准语言(css),行为标准语言(DOM,ECMAScript<javascript>)组成.这个标准倡 ...

  6. css页面布局之左侧定宽,右侧自适应

    二列布局的特征是侧栏固定宽度,主栏自适应宽度.三列布局的特征是两侧两列固定宽度,中间列自适应宽度. 之所以将二列布局和三列布局写在一起,是因为二列布局可以看做去掉一个侧栏的三列布局,其布局的思想有异曲 ...

  7. 一、CSS概述 二、CSS的选择器(认识) 三、CSS样式和属性(练习) 四、重构商城首页DIV+CSS(页面布局)(重点) 浮动/更改显示方式

    一.CSS概述###<1>概念 DIV,就是一个HTML元素,块级元素,通常结合CSS进行页面的布局. CSS,层叠样式表,给HTML元素增强显示. ###<2>作用 样式定义 ...

  8. dic+css页面布局分享

    HTML部分代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  9. 第五章 CSS页面布局基础

    1.标准文档流 在正常流中,在没有使用浮动或者定位的情况下,文本元素按照从上到下.从左到右的格式布局.这是浏览器的默认行为.在正常流中,块级元素从上到下依次排列,而行级元素从左到右依次排列.正常流中的 ...

随机推荐

  1. java IO流 (二) IO流概述

    1.流的分类* 1.操作数据单位:字节流.字符流* 2.数据的流向:输入流.输出流* 3.流的角色:节点流.处理流 图示: 2.流的体系结构 说明:红框对应的是IO流中的4个抽象基类.蓝框的流需要大家 ...

  2. SQL中的多表联查(SELECT DISTINCT 语句)

    前言:(在表中,可能会包含重复值.这并不成问题,不过,有时你也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值.) 如果不加DISTINCT 的话,主表本来 ...

  3. 使用Python进行自动化测试

    目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用Python进行自动化测试,本 ...

  4. C++ 线性筛素数

    今天要写一篇亲民的博客了,尽力帮助一下那些不会线性筛素数或者突然忘记线性筛素数的大佬. 众所周知,一个素数的倍数肯定不是素数(废话).所以我们可以找到一个方法,普通的筛法(其实不算筛,普通的是判断一个 ...

  5. C++语法小记---标准库

    C++标准库 C++标准库包含如下内容: C++标准编译工具链 C++扩展编译工具链(各种C++编译器独有) C++标准库 C++库 C库 C兼容库(为了兼容能够用C编译器编译的项目,直接使用C++也 ...

  6. Selenium自动化:有代码测试与无代码测试。这些你都懂了吗?

    大多数测试人员认为 Selenium是满足其测试自动化需求的自动化框架.作为全球测试人员使用的开放源框架, Selenium 无疑是测试人员适应日趋敏捷的公司的一种好方法.实际上, Selenium仍 ...

  7. .net core 使用 Serilog 作为日志提供者

    nuget引入 Serilog.AspNetCore Startup构造函数: public Startup(IConfiguration configuration) { Configuration ...

  8. Git Push提示没有权限

    中途协助别人开发的一个小项目, 我已经是该项目的Developer, 可是提交代码依然提示无权限 这是由于我是在master上直接提交的, 而GitLab默认是保护master分支的, push只对M ...

  9. 前端 /deep/ 深入样式(很深入的那种哦) 简单收藏

    简单介绍:使用vue脚手架和elemen-ui开发的前端项目  遇到这样的场景: 对div下的el-select下拉组件 设置样式,直接在标签上用style属性是完全可以的,但我们的开发规范是前端样式 ...

  10. HTML自动刷新页面

    <meta http-equiv="refresh"content="5"/> 英文""