我有以下标记,其中#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;
}