几个常见的布局的多种实现方式及margin负值总结

第一部分:几个常见的布局实现方式

一、左右两边固定, center中间自适应未知

html代码中 center 部分首先要放在box的最前部分。然后是left,right

圣杯布局:

<div class="box">

    <div class="center"></div>

    <div class="left"></div>

    <div class="right"></div>

</div>
  1. 将三者都 float:left
  2. 三者设width:center 部分:width:100%,left和right分别设width
  3. 此时center 占满了,所以要把left拉到最左边,使用margin-left:-100%,right设margin-left:-220px;把right拉上去
  4. 外围box加上 padding:0 220px 0 200px
  5. 对left和right分别使用相对定位position:relative; left:-200px;  同理right:-220px;
  6. 到这里大概就自适应好了。如果想box高度保持一致可以给left center right都加上min-height:130px

中间列如果是100%的宽度,各个元素只浮动,后面的元素是会被挤在第二行的。当该元素使用margin-left并超过自身的宽度时,这个元素在第一行就有位置了。而margin的负值达到-100%时,恰能达到窗口最左侧

代码实现如下:

.box{ position:relative; padding:0 300px 0 200px;}
.box div{ height:500px; float:left; position:relative;}
.center{ width:100%; background:yellow;}
.left{ width:200px; background:red; margin-left:-100%; left:-200px;}
.right{ width:300px; background:blue; margin-left:-300px; right:-300px;}

双飞翼布局:

<div class="box">

    <div class="center"><div></div></div>

    <div class="left"></div>

    <div class="right"></div>

</div>
  1. float:left  
  2. 设width
  3. 设margin-left负值
  4. 给center 增加一个内层div,然后给内层div设置margin:0 220px 0 200px
  5. main正确展示

代码如下:

.box{ position:relative;}
.box div{ height:500px; float:left; position:relative;}
.center{ width:100%; background:yellow;}
.center div{ margin:0 300px 0 200px;}
.left{ width:200px; background:red; margin-left:-100%;}
.right{ width:300px; background:blue; margin-left:-300px;}
两种方法前三步相同,区别在于后面显示center的部分!

CSS3新功能实现:

<div class="box">

    <div class="left"></div>

    <div class="center"></div>

    <div class="right"></div>

</div>
.box{ display:-webkit-box; height:500px; width:800px;}
.left{ width:200px; background:red;}
.center{ -webkit-box-flex: 1; background:yellow;}
.right{ width:300px; background:blue;}
  1. 给三个div的父级添加:display:-webkit-box;
  2. 给中间的center添加-webkit-box-flex:1;

二、center中间宽度固定, left和right自适应

CSS3新功能实现:

.box{ display:-webkit-box; height:500px; width:900px;}
.left{ -webkit-box-flex: 1; background:red;}
.center{ width:500px; background:yellow;}
.right{ -webkit-box-flex: 2; background:blue;}
<div class="box">

    <div class="left"></div>

    <div class="center"></div>

    <div class="right"></div>

</div>
  1. 给三个div的父级添加:display:-webkit-box;
  2. 给中间的center设width
  3. 给两边的left和right分别设-webkit-box-flex:1和-webkit-box-flex:2

三、等高布局:

方法一:利用margin负值

<style>
    *{padding:0; margin:0;}
    .container{ width:500px; border:5px solid pink; overflow: hidden;}
    .left{ width:200px; background:red; padding-bottom: 2000px; margin-bottom:-2000px; float:left;}
    .right{ width:300px; background:yellow; padding-bottom: 2000px; margin-bottom:-2000px; float:left;}
</style>

<body>
<div class="container">
    <div class="left">我是left</div>
    <div class="right">我是right<br><br><br>现在我的高度比left高,但left用它的padding-bottom补偿了这部分高度</div>
</div>
</body>

方法二:利用CSS3中的display:box

给父元素加display:box;

第二部分:Margin负值基础知识

1.margin负值对普通文档流的作用如下:

当一个static元素在top/left使用负边距时,它把元素向这个特定的方向拉

但是当你将负边距设置为bottom/right时,它会把它后面的元素往里面拉,从而覆盖自己

流动方向始终是向上、向左!

2.左右margin负值对元素宽度的影响:

如果元素没有设置width,左右负边距会把元素向两个方向拉以增加宽度

实现的前提是:该元素没有设定width属性(当然width:auto是可以的)。

想要创建下图中黑框内的几个元素按顺序排下来且中间带些间隔的布局要怎么做?当然最简单省事的方法就是利用浮动了。把子元素左浮动,然后设一个合适的margin-right。但是现在设置黑框这个div的宽度为:四个子元素的宽度加上三列间隔的宽度。所以靠近右边边界的子元素就不应该有正向的margin-right了,否则这一行就只能容纳三个子元素了。

这个问题可利用margin负值解决。按照如下代码即可实现上图的效果

<style>
        body,ul,li{ padding:0; margin:0;}
        ul,li{ list-style:none;}
        .container{ height:210px; width:460px; border:5px solid #000;}
        ul{ height:210px; overflow:hidden; margin-right:-20px;} /*一个负的margin-right,相当于把ul的宽度增加了20px*/
        li{ height:100px; width:100px; background:#09F; float:left; margin-right:20px; margin-bottom:10px;}
</style>

<div class="container">
    <ul>
        <li>子元素1</li>
        <li>子元素2</li>
        <li>子元素3</li>
        <li>子元素4</li>
        <li>子元素5</li>
        <li>子元素6</li>
        <li>子元素7</li>
        <li>子元素8</li>
    </ul>
</div>

3. margin负值对浮动元素的影响:

比如,下图是三个向左浮动的元素,宽高都是100px:

现在把它们都设一个margin-right:-50px; 然后会变成这样子(2和3都向左移动了50px,覆盖了前一个):

把浏览器缩小,因为宽度不够元素3会折到下一行,如下图:

现在给元素3设一个margin-left:-80px;这时我们看到元素3上去了,而且还覆盖了元素2的一部分,如下图:

继续给元素3设为margin-left:-100px;这时元素3完全覆盖住了元素2,如下图:

当元素3设为:margin-left:-200px时,可以看到元素3继续向左移动并覆盖住了元素1,如下图:

圣杯布局、双飞翼布局都是利用这个原理实现的。就是某个元素虽然是写在了后面,但可以通过负边距让它在浏览器显示的时候在前面

4. margin负值对绝对定位元素的影响:

绝对定位的元素定义的top、right、bottom、left等值是元素自身的边界到最近的已定位的祖先元素的距离,这个元素自身的边界指的就是margin定义的边界

如果margin为正的时候,那它的边界是向外扩的,如果margin为负的时候,则它的边界是向里收的。利用这点,就有了经典的利用绝对定位来居中的方法:

看下效果:

但该方法的缺点是必须要知道要居中元素的高度和宽度

bug:在float中使用负边距可能会在旧的浏览器造成一些问题

解决方法:只要添加position:relative就可以啦~~

之前总结过这部分内容,最近在做大复习~所以发个博~不知道什么原因昨天电脑突然发神经,正在做页面的考题电脑一下就死机了,然后重启之后居然HTML的页面整个都空白了。。。。然后电脑突然就超级卡,要么PS打不开要么打一个单词几乎需要1分钟。。。分分钟想把实验室的破电脑砸掉!!然后着着急急把写好的代码发过去,然后。。今天。。面试官非常不客气。。的把我打击了。。。

面试题的总结还有一点点~明天发~

时间: 2024-10-13 05:32:45

几个常见的布局的多种实现方式及margin负值总结的相关文章

css 两列布局的多种实现方式及原理。

两列布局是非常常见的需求在实际项目中,实现的方式也有很多.这里提供几种实现方式和原理.供大家参考 页面基本布局如下代码所示: 1 <div class="main"> 2 <div class='left'> 3 左侧 1 4 </div> 5 <div class='right'> 6 右侧 1 7 <div>假如div很多的话</div> 8 <div>假如div很多的话</div> 9

常见的布局方法整理[兼容]

一行两列左侧固定右侧自动适应 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv

常见的布局实现,以及响应式布局技巧。

布局实现采用何种方式实现布局设计,也有不同的方式,这里基于页面的实现单位而言,分为四种类型:固定布局.可切换的固定布局.弹性布局.混合布局. 固定布局:以像素作为页面的基本单位,不管设备屏幕及浏览器宽度,只设计一套尺寸: 可切换的固定布局:同样以像素作为页面单位,参考主流设备尺寸,设计几套不同宽度的布局.通过识别的屏幕尺寸或浏览器宽度,选择最合适的那套宽度布局: 弹性布局:以百分比作为页面的基本单位,可以适应一定范围内所有尺寸的设备屏幕及浏览器宽度,并能完美利用有效空间展现最佳效果: 混合布局:

转:利用HTML和CSS实现常见的布局

利用HTML和CSS实现常见的布局 单列布局 水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的父容器是parent元素) 使用inline-block 和 text-align实现 .parent{text-align: center;} .child{display: inline-block;} 优点:兼容性好:不足:需要同时设置子元素和父元素 使用

CSS中常见的布局

一.css中常见的布局有哪些? (1)两列布局 (2)三列布局 (3)弹性布局 (4)圣杯布局 (5)双飞翼布局 二.具体实现  (1)两列布局 https://www.cnblogs.com/qing-5/p/11442906.html (2)三列布局 https://www.cnblogs.com/qing-5/p/11338819.html (3)圣杯布局和双飞翼布局 相同点: a.三列布局,中间宽度自适应,两边定宽: b.中间栏要在浏览器中优先展示渲染: c.允许任意列的高度最高: d.

页面布局的几种方式

基本布局的几种方式: (1)流体布局: 流布局与固定宽度布局基本不同点就在于对网站尺寸的测量单位不同.固定宽度布局使用的是像素,但是流布局使用的是百分比,看到百分比,你应该想到,这将提供了很强的可塑性和流动性.换句话说,通过设置了百分比,你将不需要考虑设备尺寸或者屏幕宽度大小了,结论就是,你可以为每种情形找到一种可行的方案,因为你的设计尺寸将适应所有的设备尺寸.流布局与媒体查询和优化样式技术的关系密切. (2)固定布局 在固定布局中,网页的宽度是必须指定为一个像素值,一般设为960像素.在过去,

常见浏览器兼容性问题与解决方式

所谓的浏览器兼容性问题,是指由于不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,不管用户用什么浏览器来查看我们的站点或者登陆我们的系统,都应该是统一的显示效果.所以浏览器的兼容性问题是前端开发者常常会碰到和必需要解决的问题. 在学习浏览器兼容性之前,我想把前端开发者划分为两类: 第一类是精确依照设计图开发的前端开发者,能够说是精确到1px的,他们非常easy就会发现设计图的不足,而且在非常少的情况下会碰到浏览器的兼容性问题,而这些问题往往都死浏览

ListView上拉加载和下拉刷新多种实现方式

ListView上拉加载和下拉刷新多种实现方式 该篇为ListView下拉刷新和上拉加载实现的各种方法大合集.可能在具体的细节逻辑上处理不太到位,但基本上完成逻辑的实现.细节方面,个人可以根据自己的需求进行完善. 该博客将以四种思路来完成下拉刷新和上拉加载 自定义View实现上拉加载和下拉刷新 使用PullToRefresh 实现上拉加载和下拉刷新 使用Ultra-Pull-To-Refresh实现上拉加载和下拉刷新 使用SwipeToRefreshLayout实现上拉加载和下拉刷新 如果你对L

C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍

原文:C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍 在前面一系列文章中,我们可以看到微信自定义菜单的重要性,可以说微信公众号账号中,菜单是用户的第一印象,我们要规划好这些菜单的内容,布局等信息.根据微信菜单的定义,我们可以看到,一般菜单主要分为两种,一种是普通的Url菜单(类型为View的菜单),一种是事件菜单(类型为Click的菜单),一般情况下,微信的Url菜单,是无法获得用户的任何信息的,但微信用户信息非常重要,因此也提供了另外一种方式(类似重定向的方式)来给我们使用,本篇