【问题标题】:Text overlapping responsive image border文本重叠响应式图像边框
【发布时间】:2016-06-01 23:34:18
【问题描述】:

我用固定的页眉、页脚和中间部分制作了这个页面,其中大图像总是调整到窗口的大小。如果有足够的空间,我会尝试在大图像的右侧添加图像描述、几个按钮和另一个小图像。如果没有足够的空间,那么我希望这些项目全部降到大图像之下。我能够通过创建一个包含项目的表格并将其放在我的代码中的大图像之后来实现它。我为表格设置了 200 像素的最小宽度,这样它就不会变得太窄。当表格下降到下方时,我的问题就会发生。其中的文字与大图像的边框重叠,我想避免它。最简单的解决方案是在描述文本前添加“br”标签,但我不喜欢表格显示在右侧时的样子,所以这对我不起作用。也许有更好的方法可以一起完成这一切。顺便说一下,大图上的边框是由margin和padding组成的,而不是实际的边框。我尝试使用边框进行此操作,但遇到了同样的问题。

这是我目前拥有的所有东西的JSFiddle。请移动侧边框使其更宽/更窄,以查看页面如何响应。感谢您的帮助。

HTML

<!DOCTYPE html>

<html lang="en">

<body>

<div id="header">Header</div>

<div id="main">

<img src="http://s33.postimg.org/5dvnxclpr/tmto1.jpg" id="photo">

<table>
<tr>
<td>
Description Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text
</td>
<tr>
<td>
    <ul>
        <li>
            <a href="">Prev</a>
        </li>
        <li>
            <a href="">Next</a>
        </li>
        <li>
            <a href="">Zoom</a>
        </li>
    </ul>
</td>
<tr>
<td>
<img src="http://s33.postimg.org/8fdpz710v/tmto2.jpg" id="nextphoto">
</td>
</table>

</div>

<div id="footer">Footer</div>

</body>

</html>

CSS

body {
  background: #f0ceb5;
  margin: 0px;
  padding: 0px;
  font-family: Arial, sans-serif;
  font-size: 14px;
  color: #000000;
}

img {
  border: 0px;
}

#header {
  position: fixed;
  top: 0px;
  width: 100%;
  height: 60px;
  line-height: 60px;
}

#main {
  position: fixed;
  top: 60px;
  bottom: 30px;
  left: 20px;
  right: 20px;
  padding: 10px;
  overflow-y: auto;
}

#photo {
  max-height: 100%;
  max-width: 100%;
  width: auto;
  float: left;
  background: #d0a382;
  padding: 10px;
  margin: -10px;
  margin-right: 10px;
}

table {
  margin: 0px;
  padding: 0px;
  min-width: 200px;
}

ul {
  margin: 0;
  padding: 0;
  list-style: none;
  float: left;
}

ul li {
  display: block;
  position: relative;
  float: left;
}

ul li a {
  display: block;
  position: relative;
  float: left;
  padding: 10px;
  white-space: nowrap;
  margin: 10px;
  margin-left: 0px;
  font-family: Arial, sans-serif;
  font-size: 16px;
  color: #ffffff;
  background: #d0a382;
}

#nextphoto {
  margin-top: 10px;
}

#footer {
  position: fixed;
  bottom: 0px;
  width: 100%;
  height: 30px;
  line-height: 30px;
}

编辑:

看起来像边距:-10px 10px 0px -10px;是解决方案,但看起来我仍然有一些问题。直到现在我才注意到它,因为我正在使用 Firefox 浏览,这是唯一一个似乎没有这个问题的浏览器。但是我刚刚检查了 Chrome、IE、Opera,它们有问题。当我使用填充页眉和页脚之间所有高度的大图像并且表格显示在它的右侧时,就会发生这种情况。我使用了边距:-10px 10px 0px -10px;在大图上。大图像下方有一个空间,导致垂直滚动条在不需要时出现。我将它设置为在必要时出现在#main div 上。然而,在这种情况下,大图像下方的小空间使其过早出现。 Firefox 不知何故知道忽略该空间并且不显示滚动条,但所有其他浏览器都会这样做,并且它使页面看起来没有理由看起来不太好。请查看此JSFiddle 并确保扩大窗口,以便表格移动到大图像的右侧。如果可以,请检查它在 Firefox 和其他浏览器中的显示方式,如果您有同样的问题,请告诉我。有没有办法摆脱大图像下方的那个小空间?我知道的唯一方法是在底部使用 -10px 边距,但这让我们回到了最初的问题。

【问题讨论】:

  • 您可以尝试删除#photo 上的负下边距吗? (即margin-bottom: 0;)--查看更新的小提琴(jsfiddle.net/23au174g/1
  • 这应该是一个单独的问题 - 这是一个不同的问题,不是最初问题的要求。您可以将其作为一个新问题提出,恕我直言

标签: html css responsive-design


【解决方案1】:

罪魁祸首是你在照片周围添加了一个负边距,这样当它折叠时,它会在底部给它一个 -10px 的边距,从而迫使文本重叠。

您的代码:

#photo {
  max-height: 100%;
  max-width: 100%;
  width: auto;
  float: left;
  background: #d0a382;
  padding: 10px;

  /* this is your culprit */
  /* margin: -10px; */

  margin-right: 10px;
}

margin 属性接受 4 个参数(上、右、下、左)或 1 个参数。如果您想定位某一方,请使用正确的语法。

例如

margin: 0 10px;

见:http://www.w3schools.com/css/css_margin.asp

【讨论】:

    【解决方案2】:

    您已经做出了英勇的努力来根据自己的意愿调整此页面,但我认为阅读有关 CSS 定位和 HTML 最佳实践的一些教程会有所帮助。 这是对 CSS 布局的一个很好的介绍。 http://learnlayout.com/

    我绝不是专家,但这里是我如何处理此布局的示例。

    CodePen Example

    HTML

    <!DOCTYPE html>
    <html>
      <head>
        <link rel="stylesheet" href="styles.css" media="screen">
      </head>
    
      <body>
        <div class="wrapper">
          <header>
            <h1>Header</h1>
          </header>
    
          <main>
            <section class="left-column">
              <img class="full-image" src="http://s33.postimg.org/5dvnxclpr/tmto1.jpg">
            </section>
    
            <section class="right-column">
              <p>
                Description Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text Text Description Text Description Text
              </p>
              <ul>
                <li><a href="">Prev</a></li>
                <li><a href="">Next</a></li>
                <li><a href="">Zoom</a></li>
              </ul>
              <img src="http://s33.postimg.org/8fdpz710v/tmto2.jpg" id="nextphoto">
            </section>
          </main>
          <footer><h3>Footer</h3></footer>
        </div>
      </body>
    </html>
    

    CSS

    body {
      background-color: #f0ceb5;
    }
    
    p {
      margin: 0;
    }    
    
    a {
      font-family: Arial, sans-serif;
    }    
    
    ul {
      margin: 20px 0;
      padding: 0;
    }
    
    ul li {
      display: inline;
      list-style: none;
      margin-right: 5px;
    }
    ul li:last-child {
      margin-right: 0;
    }
    
    ul li a {
      padding: 10px;
      font-size: 16px;
      color: #fff;
      background: #d0a382;
    }
    
    .wrapper {
      width: 90%;
      margin: 0 auto;
    }
    
    .left-column, .right-column {
      display: inline-block;
    }
    .left-column {
      width: 60%;
      margin-right: 5%;
      vertical-align: top;
    }
    .right-column {
      width: 33%;
    }
    
    .full-image {
      max-width: 100%;
      border: 10px solid #d0a382;
      box-sizing: border-box;
    }
    
    @media (max-width: 800px) {
      .left-column, .right-column {
        display: block;
        width: 100%;
      }
      .left-column {
        margin-right: 0;
      }
      .right-column {
        margin-top: 25px;
      }
    } 
    

    【讨论】:

    • 谢谢你。我肯定有一些阅读要做。我喜欢你的布局,但主图像在我的屏幕上看起来相当小。这个想法是让图像在任何屏幕上填充页眉和页脚之间的整个高度。有没有办法调整您的布局以使其以这种方式工作?我实际上设法在我的布局上毫无问题地做到这一点,但后来想添加一个边框,这给我带来了麻烦。
    • 知道了。我不知道将图像保持在 100% 高度而不会产生一些奇怪的副作用的最佳方法,但我调整了我的示例,以便内容换行的断点发生在更大的最大宽度上,我调整了一些使图像更大的间距。再次查看上面的示例链接以获取更新的布局。
    【解决方案3】:

    您的负边距使文本向上并允许以下文本与图像的边框重叠。

    将边距属性更改为:margin: -10px 10px 0 -10px; (上、右、下、左)

    See updated fiddle

    【讨论】:

    • 谢谢。这正是我所需要的。
    • 看起来还是有问题,我添加了一个编辑来描述它。有什么想法吗?
    • @tanbox 这应该是一个单独的问题 - 这是一个不同的问题(提出一个新问题,让我知道,同时我会调查它)
    • @tanbox 最初查看它表明 #photo 上的填充是罪魁祸首 - 将其更改为 padding: 5px; 可以消除滚动,但它会影响图片周围的边框。看来是时候稍微调整一下布局了。
    • 这很有趣,我会努力让它发挥作用。如果我弄明白了,我会告诉你的。如果我不能,我将开始一个新的问题。你是对的 - 你已经回答了我最初的问题,我将把它标记为已回答。我试着给你投了赞成票,但我还没有足够的声望让我的选票出现。希望尽快:)
    【解决方案4】:

    #photo 中删除float: left 或添加margin-bottom: 10px

    【讨论】:

    • 如果您只删除float: left,文字仍然会与图像的边框重叠...您尝试过吗?
    • Jsfiddle,试试看。我不知道 float left 在那里做什么,但 margin-bottom: 10px;应该这样做。
    猜你喜欢
    • 2021-07-30
    • 2021-01-01
    • 2019-06-29
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多