使元素与祖父母一样宽



我有以下标记,其中#content宽度为80%,包含.slide元素。我希望幻灯片的宽度与其祖父级(即本例中的身体)一样宽。这是我的标记,无法更改

body {
  margin: 0;
  font: medium monospace;
  background: lightgray;
}
#content {
  margin: auto;
  width: 80%;
  background: white;
}
#content:before,
#content:after {
  content: "";
  display: table;
}
.slide {
  height: 6em;
  background: indianred;
}
<div id="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  <blockquote>
    <p>Phasellus euismod dolor imperdiet!</p>
  </blockquote>
  <div class="slide">Donec mauris tellus</div>
  <p>Pellentesque sit amet venenatis diam, at interdum tortor.</p>
  <ul>
    <li>Quisque ornare mi in pharetra porttitor.</li>
    <li>Nulla ultrices quam nec vehicula porta.</li>
  </ul>
</div>

我试过:

  • 相对绝对定位,需要固定幻灯片的高度(幻灯片包含可变长度的文本)
  • 在段落而不是内容上设置 80% 的宽度,但这并不优雅(内容包含不能有 80% 宽度或 10% 左边距的元素)

如果您周围的内容本身需要不同的定位属性组合,则始终可以采用以下方法。

body {
  margin: 0;
  font: medium monospace;
  background: lightgray;
}
#content {
  margin: auto;
  width: 80%;
  background: white;
}
#content:before,
#content:after {
  content: "";
  display: table;
}
.slide {
  height: 6em;
  background: indianred;
  width: 125%; /*100*(100/80)*/
  margin-left: 50%;
  transform: translateX(-50%);
}
<div id="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  <div class="slide">Donec mauris tellus</div>
  <p>Pellentesque sit amet venenatis diam, at interdum tortor.</p>
</div>

根据您需要的浏览器支持,这要么非常简单,要么需要一些棘手的 CSS。

一个简单的版本使用vw(视口宽度单位),它具有不错的支持,并且需要对您的设置进行一些简单的修改:

body {
  margin: 0;
  font: medium monospace;
  background: lightgray;
}
#content {
  margin: auto;
  width: 80vw;
  background: white;
}
#content:before,
#content:after {
  content: "";
  display: table;
}
.slide {
  width: 100vw;
  height: 6em;
  margin-left: -10vw;
  background: indianred;
}
<div id="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  <div class="slide">Donec mauris tellus</div>
  <p>Pellentesque sit amet venenatis diam, at interdum tortor.</p>
</div>

您可以使用负边距和相应的填充 + box-sizing:border-box

小提琴

body {
  margin: 0;
  font: medium monospace;
  background: lightgray;
}
#content {
  margin: auto;
  width: 80%;
  background: white;
}
#content:before,
#content:after {
  content: "";
  display: table;
}
.slide {
  height: 6em;
  background: indianred;
  margin: 0 -12.5%; /* 20% of body = 25% of 80% content... so 12.5% on each side */
  padding: 0 12.5%;
  box-sizing: border-box;
}
<div id="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  <blockquote>
    <p>Phasellus euismod dolor imperdiet!</p>
  </blockquote>
  <div class="slide">Donec mauris tellus</div>
  <p>Pellentesque sit amet venenatis diam, at interdum tortor.</p>
  <ul>
    <li>Quisque ornare mi in pharetra porttitor.</li>
    <li>Nulla ultrices quam nec vehicula porta.</li>
  </ul>
</div>

你可以试试这个:

.slide {
  height: 6em;
  background: indianred;
  width: 100vw;
  margin-left: 50%;
  transform: translateX(-50%);
}

JSFiddle Demo

尝试使用这个:

body {
  margin: 0;
  font: medium monospace;
  background: lightgray;
  overflow: hidden;
}
#content {
  margin: auto;
  width: 80%;
  background: white;
}
#content:before,
#content:after {
  content: "";
  display: table;
}
.slide {
  height: 6em;
  background: indianred;
  width: 100vw;
  transform: translateX(-10%);
}
<div id="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
  <blockquote>
    <p>Phasellus euismod dolor imperdiet!</p>
  </blockquote>
  <div class="slide">Donec mauris tellus</div>
  <p>Pellentesque sit amet venenatis diam, at interdum tortor.</p>
  <ul>
    <li>Quisque ornare mi in pharetra porttitor.</li>
    <li>Nulla ultrices quam nec vehicula porta.</li>
  </ul>
</div>

请改用这个。这是一个小提琴

.HTML

<div class="content">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
<div class="slide">Donec mauris tellus</div>
<div class="content">
  <p>Pellentesque sit amet venenatis diam, at interdum tortor.</p>
</div>

CSS的

body {
  margin: 0;
  font: medium monospace;
  background: lightgray;
}
.content {
  margin: auto;
  width: 80%;
  background: white;
}
.content:before,
.content:after {
  content: "";
  display: table;
}
.slide {
  height: 6em;
  background: indianred;
}

相关内容

最新更新