display:inline-block 和float:left 的区别
 
display是指显示状态,float是针对块级元素的浮动。
使用inline-block:控制元素的垂直对齐跟横向排列元素。
使用浮动:1、让元素环绕某一个元素,对一个元素跟围绕他的一些元素进行更多控制
               2、不想处理inline-block带来的空白问题
               元素浮动后,它会变为 inline-block。其宽度不是100%
 
 
 
 

我遇到的问题:
 
html :
<div class="table">
<ul class="nav">
<li class="active">房产</li>
<li>家居</li>
<li>二手房</li>
</ul>
<div class="page"></div> //CSS中设置display:none; 隐藏
<div class="page-hide"></div> //CSS中设置display:block; 出现
</div>
 
css :
 
.tab-list{           //最外的框
width: 273px; height: 153px;
border: 1px solid black;
background-color: #ddd; }
.nav{ //上标题栏
height: 32px;
border-bottom: 2px solid red; }
.nav li{ //每个标题
display: inline-block;
height: 30px;line-height:30px;
width: 60px;
border:1px solid blue;}
.nav .active{
border-top: 2px solid yellow;
border-bottom: 2px solid #fff; } 设置active的border,此时右边两个标题会被一起撑下来
(border是加在内容宽度上面的。)
 
 
.tab-list{           //最外的框
width: 273px; height: 153px;
border: 1px solid black;
background-color: #ddd; }
.nav{
height: 32px;
border-bottom: 2px solid red; }
.nav li{
float:left;
height: 30px;line-height:30px;
width: 60px;
border:1px solid blue;}
.nav .active{
border-top: 2px solid yellow;
border-bottom: 2px solid #fff; }

设置active的border,此时右边两个标题不会变化

  

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
结论:
   使用display:inline-block ,<li>变成内联元素,位于一行,此时可以控制宽高、外边距等。此时为<li>中的一个元素设置border,另外两个<li>也需要和它在同一行,所以被撑开。
   使用float:left,只是向左浮动在一行,此时top位置始终对齐,三者没有关联性。
      
 
 
 

其他问题
 
一、inline-block带来的间距留白问题
 
 
#list li{
border-right:1px solid #fff;
border-bottom:1px solid #fff;
list-style:none;
text-align:center;
display:inline-block;}

  

效果如左图
问题:第二行开始border总是不能连续;
原因:使用display:inline-block时vertical-algin候默认为baseline
 
#list li{
border-right:1px solid #fff;
border-bottom:1px solid #fff;
list-style:none;
text-align:center;
display:inline-block;
vertical-align:middle;
//默认是baseline}
#list li{
border-right:1px solid #fff;
border-bottom:1px solid #fff;
list-style:none;
text-align:center;
float:left; //使用浮动}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
二、浮动、inline-block和图像排列
 
 
左图,把一系列元素设置了浮动,因为盒子二号宽度的关系,可以发现盒子五号被挤进去了。 右图使用inline-block则不会。
 
 
inline-block主要是为了处理垂直对齐问题。
若父元素中的图片等高,设置浮动就会工作正常。但一旦有一列图片比较高时,图片的排列就会出现问题。这是因为浮动后,图片脱离了文档流。
而inline-block由于未脱离文档流,所以元素不会被某个过长的列挤上来。如果你想再创建一列图片时,不会受到上一列图片inline:block的影响。
 
另一种inline-block的适用:横向导航栏
 1、通常会设置a元素display:block然后进行浮动来制作;
 2、有时候会直接通过对列表元素设置display:inline来制作。
 
当你需要将元素(图片、横向排列链接)排列成一行或者多行时,inline-block会更好:
 1、更倾向于考虑使用inline-block代替float。
 2、直接使用table也是一种方法,table是专门用来处理横向与纵向排列的元素的。当需要创建一个很复杂的包含行列的布局,table是最佳选择。
 

    #columnContent .item_ul>li
    { 
        float:left;
        width:203px;
        margin:3px 5px;
        vertical-align:top;
        text-align:left;
   }
 
效果:菜单居中和自适应
问题:整体样式没问题,但是展开li标签内容时,其他li标签环绕,
         又因为存在自适应,当页面缩小时,每行的li标签个数会减少,并且居中
    #columnContent .item_ul>li
    {
        display:inline-block;
        width:203px;
        margin:3px 5px;
        vertical-align:top;
        text-align:left;
       
        *display:inline;  
         zoom:1; }
 
  只需替换一个浮动样式就都解决了。
 
 
 
 
 
 
 
 
 
 
总结:
   inline-block元素带有一些行内元素的特征(横向排列),同时内部也拥有块级元素的属性。这个跟浮动很类似,只不过有些区别,这些区别决定了你该使用哪种方案。  如果你很纠结垂直对齐问题或者横向排列元素,不妨使用inline-block。如果你需要对一个元素跟围绕他的一些元素进行更多控制,你需要浮动。 当然,table也是你处理一些问题的最佳方案。

display:inline-block 和float:left 的区别的更多相关文章

  1. display:inline block inline-block 的区别

    原文地址:http://blog.csdn.net/jly036/article/details/5506182 display:block就是将元素显示为块级元素. block元素的特点是: 总是在 ...

  2. inline-block,inline,block,table-cell,float

    float:left ---------------------------------------------------------------------------------------- ...

  3. display:inline 和display:inline-block和display:block的区别

    之前讲过块级元素使用display:block 行内元素使用display:inline 那么今天我们就来区分一下display:inline,display:inline-block和display ...

  4. CSS display:inline和float:left两者区别探讨

     本文和大家重点讨论一下CSS display:inline和float:left两者的区别,CSS display是指显示状态,inline表示内联,特点是紧贴着前一个内联元素,通常默认的内联元素有 ...

  5. float:left 与display:inline的具体区别?

    设了float:left的元素允许它的右边存在任何元素同行显示,不论是内联元素还是块元素.但它的左边还是不允许存在任何元素与之同行显示,哪怕其它的元素的代码在前,除非也给前面的元素加上float:le ...

  6. HTML5 display:inline、block、inline-block的区别--备用

    display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...

  7. display:inline、block、inline-block的区别(转)

    display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div& ...

  8. display:inline,display:inline-block,display:block 区别

    之前一直迷惑于display:inline/inline-block/block的异同,在度娘谷哥的帮助下,突然有了一点思路. 按照网上的介绍,inline将对象转化为内联元素,block将对象转化为 ...

  9. display:inline、block、inline-block区别

    display:inline.block.inline-block区别 display:block就是将元素显示为块级元素. display:inline就是将元素显示为行内元素. inline-bl ...

  10. display:inline、block、inline-block的区别(摘抄)

    display:inline.block.inline-block的区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都 ...

随机推荐

  1. C# for循环 循环中先求长度还是使用list.Count,哪个效率高

    这种问法可能问的不好.应该说成是第一种方法完全没有必要,很多人可能以为那样会为代码带来效率,而实际上是不会给效率带来任何提升. 因为事实上,索引器内部,为了安全期间,还是会去求整个list的count ...

  2. OpenCV 计算区域的内部参数

    对于一个区域,怎么进一步针对区域内部特征进行处理呢 ? 首先,我们要提取出来内部的某些特征才能说话,下面提取一些简单的特征,话不多说见代码: 1.平均数及方差参数: Mat tempMean, tem ...

  3. Linux乱码问题解决方案

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  4. text-decoration

    2016-08-18  text-decoration  blink貌似在firefox里也不起作用? <p style="color:red;text-decoration:unde ...

  5. 在VMware8.0.4安装centos6.3出现蓝屏,显示“anaconda: Fatal IO error 104 (Connection reset by peer) on X server :1.0. install exited abnormally [1/1]”?

    解决方案:在创建虚拟机时选择“自定义(高级)”,然后点击“下一步”,在弹出的对话框中,在硬件兼容性该项选择 Workstation6.5-7.x.如果创建虚拟机时选择“标准”,默认的硬件兼容性将是Wo ...

  6. [HTML/HTML5]6 使用图像

    6.1  将图像作为Web页面的前景元素 使用img元素,就可以在Web页面中添加图像.img是image的缩写.只需在img元素中添加src(source的缩写)属性,并为该属性设置相应的值,就可以 ...

  7. jqueryUI 插件

    1,拖拽插件  draggable 拖拽插件draggable的功能是拖动被绑定的元素, 当这个jqueryUI插件与元素绑定后,可以通过调用draggable()方法,实现何种拖拽元素的效果 $(s ...

  8. Objective-C( Foundation框架 一 NSFileManager)

    NSFileManager 用来管理文件系统的 它可以用于常见的文件,文件夹操作(拷贝,剪切,创建) NSFileManager使用了单例模式(Singleton) 使用defaultManager可 ...

  9. ADO.NET学习

    ADO.NET重要的类 在.NET访问MySql数据库时的几点经验! string connstr=Setting.Instance().GetConnectionString("MySql ...

  10. CTE递归查询

    WITH ctetest(AgencyID,ParentAgencyID,level)AS ( SELECT AgencyID,ParentAgencyID,0 level FROM dbo.Web_ ...