CSS布局奇技淫巧:各种居中

by admin on 2019年11月2日

CSS布局奇技淫巧:高度自适应

2016/11/03 · CSS ·
自适应

原文出处:
无双   

何为高度自适应?

高度自适应就是高度能跟随浏览器窗口的大小改变而改变,典型的运用在一些后台界面中上面一栏高度固定用作菜单栏或导航栏,下面一栏高度自适应用于显示内容。高度自适应不像宽度自适应那样简单,在兼容浏览器方面也稍微复杂一些。

布局思路

在IE7+及chrome、firefox等浏览器中,高度自适应可以利用绝对定位来解决。但一个元素是绝对定位时,如果没有给它设定高度或宽度,则它的的高度和宽度是由它的top、right、bottom、left属性决定的,但这一法则在IE6中并不适用,因此在IE6中还得另辟蹊径。在IE6中给html设定padding,并不会撑大html元素的尺寸,这正是我们要利用的地方。

在IE7+ 和 W3C浏览器中的方案

看下代码:

图片 1

再看下效果:

图片 2

在IE6中的方案

好吧,不想再对IE6吐槽,只想尽快搞定它。

在IE6中的思路是,把html和body元素的高度设定为100%,即浏览器窗口的高度,然后利用padding-top在html元素上挤出一点空间来,因为绝对定位的最高参照物是参照html元素的,所以可以把顶栏绝对定位在html的padding-top那块空间上。这时body的高度就是html的高度(也是浏览器窗口的高度)减去html的padding-top的值,这也是ie6非常奇怪的一个特性,因为按照w3c盒模型来讲,增加了html元素的padding-top,则html元素的高度也会相应增加,这时浏览器窗口应该会出现垂直滚动条了。但IE6不会,html的增加了padding-top后,整个html元素的高度还是保持不变,即浏览器窗口的高度,变化的是body的高度减小了,用来抵消html的padding-top.

还是先看看代码吧:

图片 3

再看下效果:

图片 4

最终的兼容代码

XHTML

<!DOCTYPE html> <html> <head> <meta charset=”utf-8″
/> <title>高度自适应布局</title> <style> html,body{
height:100%;} body,div{ margin:0; padding:0; color:#F00;} * html{
padding-top:100px;}/*for ie6*/ .top{ background:#36C; height:100px;}
* html .top{ background:#36C; height:100px; position:absolute; top:0;
width:100%;}/*for ie6*/ .main{ background:#F90; position:absolute;
width:100%; top:100px; bottom:0; overflow:auto;} * html .main{
background:#F90; position:static; height:100%;}/*for ie6*/
</style> </head> <body> <div
class=”top”>我是top,固定高度</div> <div
class=”main”>我是main,高度随浏览器大小变化而变化<p
style=”height:500px;”></p></div> </body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>高度自适应布局</title>
<style>
html,body{ height:100%;}
body,div{ margin:0; padding:0; color:#F00;}
* html{ padding-top:100px;}/*for ie6*/
.top{ background:#36C; height:100px;}
* html .top{ background:#36C; height:100px; position:absolute; top:0; width:100%;}/*for ie6*/
.main{ background:#F90; position:absolute; width:100%; top:100px; bottom:0; overflow:auto;}
* html .main{ background:#F90; position:static; height:100%;}/*for ie6*/
</style>
</head>
<body>
<div class="top">我是top,固定高度</div>
<div class="main">我是main,高度随浏览器大小变化而变化<p style="height:500px;"></p></div>
</body>
</html>

效果图:

非ie6

图片 5

ie6

图片 6

推广

这种方法也适用于顶栏与底栏高度固定,中间那栏高度自适应的三栏布局

3 赞 3 收藏
评论

图片 7

CSS布局奇技淫巧:宽度自适应

2016/11/03 · CSS ·
自适应

原文出处:
无双   

css这个东西,说难不难,说容易也不容易。我觉得最重要的还是经验的积累,正所谓的不积硅步,无以至千里。这一系列文章讲述几种css特殊布局的实现,也当作为自己做个备忘吧。

首先讲的是三列布局,左右两列宽度固定,中间一列宽度自适应

这个很好实现,左右两列分别左浮动和右浮动并给一个固定宽度,中间不浮动,也不设定宽度。这样基本就可以了。但为了兼容IE还必须做些工作。

看下代码结构:

图片 8

效果为:

图片 9

中间列要不要设置margin-left和margin-right ?

注意,中间那列需要把左右两个外边距分别设为左右两列的宽度,否则会有些问题。如下:

在谷歌、火狐等标准浏览器下是这样的(包括IE8+):

图片 10

而在IE6、IE7中是这样的(图是在IE6下截的)

图片 11

我们可以看到中间那列子元素的margin-left或margin-right的起点是不一致的,在IE6、IE7中,即使不给中间列设定margin-left和margin-right,它的子元素的左右外边距的起点仍然是在左右两列宽的的基础上的,就像是有margin-left和margin-right一样。所以为了各浏览器保持一致,中间那列还是设一个margin-left和margin-right为好。

IE6中的3px间隙bug

在上图的ie6截图中,我们看到各列之间有一条3px的间隔,这是只有IE6才有的问题。

如果中间那列的margin-left和margin-right都为0的话,则只要把左列的margin-right设为-3px,右列的margin-left设为-3px就行了。

但如果把中间列的margin-left和margin-right分别为左右两列的宽度时(上面已经说了,这也是必须这样做的),即使把左列的margin-right设为-3px,右列的margin-left设为-3px也还是没有效果。这时候还得把中间列的margin-left设为左列宽度-3px,margin-right设为右列宽度-3px才行。如下:

图片 12

最终的代码

XHTML

<!DOCTYPE html> <html> <head> <meta charset=”utf-8″
/> <title>宽度自适应布局</title> <style> body, div
{ margin:0; padding:0; } div { height:200px; color:#F00; } .left {
float:left; width:100px; background:#00f; _margin-right:-3px; } .right
{ float:right; width:100px; background:#0f0; _margin-left:-3px; }
.center { background:#333; margin:0 100px; _margin:0 97px; }
</style> </head> <body> <div
class=”left”>我是left</div> <div
class=”right”>我是right</div> <div
class=”center”>我是center</div> </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>宽度自适应布局</title>
<style>
    body, div {
        margin:0;
        padding:0;
    }
    div {
        height:200px;
        color:#F00;
    }
    .left {
        float:left;
        width:100px;
        background:#00f;
        _margin-right:-3px;
    }
    .right {
        float:right;
        width:100px;
        background:#0f0;
        _margin-left:-3px;
    }
    .center {
        background:#333;
        margin:0 100px;
        _margin:0 97px;
    }
</style>
</head>
<body>
<div class="left">我是left</div>
<div class="right">我是right</div>
<div class="center">我是center</div>
</body>
</html>

两列布局,一列宽度固定,另一列自适应布局也是这个道理的。

1 赞 3 收藏
评论

图片 7

高度自适应布局,自适应布局

    在网页布局中,经常用到高度自适应增长的布局。如左侧是文章内容部分,随着文章内容的变化,高度也不固定,右侧则是一些固定高度的相关内容。如图所示:

图片 14

  简单摸索后发现CSS中有一个min-height的属性,如果设置min-height为200px,当高度大于200px时,则自动开始增长;小于200px则为200px。结合float:left,我的布局如下:

  

<div id=”main”> <div
id=”left”>原标题:花荣:春节前一定不要卖 第一反弹目标位是3360
  搜狐证券讯
同一位置第二根长阳,沪指再次站上3000点,经过几日反复之后,这次能开启超跌后的反弹行情吗?带着投资者最为关心的问题,搜狐财经电话连线了知名操盘手花荣先生,希望他在这个关键时刻能够用他几十年的市场经验来帮助投资者认识目前市场所处的位置。

  双底构筑成功 春节前以上涨为主

  问题1:这根长阳意味着筑底成功了吗?

  花荣:1月份这轮调整已经完全超跌,这根长阳意味着筑底成功,2844.70点很可能成为阶段低点,与2850点构成双底,上半年总体看好,春节前以上涨为主。

  反弹目标先看到3360 其实4200点的可能性更大

  问题2:这轮反弹目标位在哪里?

  花荣:本轮反弹目标第一阶段,先看到30日均线3360点,为什么看到30日均线?第一次股灾之后的反弹就是受制于此条均线,所以这个位置很重要,无论是空间关口还是心理关口。第二阶段,如果站上3360之后,那么下一步的反弹目标就是4200点。目前来看,能够到达第二阶段的可能性更大。

  1月下砸是为了腾出空间 机构要用单边上涨迎接注册制

  问题3:1月为什么砸得这么厉害

  花荣:目前来看,1月份这轮深度调整更像是机构故意为之,只有下砸才能为即将而来的单边上涨行情腾出空间,也只有接下来的单边上涨更符合机构的利益,为注册制造势,须知道,这种态势和2015年新股发行之前的状况几乎如出一辙。

  时间和空间都已经到位 急跌之后必是V形底

  问题4:这个位置筑底时间是不是太短?

  花荣:阴跌之后一般是圆弧底,需要时间消化,但1月这波调整是急跌、暴跌,这种情形的筑底一定是V字形,所以说,目前调整的时间和空间都已经足够。

  春节前一定不要卖 一带一路是短线龙头

  问题5:深套的投资者如何操作?

  花荣:春节前一定不要卖,可以选择换股。今天的行情是一带一路概念全面带动的,所以说短线行情以中字头主板、一带一路为主。
</div> <div id=”right”>dsfdsafsd</div> <div
id=”footer”>底部内容</div> </div>

  红色部分是测试文字部分。

  具体样式如下:

  #main{

    margin:0 auto;

    width:1000px;

    min-height:300px;

  }
  #left{

    width:600px;
    min-height:300px;
    float:left;
    background-color:#cc00cc;
  }
  #right{

    width:400px;

    height:300px;

    float:left;

    background-color:#cccc00;

  }
  #footer
  {

    float:left;

    margin:0 auto;

    width:1000px;

    height:60px;

    background-color:#cccccc;
background-image:url(‘20120227095908_5zK2V_thumb_600_0.jpg’);//背景图片

  }

  经过简单的测试后发现,各类浏览器完全适用,OK,搞定!

在网页布局中,经常用到高度自适应增长的布局。如左侧是文章内容部分,随着文章内容的变化,高度也不固…

居中是我们使用css来布局时常遇到的情况。使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍。

 

注:本文所讲方法除了特别说明外,都是兼容IE6+、谷歌、火狐等主流浏览器的。

 

先来说几种简单的、人畜无害的居中方法

 

1. 把margin设为auto

 

具体来说就是把要居中的元素的margin-left和margin-right都设为auto,此方法只能进行水平的居中,且对浮动元素或绝对定位元素无效。

 

2、使用 text-align:center

 

这个没什么好说的,只能对图片,按钮,文字等行内元素(display为inline或inline-block等)进行水平居中。但要说明的是在IE6、7这两个奇葩的浏览器中,它是能对任何元素进行水平居中的。

 

3、使用line-height让单行的文字垂直居中

 

把文字的line-height设为文字父容器的高度,适用于只有一行文字的情况。

 

4、使用表格

 

如果你使用的是表格的话,那完全不用为各种居中问题而烦恼了,只要用到
td(也可能会用到 th)元素的 align=”center” 以及 valign=”middle”
这两个属性就可以完美的处理它里面内容的水平和垂直居中问题了,而且表格默认的就会对它里面的内容进行垂直居中。如果想在css中控制表格内容的居中,垂直居中可以使用
vertical-align:middle,至于水平居中,貌似css中是没有相对应的属性的,但是在IE6、7中我们可以使用text-align:center来对表格里的元素进行水平居中,IE8+以及谷歌、火狐等浏览器的text-align:center只对行内元素起作用,对块状元素无效。

 

图片 15

 

图片 16

 

在ie6、7中可以通过css的text-algin来控制表格内容的水平方向的对齐,无论内容是行内元素还是块状元素都有效。

 

图片 17

 

但在ie8+以及chrome、firefox等浏览器中的text-align:center对块状元素无效,只能用表格自有的align属性。

 

5、使用display:table-cell来居中

 

对于那些不是表格的元素,我们可以通过display:table-cell
来把它模拟成一个表格单元格,这样就可以利用表格那很方便的居中特性了。例如:

 

图片 18

图片 19

 

但是,这种方法只能在IE8+、谷歌、火狐等浏览器上使用,IE6、IE7都无效。

 

那面所说的都是很基础的方法,自然不能称之为奇淫巧计,下面就来说一些需要使用一些技巧的居中方法。

 

6、使用绝对定位来进行居中

 

此法只适用于那些我们已经知道它们的宽度或高度的元素。

 

绝对定位进行居中的原理是通过把这个绝对定位元素的left或top的属性设为50%,这个时候元素并不是居中的,而是比居中的位置向右或向左偏了这个元素宽度或高度的一半的距离,所以需要使用一个负的margin-left或margin-top的值来把它拉回到居中的位置,这个负的margin值就取元素宽度或高度的一半。

图片 20

 

运行效果:

 

图片 21

 

如果只想实现一个方向的居中,则可以只使用left , margin-left
来实现水平居中,使用top , margin-top来实现垂直居中。

 

7、另一种使用绝对定位来居中的方法

 

此法同样只适用于那些我们已经知道它们的宽度或高度的元素,并且遗憾的是它只支持IE9+,谷歌,火狐等符合w3c标准的现代浏览器。

 

下面用一段代码来了解这种方法:

图片 22

 

运行效果:

 

图片 23

 

这里如果不定义元素的宽和高的话,那么他的宽就会由left,right的值来决定,高会由top,bottom的值来决定,所以必须要设置元素的高和宽。同时如果改变left,right
, top , bottom的值还能让元素向某个方向偏移,大家可以自己去尝试。

 

8、使用浮动配合相对定位来进行水平居中

 

此方法也是关于浮动元素怎么水平居中的解决方法,并且我们不需要知道需要居中的元素的宽度。

 

浮动居中的原理是:把浮动元素相对定位到父元素宽度50%的地方,但这个时候元素还不是居中的,而是比居中的那个位置多出了自身一半的宽度,这时就需要他里面的子元素再用一个相对定位,把那多出的自身一半的宽度拉回来,而因为相对定位正是相对于自身来定位的,所以自身一半的宽度只要把left
或 right 设为50%就可以得到了,因而不用知道自身的实际宽度是多少。

 

这种使用浮动配合相对定位来居中的方法,优点是不用知道要居中的元素的宽度,即使这个宽度是不断变化的也行;缺点是需要一个多余的元素来包裹要居中的元素。

 

看下代码:

 

图片 24

 

运行效果:

 

图片 25

 

9、利用font-size来实现垂直居中

 

如果父元素高度是已知的,要把它里面的子元素进行水平垂直居中,则可以使用这种方法,且子元素的宽度或高度都不必知道。

 

该方法只对IE6和IE7有效。

 

该方法的要点是给父元素设一个合适的font-size的值,这个值的取值为该父元素的高度除以1.14得到的值,并且子元素必须
是一个inline或inline-block元素,需要加上vertical-align:middle属性。

 

至于为什么是除以1.14而不是其他的数,还真没有人知道,你只需要记住1.14这个数就行了。

图片 26

图片 27

 

在方法5中说过在IE8+、火狐谷歌等现在浏览器中可以用display:table-cell来进行居中,而这里的font-size的方法则适用于IE6和IE7,所以把这两种方法结合起来就能兼容所有浏览器了:

图片 28

图片 29       
 图片 30

 

上面的例子中因为要居中的元素是一个块状元素,所以我们还需要把他变成行内元素,如果要居中的元素是图片等行内元素,则可以省略此步。

 

另外,如果 vertical-align:middle
是写在父元素中而不是子元素中,这样也是可以的,只不过计算font-size时使用的
 1.14 这个 数值要变成大约 1.5 这个值。

 

以上就是一些常见的居中方法了,如有疏漏或错误之处,敬请指正!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图