CSS布局
display属性
display 是CSS中最重要的用于控制布局的属性。每个元素都有一个默认的display 值,这与元素的类型有关。对于大多数元素它们的默认值通常是block
或inline
。一个 block 元素通常被叫做块级元素。一个 inline 元素通常被叫做行内元素。
block
div 是一个标准的块级元素。一个块级元素会新开始一行并且尽可能撑满容器。其他常用的块级元素包括 p 、 form 和HTML5中的新元素:header 、 footer 、 section
等等。
inline
span 是一个标准的行内元素。一个行内元素可以在段落中 < span> 像这样 </ span> 包裹一些文字而不会打乱段落的布局。 a 元素是最常用的行内元素,它可以被用作链接。
none
另一个常用的display值是 none 。一些特殊元素的默认 display 值是它,例如script
。display:none
通常被 JavaScript 用来在不删除元素的情况下隐藏或显示元素。
1 | 它和 visibility 属性不一样。把 display 设置成 none 元素不会占据它本来应该显示的空间,但是设置成 visibility: hidden; 还会占据空间。 |
其他 display 值
还有很多的更有意思的 display 值,例如list-item
和table
就像之前讨论过的,每个元素都有一个默认的 display 类型。不过你可以随时随地的重写它!虽然“人为制造”一个行内元素可能看起来很难以理解,不过我们可以把有特定语义的元素改成行内元素。常见的例子是:把 li 元素修改成 inline,制作成水平菜单。
1 | margin:auto |
设置块级元素的width
可以防止它从左到右撑满整个容器。然后就可以设置左右外边距为auto
来使其水平居中。元素会占据我们所指定的宽度,然后剩余的宽度会一分为二成为左右外边距。
唯一的问题是,当浏览器窗口比元素的宽度还要窄时,浏览器会显示一个水平滚动条来容纳页面。让我们再来改进下这个方案:
1 | max-width |
在这种情况下使用max-width
替代width
可以使浏览器更好地处理小窗口的情况。这点在移动设备上显得尤为重要,调整下浏览器窗口大小检查下吧!
顺便提下, 所有的主流浏览器包括IE7+在内都支持 max-width ,所以放心大胆的用吧。
box-sizing
我们都知道css中是以盒模型来进行设计的,那么如果我们要设计网页应该怎么确定那些尺寸呢?以前的一些老办法是通过计算每一个边距的像素值,再把它们相加起来就是我们最后所得到的尺寸,现在有了新的办法可以更好的解决这个问题。
们慢慢的意识到传统的盒子模型不直接,所以他们新增了一个叫做 box-sizing 的CSS属性。当你设置一个元素为 box-sizing: border-box;
时,此元素的内边距和边框不再会增加它的宽度。这里有一个例子,两个元素都设置了 box-sizing: border-box;
1 | .simple { |
既然没有比这更好的方法,一些CSS开发者想要页面上所有的元素都有如此表现。所以开发者们把以下CSS代码放在他们页面上
1 | * { |
这样可以确保所有的元素都会用这种更直观的方式排版。
不过box-sizing
是个很新的属性,目前还应该像上面例子中那样使用 -webkit-
和-moz-
前缀。
position
position的属性值以及他们的含义我在第六天的博客里面有写到,如果想要继续了解可以点击这里
float
一个布局中常用的CSS属性是 float 。Float 可用于实现文字环绕图片,如下:
1 | img { |
具体的属性介绍在我的这篇博文里面。
百分比宽度
百分比是一种相对于包含块的计量单位。它对图片很有用:如下我们实现了图片宽度始终是容器宽度的50%。
1 | article img { |
甚至还能同时使用min-width
和max-width
来限制图片的最大或最小宽度!
媒体查询
1 | 媒体查询是做此事所需的最强大的工具。让我们使用百分比宽度来布局,然后在浏览器变窄到无法容纳侧边栏中的菜单时,把布局显示成一列: |
3.3相对+绝对定位
用absolute
,利用绝对定位元素的盒模型特性,在偏移属性为确定值的基础上,设置margin:auto
.