【问题标题】:Why does a justified <p> element ignore a right margin?为什么对齐的 <p> 元素会忽略右边距?
【发布时间】:2012-02-18 08:19:43
【问题描述】:

我有一个 div,其中包含一个段落、一个列表和一个右浮动 div。

父 div 有一个 text-align:justify;属性。

我给 p 一个 20px 的(全能)边距,但出于某种奇怪的原因,该段右侧的边距被忽略了。我在 ul 上试了一下,结果还是一样。

如果我不对父 div 中的文本进行对齐,则不会忽略边距。 (但我确实希望它是合理的)。

浮动的 div 有一个边距:0;所以我想这不是边距问题。

浮动的 div 是一个固定尺寸(像素)的 div,它是空的,除了背景图像。

我也尝试通过 margin-right:20px; 指定边距它没有工作......

我知道我可以通过向浮动 div 添加左边距来解决它。但我想知道发生了什么。

这是我正在使用的代码(我只编辑了类名)。

CSS:

.parentDiv {
    position: absolute;
    width: 660px;
    height: 350px;
    z-index: -1;
    background-color:#4F4F4F;
    color:#FFFFFF;
    text-align:justify;
    overflow:hidden;
}

.foatedDiv {
    float:right;
    height:100%;
    margin:0;

}

.parentDiv p {
        margin:20px;
}

HTML:

<div class="parentDiv">
 <div class="floatedDiv" style="width:234px;background-image:url(images/jp01.jpg)"></div>

  <strong><a href="someAnchor">Anchor</a></strong>

  <p>Sope paragraph that I cannot understand why ignores its right margin and is driving me crazy.</p>

  <strong>Some Topic</strong>

  <ul>
     <li>Some long item long enough to show there is no right margin.</li>
     <li>Some long item long enough to show there is no right margin.</li>
     <li>Some long item long enough to show there is no right margin.</li>
     <li>Some long item long enough to show there is no right margin.</li>
  </ul>
</div>

这就是我得到的:

【问题讨论】:

  • 你为这个问题付出了很多努力,所以+1
  • 示例文本与屏幕截图不匹配,并且肯定使用了上面未提及的 CSS,与声称的相反,我没有看到 Webkit 或 Gecko 中描述的问题(当我更正 CSS 中的错字)。

标签: css margin justify


【解决方案1】:

因为右侧的图像浮动到右侧。它正在应用您的保证金,您只是无法分辨。该段落实际上一直扩展到该图像下方的右侧,只是内容框没有。您的 margin-right 需要是该图像的宽度加上 20px,以便从图像中缩进 20px。

您的边距实际上是什么样的:

当浮动元素将您的内容推向左侧时,实际的物理框仍在其后面扩展。要更多地推出内容,您必须考虑图像占用的所有空间。一种方法是将其宽度添加到右侧的边距,如下所示:

.parentDiv p {
    margin: 20px 254px 20px 20px; /* 234 + 20 = 254 */
}

请参阅solution on jsFiddle

【讨论】:

  • 或者只是给浮动的&lt;div&gt;一个margin-left,我想。
  • @sdleihssirhc:是的,这也可以,如果内容是要包裹在图片下方,这将是首选方法。
  • 但是文本完全显示(没有任何部分隐藏在图像后面)。为什么它会这样?对我来说真的没有意义。我可以用不同的方式吗? (我不想将图像宽度添加到边距,因为我将使用不同宽度的图像多次重复这些框......而且我不想给 div 左边距,因为你可以看到图像的想法是没有边距,这个边距只与文本有关......
  • @Ozkar:我添加了一张图片来解释如何应用边距。
  • @animuson,谢谢我现在看到我的边距去了哪里(我尝试删除图像,当文本到达包含 div 的右端时,我可以看到边距确实显示)。为什么它会这样工作?在内容无法...的地方展开一个框是否有意义?
【解决方案2】:

正在应用边距,但由于图像较宽,因此被视为“足够好”。

要解决此问题,请添加padding: 0.01px;。直觉上这没什么区别,因为你看不到百分之一像素,但是填充应该强制应用边距。

【讨论】:

  • 填充应该去哪里?我在包含的 div、浮动的 div 和 p 上都试过了,但都没有工作......
【解决方案3】:

不确定您是否注意到拼写错误?

**.foatedDiv** {
  float:right;
  height:100%;
  margin:0;
}

应该是floatedDiv

我相信代码可以满足您的要求。但是,在您引用图像的内联样式中添加 margin-left: 20px 并且它应该修复它。

如果您还有疑问,可以将标题和无序列表包装在另一个 div 中,并在该 div 中处理填充和文本对齐等。

【讨论】:

  • 谢谢,我为示例编辑了这些名称,但它们在我的原始代码中是正确的。添加内部包装 div 听起来也不错。
  • 理想情况下,如果是我,我会拥有你的包装父 div 和一个包含文本的 div 和一个包含图像的 div。或带有图像背景的包装器 div,内部带有您需要的参数的文本 div - HTH
猜你喜欢
  • 2019-05-16
  • 2010-12-25
  • 2020-05-17
  • 2017-02-16
  • 2017-11-07
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
相关资源
最近更新 更多