display:inline-block带来的问题及解决办法

在日常工作中,会经常遇到两个或多个元素并排排列的效果,以前会使用float等实现,float虽然方便好用,但是需要清除浮动,有时会带来意想不到的bug

而且在移动端是不推荐使用float的,所以使用display:inline-block是一个不错的选择。

但是display:inline-block有时也会带来各种问题,下面是我遇到的一些问题并附带解决办法(有的问题目前我还没有找到解决办法)

1.  如图所示是两个并排的div,均设置为display:inline-block

HTML代码:

<div class="demo">
   <div class="first"></div>
   <div class="second"></div>
</div>

CSS代码:

.demo > div{
  display: inline-block;
  border: 1px solid red;
  font-size: 30px;
}
.first{
   width: 100px;
   height: 100px;
}
.second{
   width: 120px;
   height: 120px;
}

可以看出,两个div中间有空白间隔,但是代码中没有任何margin,查阅资料发现,这种空白间隔是正常现象

我们的代码中的换行和空格等都会产生这样的间隔,除非我们把代码首尾相连写在一起,但是这样的代码并不容易阅读

还有一个解决办法是设置父元素font-size:0;因为空白字符也是一个字符,只要设置为0,则间隔就消失了,如图所示:

2.  上图是两个空白div,其中并没有任何内容,如果在其中一个div中加入内容,如下:

HTML代码:

<div class="demo">
   <div class="first"><span>left</span></div>
   <div class="second"></div>
</div>

CSS代码不变

效果如下:

加入内容的div相对以前的位置会偏移很多

或者我们两个div中都加入内容:

HTML代码:

<div class="demo">
   <div class="first">
      <span>left</span>
   </div>
   <div class="second">
      <span>right</span>
   </div>
</div>

效果如下:

两个div变成了顶部对齐,而没有内容时是底部对齐,下面我们在右边div再多加一些内容,效果如下:

然后我们给右边div设置字体font-size:50px,左边不变,效果如下:

如果给右边div加上margin-top:40;左边不变,效果如下:

那加上padding呢,效果如下:

然后我们发现,无论是设置字体大小,还是设置padding,margin等,两个div一直处在错乱的状态,并没有整齐排列

但是错乱的状态下也是有错乱的规律的,即左边div和右边div中的文字始终处于底端对齐的状态!!

发现了规律,那解决办法就出来了,

(1)给左右两边div都加上一句vertical-align:middle;效果如下:

此时,两个div整体以中间对齐,如果两个div高度一致,那自然就底部对齐啦

(2)给两个div都加上一句overflow:hidden,效果如下:

此时两个div是底部对齐。

原文地址:https://www.cnblogs.com/lsongyang/p/9362832.html

时间: 2024-08-06 03:24:35

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

ie 和谷歌浏览器在display的边框显示不一样的解决办法

eg1: <style> .class2{displau:block; background-color:#e4f39e;width:150px;height:150px; border:10px solid green;} </style> <div class="class2">测试</div> result:        左侧是google上运行的结果      右侧是在ie上运行的结果 在eg1上,用了display:block

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

nginx笔记4-负载均衡带来的问题以及解决办法

接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session.如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取到的session不一样.因此nginx负载均衡带来的问题就是session不一致,假设用户登陆后请求分发到Tomcat1,下一次请求到tomcat2的话, 那么每一次请求都会要求用户登陆.这必然不行的. 解决session共享问题办法有: 1.应用服务器(即Tomcat)之间进行session同步

IE6中的常见BUG与相应的解决办法

开发前端的同学一定都知道,IE6是兼容BUG最多的浏览器,它不支持PNG alpha通道暂且不论.其文档的解析理解规范也引起了诸多恼人的BUG,有时甚至让人感到绝望.本文主要讲解一些比较容易遇到的IE6BUG,以及解决的办法. 一.IE6双倍边距bug 当页面上的元素使用float浮动时,不管是向左还是向右浮动:只要该元素带有margin像素都会使该值乘以2,例如“margin-left:10px” 在IE6中,该值就会被解析为20px.想要解决这个BUG就需要在该元素中加入display:in

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、block、inline-block的区别

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

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元素的特点是: 和其他元素都在一行上: 高,行高及顶和底边距不可改变: 宽度就是它的文字或图片