浮动与display:inline-block

有的时候,我们需要使独占一行的两个div能够在一行和谐共处,解决方案大概有两种:

1.为两个div均添加display:line-block属性

2.将两个div都设成浮动的元素

这篇文章将深入探讨二者的区别与联系,此外,还将会带给大家一种垂直居中的新方式

我们将以下面的代码作为演示代码,这意味着每当我们讨论一个新问题时就要把代码恢复成下面这个样子:

CSS样式:

    <style>
        .myContainer{
            width: 500px;
            margin: 20px auto;
            background-color: gray;
            overflow: hidden;
        }

        .div1{
            width: 200px;
            height: 100px;
            background-color: red;
        }

        .div2{
            width: 200px;
            height: 100px;
            background-color: aqua;
        }
    </style>

html内容:

<div class="myContainer">
    <div class="div1"></div>
    <div class="div2"></div>
</div>
<div class="myContainer">
    <div class="div1"></div>
    <div class="div2"></div>
</div>

运行后的效果:

1.最基本的区别在于中间是否有空隙

我们首先试着将前两个div都添加属性display:inline-block,后两个div都设置成左浮动。运行效果如下所示:

很显然,由于属性display:inline-block而在一行的块级元素中间会出现间隙,而浮动则不会。

2.面对不同的高度,对齐方式不同

将代码恢复成演示代码,我们将类选择器div2的height属性设置成300px,查看运行效果:

会发现在两个div的高度不同时,两种方式的对齐效果也不相同:

(1)display:inlne-block属性修饰的元素没有脱离文档流,当然会与在正常的文档流中的元素一样采取的底端对齐方式。

(2)float属性修饰的元素在一定程度上脱离了普通文档流的限制,只用考虑向某个方向浮动,所以会产生如图的效果。

使用display:inlne-block的好处在于我们可以通过一个叫做vertical-align的属性来控制两个元素的对齐方式:

(1)我们为前两个div分别添加一个属性:vertical-align:middle

<div class="myContainer">
    <div class="div1" style="display: inline-block;vertical-align: middle"></div>
    <div class="div2" style="display: inline-block;vertical-align: middle"></div>
</div>

查看一下运行效果:(这里我省去了后两个浮动元素的截图)

发现div1出现在了div2的居中位置。

这里要注意,这两个元素一定都要添加上vertical-align这个属性。

当然,如果想让它们顶端对齐,把middle改成top就可以了,截图如下:

括展:垂直居中的新方式:

会思考的朋友会想到利用这种方式可以实现子div在父div内的垂直居中。原理很简单,在父div内设置两个子div:div1,div2,其中div1是我们要垂直居中的元素,div2是辅助元素。我们让div2的宽度为0,高度为父div的高度,然后将div1和div2都加上display:inline-block和vertical-align:middle。之后,便可实现垂直居中。代码如下所示(这里使用text-align:center保证水平居中):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>垂直居中的新方法</title>
    <style>
        .myContainer{
            width: 500px;
            height: 300px;
            margin: 10px auto;
            background-color: gray;
            text-align: center;
        }

        .div1{
            width: 200px;
            height: 100px;
            background-color: red;
            display: inline-block;
            vertical-align: middle
        }

        .div2{
            width: 0;
            height: 100%;
            background-color: aqua;
            display: inline-block;
            vertical-align: middle
        }
    </style>
</head>
<body>
<div class="myContainer">
    <div class="div1"></div>
    <div class="div2"></div>
</div>
</body>
</html>

效果如图所示:

4.浏览器缩放时的区别

有的时候我们需要在父div的一排内安置两个子div,二者的宽度固定为某个像素,中间空余一定距离。这样也存在有两种方案:

(1)两个子div一个向左浮动,一个向右浮动

<div class="myContainer">
    <div class="div1" style="float: left"></div>
    <div class="div2" style="float: right"></div>
</div>

(2)将它们设置为display:inline-block,然后通过margin来设置两者间的距离:

<div class="myContainer">
<!--XXX为符合条件的具体值-->
    <div class="div1" style="display: inline-block;margin-right: XXXpx"></div>
    <div class="div2" style="display: inline-block;"></div>
</div>

这两种方式在父div的宽度为具体像素时几乎没有区别,但当父div的宽度为百分比时,则具有明显的差别:

现在我们将myContainer中的width设置为50%,查看效果,似乎也无差别,但当我们缩放浏览器时,就会发现:

不过父div的宽度一般都是固定的,最后一点大可不必担心。

总结:

display:inlne-block与浮动各有各的优缺点与灵活之处,大家在选择的时候可以结合我列举的几点综合考虑。

时间: 2024-11-06 09:39:58

浮动与display:inline-block的相关文章

CSS display:inline|block|inline-block差异

display:inline|block|inline-block三属性的区别和联系,block就是将元素显示为块级元素,inline就是将元素 显示为行内元素,CSS display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行内,允许空格. 详解CSS display:inline|block|inline-block的区别 ◆CSS display:block CSS display:block就是将元素显示为块级元素. blo

display:inline/block/inline-block

display:inline; 内联元素,简单来说就是在同一行显示.display:block; 块级元素,简单来说就是就是有换行,会换到第二行.display:inline-block; 就是在同一行内的块级元素. 说概念太模糊,来个真实案例吧. <a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a><a href=&qu

display:inline、block、inline-block的区别

block元素的特点是: 元素另起一行: 行宽高边距可控制: <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. inline元素的特点是: 和其他元素都在一行上: 高,行高及顶和底边距不可改变: 宽度就是它的文字或图片的宽度,不可改变. <span>, <a>, <label>, <input>, <img>, <strong&

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

之前讲过块级元素使用display:block 行内元素使用display:inline 那么今天我们就来区分一下display:inline,display:inline-block和display:block的区别 首先先说一个名词 :inline element:行内元素也叫作内联元素,内嵌元素,直进式元素 block element:块级元素 1.display:inline 转化成内联元素,不换行: 内联元素的前面和后面都不会有换行符,你不可以给内联元素定宽和高,也就是说你如果同时给一

display:inline 跟 display:block 跟 display:inline-block区别

我来说句人话吧.display:inline; 内联元素,简单来说就是在同一行显示.display:block; 块级元素,简单来说就是就是有换行,会换到第二行.display:inline-block; 就是在同一行内的块级元素. 说概念太模糊,来个真实案例吧. <a href="#" style="display:inline;width:100px;height:100px;background:#ccc;">链接一</a> <a

display:inline、block、inline-block的区别 摘】

display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. display:inline就是将元素显示为行内元素. inline元素的特点是: 和其他元素都在一行上: 高,行高及顶和底边距不可改变: 宽度就是它的文字或图片

display:inline、block、inline-block

display:inline.block.inline-block的区别 display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. display:inline就是将元素显示为行内元素. inline元素的特点是:  和

【转】display:inline、block、inline-block的区别

转自:http://www.cnblogs.com/jdonson/archive/2011/06/10/2077932.html display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子. display:inline就

[CSS3] CSS Display Property: Block, Inline-Block, and Inline

Understanding the most common CSS display types of block, inline-block, and inline will allow you to get the most out of your HTML and use CSS Frameworks like Bootstrap to their fullest. Takeway: Inline: Can NOT add height and width. But can add marg

2016/2/25 1, margin auto 垂直方向测试 无效 2,margin重叠 3,哪些是块状哪些是内联 4,display:block inline 导航栏把内联转块状最常见+ 扩展

1.利用margin auto完成首页居中,并自行研究,竖直方向用margin auto,是什么效果#container{width:1002px;margin: 0px auto;}    竖直方向上margin:auto;无效.2.测试margin重叠的发生条件及现象,并自行搜索“父子div”也会发生margin重叠,写出代码及效果图. <!DOCTYPE html> <html> <head> <title>测试父子DIV-margin</tit