【问题标题】:How to ignore parent's width limit in CSS [closed]如何在 CSS 中忽略父级的宽度限制
【发布时间】:2017-03-11 23:09:29
【问题描述】:

我的代码示例:

查看此链接https://jsfiddle.net/b5woxesg/

说明:

我的网站内容是这样放置的,以使其保持在页面的中心。 width: in % 和 max-width: in px 不拉伸。 这个内容是从 Markdown 文件中调用的,因为我使用的是 jekyll。

我想做的是:每当我在MD文件中调用{% highlight %}时,生成的代码块应该是width: 100%,但忽略父级的宽度限制。我的意思是整个页面的 100%。此外,里面的文字应该与页面内容保持一致。类似的东西:

但高亮 div 位于带有蓝色边框的内容内。

我认为如果不改变当前结构就无法做到这一点,我对此没有任何问题,但是由于我使用的是 MD 文件,因此可以限制一些更改。

@EDIT:解决方案:

感谢大家的帮助。

我使用了@MD Ashik 提示并使用简单的jQuery 代码对其进行了改进,该代码保存了.highlight height(因为我使用的是height: auto,所以高度可以是任意数字)。 然后我在 .highlight 旁边创建了一个div class="space",它仅用于填充内容中的空间。所以我将 .space div 设置为 .highlight 的 height

查看:https://jsfiddle.net/b5woxesg/7/

【问题讨论】:

  • @CBroe 我真的很想避免这种情况。我相信有一种简单的方法可以做到这一点,但我现在看不到它。 :(
  • 我很惊讶,这真是个好主意。感谢#Maico Williams 也感谢@Pang 的帮助

标签: html css markdown jekyll


【解决方案1】:

给你:

.highlight {
  background-color: yellow;
  height: 50px;
  padding-top: 25px;
  color: black;
  width: 100%;
  position: relative;
  z-index: 1
}

.highlight:before,
.highlight:after {
  background: yellow;
  height: 50px;
  padding-top: 25px;
  width: 40px;
  display: block;
  position: absolute;
  z-index: -1;
  content: '';
  top: 0;
}
.highlight:before {
  left: -12.5%;
}

.highlight:after {
  right: -12.6%;
}

https://jsfiddle.net/b5woxesg/3/

【讨论】:

  • 但是您的代码没有响应,请解决。 codepen.io/ashikjs/full/GjbKON
  • @developernator 也是一个很好的答案。它甚至没有将高亮 div 设置为绝对值。惊人的。考虑到我使用 height: auto 作为高亮 div,我相信我仍然会遇到问题。我说的对吗?
  • @MD 只需在 .highlight 上加大宽度以覆盖您的“理论情况”。
  • @Maico 高度正确。如果在其他情况下需要它,那么您提供的小提琴链接我很乐意提供帮助
  • @developernator 它目前正在将我的页面拉伸到 3000px 宽度。我试图找到一个解决方法,但没有工作
【解决方案2】:

Live Link

是的,只能通过 CSS 进行更改。 通过一些改变:

  1. 只需将position: absolute; 转为relative 上课.page

  2. 并在 .highlight 类中添加 CSS

    position: absolute;
    left: 0;
    

如果您需要更多解决方案,请发表评论。

【讨论】:

  • 噢,我尝试了很多方法,但都忘记了。作品。左侧的 div 已满,且为 100%。当然现在高亮div下面的内容就在它下面了。但主要问题解决了。谢谢。
  • 非常欢迎您,所以我希望您用绿色标志正确回答。
  • 由于高亮div是绝对的,内容不考虑高度,将div移到内容上方。对此有什么想法吗? jsfiddle.net/b5woxesg/5
【解决方案3】:

https://jsfiddle.net/b5woxesg/6/

你不能放置绝对位置,因为元素会溢出。我生命中曾经有过有趣的建议。 Mūṛha uttara。我是编程新手,这也可以回答您的问题。了解有关 JavaScript 的更多信息。两天前我刚开始学习javascript。所以,它可能并不完美。

let page = document.getElementById('page'),
	content = document.getElementById('content'),
	highlight = document.getElementById('highlight'),
  pageStyle = window.getComputedStyle(page, null);
  
highlight.style.width = pageStyle.getPropertyValue('width');
highlight.style.marginLeft = `-${content.offsetLeft + 1}px`

window.onresize = () => {
	highlight.style.width = pageStyle.getPropertyValue('width');
	highlight.style.marginLeft = `-${content.offsetLeft + 1}px`
}
body {
  background-color: #ccc;
}
.page {
  position: relative;
  width: 50%;
  height: auto;
  left: 10px;
  top: 10px;
  background-color: #000;
  padding: 10px 0 10px;
}
.content {
  width: 80%;
  max-width 200px;
  height: auto;
  border: 1px solid blue;
  color: #fff;
  margin: 0 auto;
}
.highlight {
  background-color: yellow;
  width: 100%;
  height: 50px;
  padding-top: 25px;
  color: black;
  left:0;
}
<div class="page" id="page">
  <div class="content" id="content">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis nec mattis est. Donec eget hendrerit lacus. Ut aliquet hendrerit lacinia. Mauris auctor rhoncus turpis ac tempus.
    <div class="highlight" id="highlight">
      <b>highlight</b>
    </div>
    Donec non imperdiet urna, nec cursus magna. Suspendisse ligula erat, consequat quis est ac, sollicitudin placerat diam.
  </div>
</div>

oson savol tentak。

【讨论】:

  • 嘿Arteezy,顺便说一句,好尼克。我已经用 MD Ashik 提示 + 一些 jQuery 代码解决了这个问题。看看这个。 jsfiddle.net/b5woxesg/7 感谢您的评论。 @Edit:很棒的编码。如果你对 jQuery 很了解,但它可以让你的编码更容易,就像我一样。反正干得不错
  • 是的@MaicoWilliams 太棒了。我知道 jQuery。我先学。但是因为我专注于用户体验。我更喜欢性能。 native 和 jquery 的性能差别很大。
  • @user7083298 真的是你的好程序员。您的代码正在 100% 工作。干净的代码。感谢您的正确答案
【解决方案4】:

如果你不想使用定位来实现这一点,你可以这样做:

HTML:

<div class="container-with-fixed-width">
    <div class="fluid"></div>
</div>

CSS:

.fluid {
    width: 100vw;
    margin-left: calc(50% - 50vw);
}

【讨论】:

  • 我认为由于滚动条的厚度,仍然存在水平偏移。所以这可以切断内容。
【解决方案5】:

即使这已经解决了,为了将来参考,这里有一个不使用任何 Javascript 的小提琴解决方案。

考虑到它在一个宽度为 80% 的 div 内,用于计算正确的宽度(宽度 + 填充),并且它的祖父(这甚至是一个技术术语吗?:))是一个宽度为 50% 的 div用于计算负边距。应该很容易适应其他情况。

只需添加到.highlight:

width: 101.1%;
padding-left: 12%;
padding-right: 12%;
position: relative;
left: 50%;
right: 50%;
margin-left: -25vw;
margin-right: -25vw;

小提琴:https://jsfiddle.net/dzrne1uo/1/

您可能想查看this article 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多