【问题标题】:Extra white space between images? [duplicate]图像之间有多余的空白? [复制]
【发布时间】:2016-10-23 20:02:47
【问题描述】:

所以我在我正在构建的网站上有一排图像,并且图像中有一些未编码的空白。

边距设置为零,调试器也不显示任何填充或边框。我不知道为什么会有那个空白。

这是 HTML

<figure class="carousel-inner">
  <img class="sliding-image" src="images/team/alex_morrales.jpg" alt="">
  <img class="sliding-image" src="images/team/david_kim.jpg" alt="">
  <img class="sliding-image" src="images/team/jenny_tabers.jpg" alt="">
  <img class="sliding-image" src="images/team/joey_barrett.jpg" alt="">
  <img class="sliding-image" src="images/team/melinda_lee.jpg" alt="">
  <img class="sliding-image" src="images/team/rachel_dotson.jpg" alt="">
</figure>

和 CSS

.carousel-inner {
    width: 1200px;
    height: 200px;
    margin: 0;
}

.sliding-image {
    width: 200px;
    height: 200px;
}

及相关的CSS重置代码

body, html, div, blockquote, img, label, p, h1, h2, h3, h4, h5, h6, pre, ul, ol,
li, dl, dt, dd, form, a, fieldset, input, th, td
{
  margin: 0; 
  padding: 0; 
  border: 0; 
  outline: none;
}

顺便说一句,我在谷歌浏览器中。

这是它的截图

非常感谢您对理解这个难题的任何帮助,谢谢!

【问题讨论】:

    标签: html css image google-chrome removing-whitespace


    【解决方案1】:

    这就是内联/内联块元素的呈现方式。有几种方法可以消除这些空间。

    1. 将所有img 标签放在一行中(不要按回车键)。读起来有点乱:

    figure img {
      vertical-align: top;
    }
    <figure>
      <img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt=""><img src="https://placehold.it/200x200" alt="">
    </figure>
    1. 另一种是将父级的font-size设置为0

    figure {
      font-size: 0;
    }
    <figure>
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
    </figure>

    如果您有文字,请记住重置孩子的font-size

    1. 你也可以像这样使用float

    figure {
      overflow: hidden;
    }
    
    figure img {
      float: left;
    }
    <figure>
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
      <img src="https://placehold.it/200x200" alt="">
    </figure>
    1. 在标签末尾添加HTML comments,开始在标签末尾,结束在下一行:

    figure img {
      vertical-align: top;
    }
    <figure>
      <img src="https://placehold.it/200x200" alt=""><!-- not
      --><img src="https://placehold.it/200x200" alt=""><!-- really
      --><img src="https://placehold.it/200x200" alt=""><!-- a
      --><img src="https://placehold.it/200x200" alt=""><!-- fan
      --><img src="https://placehold.it/200x200" alt=""><!-- of
      --><img src="https://placehold.it/200x200" alt=""><!-- this
      --><img src="https://placehold.it/200x200" alt=""><!-- inline
      --><img src="https://placehold.it/200x200" alt=""><!-- element
      --><img src="https://placehold.it/200x200" alt=""><!-- fix
      --><img src="https://placehold.it/200x200" alt="">
    </figure>
    1. 将结束标签放在下一行:

    figure img {
      vertical-align: top;
    }
    <figure>
      <img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt=""
      ><img src="http://placehold.it/200x200" alt="">      
    </figure>

    这些是我知道的修复/黑客。不确定是否还有其他方法。 :)

    【讨论】:

    • 好的,谢谢。我实际上找到了一篇关于 css 技巧的文章,它也解释了所有这些方法。谢谢。
    【解决方案2】:

    图片有一个默认的4px margin-right

    将此应用到您的 css 代码以修复它。

    CSS

    .carousel-inner {
        width: 1200px;
        height: 200px;
        margin: 0;
    }
    
    .sliding-image {
        width: 200px;
        height: 200px;
        display: inline-block; //added
        margin-right: -4px; //added
    }
    

    其他方式是使用float:left.sliding-image

    .carousel-inner {
        width: 1200px;
        height: 200px;
        margin: 0;
    }
    
    .sliding-image {
        width: 200px;
        height: 200px;
        float: left;
    }
    

    【讨论】:

    • 这个margin-right: -4px; 只是一个粗俗的黑客,对不起。尝试在&lt;figure&gt; 或其父级上设置font-size:48px
    • 是的,我知道设置负边距,但我正在寻找一种合法的方法来解决这个问题。
    • 我刚刚更新了我的答案。我认为那会做你想要的输出
    • 好的,谢谢 rckjncwlng,但是按照 SGS Venkatesh 的建议将字体大小设置为 0 是可行的。但该解决方案只是另一种黑客攻击吗?
    • Nvm,这是解决问题的合法方法。
    【解决方案3】:

    所以你可以试试这段代码,&lt;img&gt; 标签之间没有断线

    <figure class="carousel-inner"><img class="sliding-image" src="http://placehold.it/350x150"><img class="sliding-image" src="http://placehold.it/350x150"><img class="sliding-image" src="http://placehold.it/350x150"><img class="sliding-image" src="http://placehold.it/350x150"><img class="sliding-image" src="http://placehold.it/350x150"><img class="sliding-image" src="http://placehold.it/350x150"></figure>
    

    和这个一样,带有html注释标签

    <figure class="carousel-inner">
       <img class="sliding-image" src="http://placehold.it/350x150"><!--
       --><img class="sliding-image" src="http://placehold.it/350x150"><!--
       --><img class="sliding-image" src="http://placehold.it/350x150"><!--
       --><img class="sliding-image" src="http://placehold.it/350x150"><!--
       --><img class="sliding-image" src="http://placehold.it/350x150"><!--
       --><img class="sliding-image" src="http://placehold.it/350x150">
    </figure>
    

    【讨论】:

      【解决方案4】:

      这是因为inline-block元素之间默认有空格,请尝试在每个img(inline-block元素)之间添加注释标签。

      * {
        margin:0;
        padding: 0;
      }
      
      .carousel-inner {
        width: 1200px;
        height: 200px;
        margin: 0;
      }
      
      .sliding-image {
        width: 200px;
        height: 200px;
      }
      <figure class="carousel-inner">
        <img class="sliding-image" src="http://placehold.it/350x150"><!--
      --><img class="sliding-image" src="http://placehold.it/350x150"><!--
      --><img class="sliding-image" src="http://placehold.it/350x150"><!--
      --><img class="sliding-image" src="http://placehold.it/350x150"><!--
      --><img class="sliding-image" src="http://placehold.it/350x150"><!--
      --><img class="sliding-image" src="http://placehold.it/350x150">
      </figure>

      【讨论】:

      • 很高兴知道,我不知道 img 元素的默认样式是“inline-block”。谢谢!
      【解决方案5】:

      font-size: 0 设置为.carousel-inner 样式。

      .carousel-inner {
          width: 1200px;
          height: 200px;
          margin: 0;
          font-size: 0;
      }
      

      【讨论】:

      • 好吧,这行得通,但是为什么呢?
      • 额外的空间是因为元素之间的空格/制表符。当您设置font-size: 0 时,这些元素之间的空格会得到处理。 Check this文章了解更多信息。
      • 我实际上是在询问后找到了那篇文章,但感谢您花时间回答。干杯!
      • 很高兴你找到了答案!
      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2018-06-02
      • 2021-12-26
      • 2011-04-20
      • 1970-01-01
      相关资源
      最近更新 更多