HTML/CSS实现水平等分并排图片:50%宽度为何换行?
问题
我用宽高均为100%的div容器,在其中放置第一张宽度50%的图片,再放入另一张同样设置50%宽度的图片时,第二张会跑到第一张下方;但把宽度改成49%,两张就能正常并排。明明div宽度是100%,为啥50%就会换行?
相关代码
CSS
body { margin: 0px; } div { width: 100%; height: 100%; } .first-image { width: 50%; height: 100%; outline: 0px; } .second-image { width: 50%; height: 100%; outline: 0px; }
HTML
<html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>project</title> <link rel="stylesheet" href="css/styles.css" /> </head> <body> <div> <img class="first-image" src="https://media.istockphoto.com/id/173682323/photo/says.jpg?s=612x612&w=0&k=20&c=7jnXQrYzUWNTnLhjPgimxHIbjsaHvZmAMALGVzYNARQ=" alt="first-image" /> <img class="second-image" src="https://ichef.bbci.co.uk/news/640/cpsprodpb/37B5/production/_89716241_thinkstockphotos-523060154.jpg" alt="second-image" /> </div> </body> </html>
原因
核心问题是行内块元素的空白字符。img标签默认是inline-block(行内块)元素,HTML里两张图片之间的换行、空格这些空白字符,会被浏览器解析成一个空格字符,这个空格本身占了一点宽度。两张50%宽度的图片加上这个空格的宽度,总宽度就超过了容器的100%,所以第二张图片被挤到下一行;改成49%时,两张图片总宽度98%,加上空格也不会超100%,所以能并排。
解决方法
这里给几个实用的解决思路:
- 消除HTML中的空白:把两个img标签写在同一行,或者用注释填充间隙,比如:
<img class="first-image" src="xxx" alt="first-image" /><!-- --><img class="second-image" src="xxx" alt="second-image" /> - 容器设font-size: 0:给div容器添加
font-size: 0,这样空白字符的宽度就变成0,不会占用空间,同时记得给图片重新设置合适的font-size(如果需要的话):div { width: 100%; height: 100%; font-size: 0; } - 给图片加float:给两张图片设置
float: left,脱离文档流后就不会受空白字符影响:.first-image, .second-image { float: left; } - 用Flexbox布局:给div容器设置
display: flex,Flex布局会自动处理子元素的排列,默认就是横向并排,还能避免空白字符问题:div { width: 100%; height: 100%; display: flex; }
内容的提问来源于stack exchange,提问作者Saiteja Sedate
相关产品推荐
相关产品推荐

