前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

子元素宽度设置50%无法在一行显示


问题重现

现在需要写一个选项卡,有2个选项可以切换。如是就写下了下面的代码:

 <div class="container">
 <div>选项卡一</div>
 <div>选项卡二</div>
 </div>
 .container {
 padding: 20px;
 }
 .container div{
 display: inline-block;
 width: 50%;
 text-align:center;
 padding: 6px;
 border: 1px solid #3b89ed;
 box-sizing: border-box;
 } 

按照样式所写的,2个选项应该在一行上显示,毕竟设置了display: inline-block;和width: 50%;的。然而,事实并不是如此,而是这样:

为什么会是这样呢,

这代码不按你想要的样子显示呀!

当然,我们可以设置width:49%;来解决,

但这并不是我们想要的,我们想要的是为什么会这样,

通过万能的百度,终于找到了问题产生的原因:

问题成因

产生这个的原因是空白折叠现象!

什么是空白折叠现象?

对于我们大多数人的习惯来讲,大都喜欢利用空格或者换行来调整文章的文字结构。这样往往可以使我们可以更轻松的阅读。但是,在HTML中却不允许我们这么做,这是为什么呢?原来,设计人员比我们考虑的更多。

因为我们无法确定 HTML 被显示的确切效果。屏幕的大小,以及对窗口的调整都可能导致不同的结果。对于 HTML,您无法通过在 HTML 代码中添加额外的空格或换行来改变输出的效果。

当显示页面时,浏览器会移除源代码中多余的空格和空行。所有连续的空格或空行都会被算作一个空格。如果想生成过个空格,需要用 来处理。需要注意的是,HTML 代码中的所有连续的空行(换行)也被显示为一个空格。

前面的都好理解,最后一句又是什么意思呢?

是这样的:

 <div class="container">
 <div>选项卡一</div>//这里有换行,在页面上会显示一个空格。
 <div>选项卡二</div>
 </div>

是不是感觉这样好坑?

那怎么解决呢?

解决方法

方案一

既然回车会有空格,那我就不回就是了......

 <div class="container">
 <div>选项卡一</div><div>选项卡二</div>
</div>

效果如下:

这个是可以解决问题的,

但是,

Alt+Shift+F,格式化代码一下,有还原了。

方案二

既然是空格,能不能隐藏了呢?

display:none;

opacity:0;

visibility:hidden;

都不行,因为这是空格,是一个符号,那么

font-size:0;

测试了一下,完美解决,

 .container {
 padding: 20px;
 font-size: 0;
 }
 .container div{
 display: inline-block;
 width: 50%;
 text-align:center;
 padding: 6px;
 border: 1px solid #3b89ed;
 box-sizing: border-box;
 font-size: 14px;
 }

效果如下:

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言