随着文本内容的行长变长,阅读起来可能会更困难。因此,当视口变宽时,限制内容宽度是一种常见的做法。通常,这是通过为内容设置一个max-width
并将其居中来实现的,无论是包装在一个包装元素中,还是逐节进行。
但是,如果我们希望某个元素在视觉上扩展到覆盖视口的整个宽度,例如标题或单个标题的背景颜色,该怎么办呢?

一种方法是为我们想要宽度受限的内容使用内部包装器,但将外部元素保持在100%宽度。但是,这会增加额外的标记,并且(可以说,令人惊讶的是)非语义化!
<header>
<div class="wrap">
<h2>Header</h2>
</div>
</header>
<h3 class="full-width">
<div class="wrap">Heading</div>
</h3>
<div class="wrap">
<p>... text ... </p>
</div>
header, .full-width {
width: 100%;
background: #ccc;
}
.wrap {
width: 80%;
max-width: 24em;
margin: 0 auto;
padding: 0.25em 0.625em;
}
最好用语义方式(例如,main或section)包装内容,并根据需要在视觉上分割标题。以下是一些我们可以使用的方法
使用负边距
一种简单的方法(来自Timothy Mackey)使用负边距和填充来向两个方向扩展背景。为了避免触发水平滚动,我们需要在html和body元素上都设置overflow-x:hidden
。
html, body {
overflow-x: hidden;
}
.full-width-bar {
margin: 0 -9999rem;
/* add back negative margin value */
padding: 0.25rem 9999rem;
background: rgba(0, 0, 0, 0.5);
}
查看 CodePen 上 Chris Coyier (@chriscoyier) 编写的示例 使用负边距创建全宽横条。
想要使全宽横条的颜色不同于标题背景颜色?一种方法是使用左右边框。但事实证明,超宽的边框存在一些问题。对于超过960px的边框,您需要将其精确设置为9600px或10240px(或等效的em),以避免Chrome中的错误。此外,您需要使用纯色,因为RGBa值在Safari中会显示一个小缝隙。这是因为包含元素居中时出现的舍入误差。
html, body {
overflow-x: hidden;
}
.full-width-borders {
/* also subtract section padding (1.5rem) */
margin: 0 -601.5rem;
/* add back section padding (1.5rem) */
padding: 0.25rem 1.5rem;
background: red;
/* border has to be solid, not RGBa */
/* 9600px or equiv (600rem = 9600/16) */
border-left: 600rem solid maroon;
border-right: 600rem solid maroon;
}
查看 CodePen 上 Parker Bennett (@parkerbennett) 编写的示例 使用边框创建全宽横条。
鉴于使用边框的繁琐性,让我们看看另一种方法
使用伪元素
通过向标题添加一个:before
伪元素,您可以使用绝对定位和负z-index
使标题后面的背景与全宽横条区分开来。这还允许我们为全宽横条使用RGBa。
.full-width-tinted {
position: relative; /* for child pseudo-element */
z-index: 0;
margin: 0 -600rem;
/* add back negative margin value */
padding: 0.25rem 600rem;
background: #666;
background: rgba(0, 0, 0, 0.25);
}
.full-width-tinted:before {
content: "";
position: absolute;
z-index: -1; /* behind parent */
top: 0;
bottom: 0;
/* subtract h2 padding (1.5rem) */
left: 598.5rem;
right: 598.5rem;
background: green;
}
查看 CodePen 上 Chris Coyier (@chriscoyier) 编写的示例 使用负边距创建全宽横条。
在使用负z-index
时需要稍微注意一下,因为它往往只在没有太多嵌套元素及其自身背景的简单情况下才能工作。
如果您需要更大的灵活性,您可以使用两个伪元素,:before
和:after
,来分别向左和向右扩展标题背景。这样,背景可以包含不同的颜色、宽度或高度,仅向一个方向扩展,使用渐变淡出等等。
.full-width {
position: relative; /* for the child pseudo-elements */
/* negative offset = section padding */
margin: 0 -30px;
/* add back section padding value */
padding: 0.25rem 30px;
background: #333;
}
.full-width:before, .full-width:after {
content: "";
position: absolute;
/* fill vertically */
top: 0;
bottom: 0;
width: 9600px;
right: 100%;
background: green;
}
.full-width:after {
width: 320px;
left: 100%;
/* you're free to do something totally different here */
background: green;
}
查看 CodePen 上 Chris Coyier (@chriscoyier) 编写的示例 使用伪元素创建全宽横条。
使用盒子阴影
一种巧妙的方法来避免触发水平滚动是使用box-shadow
生成背景扩展(至少在右侧)。Andreas 创建了一个此方法的演示
查看 CodePen 上 Andreas (@receter) 编写的示例 使用盒子阴影创建全宽浏览器横条。
不幸的是,这方面存在一些问题。Charles Stuart 指出 Internet Explorer 11(v11.0.9600.17501)中存在一个错误,使得使用盒子阴影变得不可靠。似乎即使将模糊设置为0,IE 也会在盒子阴影上使用亚像素抗锯齿。

使用视口单位
Lisa 建议了一种方法,可以通过结合使用vw
和calc()
来避免触发水平滚动,这些方法现在已经拥有了相当可靠的浏览器支持。在合适的环境下它可能很有用(但尚未考虑诸如padding
或min-width
之类的因素)。
查看 CodePen 上 Chris Coyier (@chriscoyier) 编写的示例 全宽横条。
很棒,不错:D
谢谢
不错的解决方案,但在低分辨率下存在很多错误。会出现不必要的水平滚动条。
我提到了那个必要的滚动条没有出现;)
感谢这个很棒的教程。
但是为什么你要使用和标签?使用两者有什么原因吗?
哦,WordPress 移除 HTML 标签
“但是为什么你要使用h1和h2标签?”
他在设置标题的样式?
这是一个极好的技巧!我一直想知道是否有干净、语义化的方式来做到这一点,而无需任何额外的标记。似乎有大量的网站选择实现类似这种样式,但它们似乎都使用包装div或类似的东西来实现技巧。这就是我在我的网站上所做的。现在必须进行更改了。
感谢此技巧!
好吧,我正在寻找类似的东西,但是你怎么做这样的事情:http://www.disketa.si/media/uploads/2011-05/5310d5f7863c73bf5d73697b613e6800.png?我很难在没有表格的情况下做到这一点。
h2 { border-radius: 10px 0 0 }
h2:before { top: 50% }// 或您想要的任何百分比
该死,我一直想知道如何做到这一点!
我希望你列出你所有的演示,这将很有帮助
+1 支持列表!
+2
+2 支持列表
看到解决问题的新的方案总是很有趣!几个月前我一直在尝试实现这个功能,我想出的解决方案是将较大的负左/右边距与同样大的正左/右填充结合起来,如下所示
然后我像你一样将overflow hidden应用于body
body {
overflow-x: hidden;
}
我能够使此方法在FF 2+、IE6+、Safari(版本?)和Chrome(版本?)中工作。
你可以在 http://www.stdi.ca/ 查看一个实际应用的例子。导航栏使用了这种特定的样式(以及网站私有区域中的一些其他元素)。在这个用例中,我为 IE6 添加了一个条件样式,为元素应用了一个固定宽度,但我认为这仅仅是为了防止绝对定位的登录框消失在屏幕左侧。
我认为这样更好。
非常棒!
这使我想起了解决另一个问题的类似方案,即创建等高列。
巨大的(底部)填充 + 负边距 + 溢出隐藏
我在此处阅读到它: http://www.ejeliot.com/blog/61
我喜欢这个,因为它不需要担心在伪元素上重新声明背景属性。不错!
太棒了!一直在寻找类似的东西,实际上也尝试了完全相同的方法(但使用了 margin: 0 -100% 以确保未来的兼容性),但这导致了滚动条的出现。没有想到使用 overflow-x: hidden,但希望避免这种情况。我现在要使用的设计将是响应式的,因此无论如何都不会出现水平滚动。
这真的很聪明
Mobile Safari 是否会忽略其他人的 overflow-x: hidden?
@geoff,我没有看到任何迹象表明 overflow-x:hidden 被忽略了(在 iOS 4,iPhone 3GS 上测试)。
你遇到的问题究竟是什么?是过多的滚动条吗?
我在我的 MBP 上使用 FF4 发现了这个技巧的一个小错误。窗口底部没有出现水平滚动条,但是如果你使用例如两指滑动来滚动屏幕,并向右滑动,它会将页面滚动到右侧。很奇怪,但这是一个小错误,而且可能是我的操作方式有问题。这不会阻止我在一些设计中使用这种技术。
错误已确认 Jason,并且在 Opera 中也存在。
你好,
我尝试了你的方法,但我仍然遇到了上面描述的臭名昭著的 Mac 触控板滚动问题。但是,我注意到你的网站没有出现同样的行为。我只是找不到你如何解决它。
有什么提示吗?
谢谢。
感谢发布这个很棒的解决方案。
我在 IE7 中遇到了一些神秘的问题,无法让 overflow-x 工作。我知道它是一个 CSS3 属性,因此默认情况下不应该支持它,但奇怪的是 IE6 似乎可以正常工作。
我尝试使用浏览器前缀 -ms-overflow-x,但没有成功。其他技巧,例如设置 overflow-y 和 overflow-x,也没有效果。
查看你的示例,你根本没有在 body 上设置 overflow-x,所以我想知道你的示例如何在任何浏览器(包括 IE7)中正常渲染?任何帮助都会不胜感激!
我可能很无知,但为什么不能只包含一个 span 而不是一个 div 呢?
或者,在语义化但不起作用的情况下,拥有一个非语义化但到处都能正常工作的方案不是更好吗?
最后,为什么不只是在每个元素的左右两侧设置 25% 的填充呢?
这不是做同样的事情吗?
我的演示: http://dl.dropbox.com/u/116053/css-fullwide.html
你的示例为 body(包装器)设置了 100% 的宽度,这对于固定宽度不起作用。
我认为这也是一个不错的解决方案。它略有不同,因为所有元素都具有全浏览器宽度,因此需要以不同的方式考虑定位和样式,但在这个简单的示例中,我认为这样更好。
我认为我有一个更好的解决方案,无需禁用水平滚动条。
查看: http://jsfiddle.net/marakoss/rG4kA/
(IE8 中存在一些 z-index 问题,但其他浏览器运行良好)
并且不要忘记为 section 标签(来自演示)或任何其他指定了百分比宽度的元素添加以像素为单位的最小宽度。
这也很聪明,但你正在为标题设置精确的像素高度,这可能不是一个好主意。为了避免这种情况,你可以在标题上设置相对定位,并使用顶部和底部的 0 来使伪元素的高度动态化。但是,当你使标题变为相对定位时,并且你在 section 上设置了背景颜色(在真实环境中很可能发生),伪元素就会消失。仍然很聪明,我喜欢尽量减少使用,只是一个警告。
Chris,在 iOS 上,演示页面包含一个很大的水平滚动区域。
在这种情况下,你建议如何处理溢出问题?
我在移动 Safari 中测试了页面,没有看到这个问题。(好吧,我一开始看到了,然后我修复了它,一开始我隐藏了 html 元素上的溢出,但这不起作用,我将其更改为 body)。你使用的是哪个版本?
iOS 4.3.3 (8J2)。我也重置了 iPad,问题仍然存在。
Chris,我很好奇,你是否觉得 iOS Safari 正在成为新的“IE”?一个功能更强大、更符合标准且不断改进的浏览器,但仍然是实施一项在非移动浏览器上不会有任何问题的功能的障碍。
从重新思考 UI 元素(例如悬停(Trent Walton 在 http://trentwalton.com/2010/07/05/non-hover/ 对此提出了有趣的解决方案)和翻转到 JavaScript(有时在设备上运行速度非常缓慢或根本不运行(我认为这是由于性能不足的设备难以处理未优化的代码))到某些元素在 iOS 下执行方式的不同(例如,Chris-Mcgarry.com 上的音乐样本不是在后台播放,而是在其自己的页面上播放)。
我是一名平面设计专业的学生,正在准备将我的作品集发布到网上,并且一直在网上学习 HTML、CSS 和 JQuery(顺便说一句,你的网站非常宝贵)。虽然我理解需要支持旧版浏览器,但至少目前我必须确保作品集在移动浏览器上完美运行。因此,iOS 已经成为衡量功能实施的标准。
非常有兴趣阅读你对此事的看法。
你好,Chris。
很棒的网站,很棒的文章,我是你的粉丝,balabala。这次无关紧要。
现在关于评论表单验证的一些话:它不像它应该的那样好(我们说的是 css-tricks.com,对吧?)。
当“姓名”或“电子邮件”字段为空并且按下提交按钮时,会出现一个不错的提示,提示错误。这很好。
当评论字段为空并且按下提交时,页面重新加载,出现消息“错误:请键入评论”。没有按钮、链接或文字。这很糟糕。
WordPress 可以做得更好。请做点什么,ajax 是一个选项。
此致,Dmitry。
另一个解决方案可能是这样的
以及针对 ie6/ie7 的修复
问题是你总是需要计算类似 100*(section width)/(section margin) = x 的东西
我道歉。
100*(section margin)/(section width) = x
x – 需要负边距/填充
另一篇很棒且简单的伪元素文章。加分 +100 =)
哎呦… 只是我一个人认为对语义化 HTML 的追求不应该变成臃肿的 CSS 垃圾吗?
是的,是更多的 CSS。它将 4 行 CSS 变成 22 行。但如果在一个大型网站的每个页面上使用它,并且该网站到处都有标题,我们可能会节省数千个 div。现在谁臃肿了?
我更愿意使用臃肿的 CSS,因为正如 Chris 所提到的,它是可重用的,从哲学意义上讲,CSS 不应该有任何意义,因此凌乱的代码不会掩盖数据和内容。
不一定必须是 元素的容器, 语义标签是搜索引擎所需要的。您可以 清晰地操作 传统的div,然后用语义标签包装您的标记。 浏览器不需要 语义标签,它们是为搜索引擎服务的,所以我们不需要为它们设置样式。至少在未来几年内。
不包含任何语义含义,它只用于样式。
“div” 源自“division”(划分),所以将div放在h1中比你想象的更有语义。
关于这个 解决方案,它 很糟糕,不仅 糟糕,而且很丑。 原因如下:您不是在寻找简单的跨浏览器解决方案,而是在追求语义,为了删除一个标记元素,编写了大量在旧版浏览器中无法正常工作的CSS。为了什么?
语义是一个理想, 语义是需要追求的目标,寻找更好的解决方案是好的,但不可能在实际项目中使用这里所说的内容。
<section>
不一定必须是元素的容器*<div>
不包含任何语义含义,它只用于样式。该死的编辑器 >:o
以下是修正后的版本
<section>
不一定必须是元素的容器,语义标签是搜索引擎所需要的。您可以清晰地操作传统的div,然后用语义标签包装您的标记。浏览器不需要语义标签,它们是为搜索引擎服务的,所以我们不需要为它们设置样式。至少在未来几年内。<div>
不包含任何语义含义,它只用于样式。“div”源自“division”(划分),所以将div放在h1中比你想象的更有语义。
关于这个解决方案,它很糟糕,不仅糟糕,而且很丑。原因如下:您不是在寻找简单的跨浏览器解决方案,而是在追求语义,为了删除一个标记元素,编写了大量在旧版浏览器中无法正常工作的CSS。为了什么?
语义是一个理想,语义是需要追求的目标,寻找更好的解决方案是好的,但不可能在实际项目中使用这里所说的内容。
截至上个月,伪元素的支持率在当前浏览器使用水平上为92.1%,并且增长迅速。我敢打赌,一年内它将接近100%,对于“实际项目”来说将是一个完全无需考虑的问题。
语义标签不仅仅“只”用于搜索引擎。事实上,我将按照重要性顺序考虑语义
1) 保持简洁,以便于理解并加快页面加载速度
2) 可访问性 - 帮助屏幕阅读器准确描述和导航内容。
3) 作为额外的好处,搜索引擎也能更好地理解内容,并能更好地对其进行评级和分类。
Chris,你在你链接的那篇文章中使用了W3Schools的统计数据。更好的统计数据来源是StatCounter。我不知道这些数据是否最好,但它们比W3Schools准确得多。
W3Schools只统计了访问其自身网页的访客,而这些访客都是以技术为导向的人。举个例子,根据W3Schools的数据,上个月Chrome和Firefox的使用量都超过了所有版本的Internet Explorer的总和。这完全是错误的,并且对于客户项目来说,这是一个非常具有误导性的统计数据。不幸的是,W3Schools在Google搜索“浏览器统计”和相关术语时仍然占据第一的位置,导致许多人认为它们提供的数字是合法的。
截至目前,由于某种原因,StatCounter的数据已关闭(我假设很快就会修复),但您可以在这篇维基百科文章中查看StatCounter的统计数据。您会发现,上个月IE(所有版本)的使用率约为44%。
因此,每个人都应该自己做个决定,忽略与W3Schools相关的大部分内容,尤其是它们的浏览器统计数据。请查看Paul Irish的网站W3Fools,以获取更多相关信息。
而且,Chris,您最好在指向W3Schools统计数据页面的链接中添加“nofollow”(或者更好的是,更新文章以包含更好的统计数据)——它们已经拥有足够的误导性链接权重,不需要更多了。:)
使用StatCounter,我们看到兼容性为88%。仍然相当不错。并且根据具体情况,不进行回退可能也没什么大不了的。
StatCounter看起来非常可靠。
另外,我并不像许多人那样讨厌W3Schools。我不太在乎这个名字。我希望他们能更积极地响应并在W3Fools上建议的所有更改,但我也认为他们帮助了很多人学习这些东西。
不过,我会记下更新伪元素文章的事情。
你说得对,他们帮助了许多人,包括我自己。但如果他们没有积极响应,那么他们所做的一切就失去了意义,因为很明显,他们更关心的是页面浏览量和广告,而不是提供准确的内容。(这很奇怪,因为如果他们只是修复问题,他们将成为更有价值的资源,从而从长远来看带来更好的利润。)
另外,仅供参考 - 这是一个替代的浏览器统计数据来源,似乎与企业环境更相关。根据他们的统计数据,伪元素的支持率会略低,约为81%。
好吧,假设我们不关心8%(!!!)的用户。
但你为什么要这么做?
body {
overflow-x: hidden;
}
其他92%的桌面浏览器用户仍然无法避免水平滚动,然后你谈论可访问性……
1) 保持简洁,以便于理解并加快页面加载速度
看看谷歌,你见过它的源代码吗?
我在那里看到了这些
1. <table></table>
2. <div style=””></div>
3. <div class=”gbh”>,<div class=”lgpd”>,<div class=”lsb”>
4. onclick=””
5. align=center
等等。
你认为他们关心HTML语义和清晰的代码吗?我不这么认为。
加快页面加载速度 - 是的。
保持代码易于理解 - 是的,但在生产环境中不是这样,只有在本地项目中才是这样。
在生产环境中,我们不需要易于理解的HTML、CSS,我们需要我们的页面加载和渲染速度尽可能快,因此我们必须压缩HTML、CSS、JS,减少对服务器的HTTP请求次数,启用Gzip,减小图像大小,甚至将类名减少到3到5个字母。
人们不关心你的代码,他们关心的是它的外观和加载速度,谷歌知道这一点。
就像我说的:如果你可以用相同的功能实现更简单、更干净、更跨浏览器的方案,那将是很好的。
2) 可访问性 - 帮助屏幕阅读器准确描述和导航内容。
4个问题
1. 你有没有在屏幕阅读器上测试过网站?
2. 其中哪些目前最受欢迎?
3. 你确定屏幕阅读器能够读取HTML5语义标签吗?(证明链接?)
4. 使用屏幕阅读器浏览你网站的用户比例是多少?
3) 作为额外的好处,搜索引擎也能更好地理解内容,并能更好地对其进行评级和分类。
你从哪里得到谷歌或其他搜索引擎支持HTML5语义的信息?(证明链接?)
//
你说HTML5语义标签对屏幕阅读器和搜索引擎都有好处,是的,但不是现在,也许将来会。
我只想说我们不需要为它们设置样式,如果你想在你的网站上使用HTML5语义,只需将你的div.aside、div.header、div.footer、ul.nav、ul.menu用它们包装起来。
对于旧版浏览器,它们将被忽略,并且你的网站在没有JavaScript的情况下不会崩溃。
抱歉我的英语不好
一小部分用户不会受到影响,他们只是看不到“全宽浏览器栏”,这……没什么大不了的。如果你想满足他们……http://code.google.com/p/ie7-js/
在body上隐藏overflow-x需要一些考虑,但1)如果你的网站是流体宽度,它可能永远不会出现问题,2)可以使用媒体查询轻松处理,媒体查询也可以进行polyfill。
我不明白谷歌在某些应用程序中使用糟糕的标记与这里有什么关系。你是说我们应该故意使用更糟糕的标记吗?
关键在于,这个
比这个更有语义
句号。标题就是标题,而不是包含一个“划分”的标题。它代码更少(你似乎很关心页面速度,对吧?),更容易理解,更有语义。我不确定我是否能被说服。
保持代码整洁很重要。
如果它不影响功能并执行与旧解决方案相同的步骤,但它更简单或更高效,并且不应该更耗时。
现实世界。
用户不关心你的代码中发生了什么,只有加载速度和在所有浏览器中的外观是否良好才重要。
时间。
例如,你使用旧的、经过验证的解决方案构建了一个网站,它在任何地方都能正常工作并且看起来不错(即使在IE6中),但后来你认为某些东西在语义上不正确,并且又花了8个小时用JavaScript和伪元素重新实现它。为什么?
用户。
用户使用IE6访问你的网站,他发现你的网站在他的浏览器中看起来很糟糕,并且他不会购买你的产品,不会订购服务,不会注册,或者只是离开,因为你的网站在他的浏览器中看起来很糟糕。
“IE6用户的价值与其他用户的价值一样。”
当你从语义框架中成长起来后,也许你会明白,你是为谁构建网站以及他们需要从你的网站获得什么。
“尽你所能提供最好的体验。”
关于速度。
ie7.js
1. 库加载非常慢,只有在小型页面上才能快速运行。
2. 如果用户没有启用JavaScript,或者JavaScript尚未加载,他的页面将崩溃。这甚至比不显示一个功能齐全、漂亮的网站还要糟糕。
你认为.class还是2个:before更快?
你的文章 https://css-tricks.cn/efficiently-rendering-css/ 吗?
“通用选择器、子选择器、相邻选择器、伪类选择器,应该只在真正需要的时候使用,因为它们比 id 和 class 选择器消耗更多的资源。”
快速美观 vs 缓慢丑陋,你选择哪个?
Chris,我喜欢这个技巧。这是一个我一直在脑海中反复思考,试图找到更好解决方法的问题。这个技巧唯一缺少的是如何处理较窄浏览器窗口中的水平滚动。例如,如果你的内容宽度设置为 960px,而用户将其浏览器窗口大小调整为 900px,他们将如何访问溢出到剩余 60px 的内容?
不要让这种情况发生(CSS 媒体查询!)
你可以使用 max-width:960px 代替 width:960px ;)
教程一如既往地棒!但是加个推特按钮吧 ;) 拜托了!
这些天我正在做一个具有相同效果的设计,并且已经在思考如何实现它,然后我偶然发现了这篇文章,甚至还没有开始寻找解决方案。
谢谢你的提示
这太棒了。正是我在寻找的,可以使我正在处理的项目中的代码保持简单。
现在我正在努力解决的障碍是,我没有看到一个明显的解决方案——让它与 clearfix 一起工作……
我认为这个技巧非常好,但在我的 Mac 上的 Safari 中遇到一个问题。水平滚动条没有出现,但如果我在触控板上对角滚动(或不是完全直线),网站会水平滚动。有没有人遇到同样的问题,如果有,有什么解决方法吗?
刚刚遇到这个问题,看起来可以通过在 html 和 body 中添加“overflow-x: hidden”来修复=)
Dan - 这对我似乎不起作用。你还有其他建议吗?
这真是太棒了——而且我敢肯定我发现了一个小错误!它不会影响演示页面或任何东西,我只是觉得你可能想知道,以便你可以在这篇文章中进行更正。;)
在第一块 HTML 中,你用 div 标签包裹了一个 [二级] 标题——公平竞争。非语义的,胡言乱语!:P 但是,在第一块 CSS 中,你对“h1”元素进行样式设置——而不是“h2”。我只是想指出这一点。:P
为什么我们不使用“width:auto”?
嗯……我不明白问题出在哪里。这里有什么问题吗?
或者这个,如果你使用一个包装容器。
或者如果你想要一个超大的元素
在我看来,所有这些都容易得多。
很棒的教程!这可能对我现在正在做的这个项目有用.. :) 干杯!
这是一个非常有趣的解决方案。不幸的是,我在滚动条方面也遇到了一些问题。
给 div 设置“width:100%”样式并分配固定高度不是更容易吗?
另一个想法
h1 {
padding-left: 50%;
text-indent: -480px;(或任何其他值以与所需固定宽度对齐)
background: #blabla;
}
现在,这只是一个想法;它不会在所有环境中都起作用(想象一下,第二行将如何表现;此外,没有任何东西可以将文本缩窄到固定宽度)。
只是探索一些可能性:)。
这是什么意思?
content: “”;
为什么你必须设置位置(相对、绝对)?
这就是使伪元素成为伪元素的原因。如果你使用 :before 或 :after,你必须使用某种内容,即使它只是一个空字符串。在本例中,我们只需要一个通用的空元素来定位和着色,因此使用了空字符串。
嗨,Chris,看起来不错,但听起来好像有可能与元素(例如,包含登录、导航、广告等的 DIV)左浮动、居中和右浮动发生冲突……是这样吗?还是没有问题?最好能看到演示的更复杂版本,展示它们如何可以很好地共存……或者不能,视情况而定……?
我发现我必须向 html、body 标签添加 height:100%;否则,我在全宽元素底部会得到一个垂直滚动条。
我没有手动定义伪元素的 background-color,而是将其 background-color 设置为 inherit,这在我的所有地方都起作用!
我真的很不喜欢本教程的想法,并且有一种更有效的方法来实现一个中间有内容的全长字段。
简单地说。
header {
background-color: #whatever
margin: 0 auto;
然后为 header 内部创建一个 header 内容。
headercontent {
position: relative;
}
文章中提到的巨大宽度和负边距方法导致能够水平滚动,即使将“overflow-x: hidden”应用于 html 和 body 元素。没有水平滚动条,但如果你选择文本并将光标移到页面右侧,页面就会滚动(这在文章中给出的演示中也是如此)。唯一防止水平滚动的的方法是 box-shadow 方法。
事实证明,此问题仅存在于 Chrome 中。它可能是最近引入的错误。
我发现了同样的问题——我也在 Browserstack 上测试了 Chrome 14 及更早版本,它也出现了同样的问题,所以不确定这个问题是否只是最初被忽略了?如果真是这样,我会很惊讶。
遗憾的是,这些方法都不是完美的——box shadow 似乎是最好的,但我试图创建一个类,我可以将其直接放到一个元素上并使其扩展。这非常简单,直到你遇到这个错误。
所以,我必须说:谢谢!我知道这篇文章很旧,但你已经无数次地帮助了我,而这篇文章真的,真的帮助了我很多。非常感谢你!_
我在 header 中使用了它,非常感谢。但我有一个这样的问题。当我给阴影时,看起来像两个 header 部分.. 前后接收不同的阴影。
Peter Sieg 是对的。我在 Chrome 上也发现了同样的问题,不幸的是,它似乎在移动设备上的响应式网站上造成了问题。在移动设备上,缩放似乎会自动设置为包含“页面外”区域(即使使用
<meta name="viewport" content="width=device-width, initial-scale=1">
)。在移动宽度站点上留下大量空白区域。有没有人有解决此问题的建议?
如果我想在 h2 文本后面立即添加一个图像背景,并且希望它水平延伸到整个 div,该怎么办?
我遇到了麻烦。我使用了 span:after,但这种情况下 repeat-x 不起作用 :( 有人知道如何解决吗?
background-repeat: repeat;
它应该可以工作,因为我在第一次使用 css 的时候也采用了同样的方法。
如果我发布了错误的内容,请原谅,因为我刚开始学习 css :)
作为 CSS 新手,我真的很喜欢它,这篇帖子是我在这个旅程开始时访问的帖子之一。
如果我想在一个页面上创建许多类似的全尺寸 div,我应该遵循同样的方法吗?
像这样怎么样?
#header {
width:100%;
height:80px;
padding:20px;
position: fixed;
display: inline-block;
top: 0px;
left: 0px;
z-index: 5;
overflow-x: visible;
overflow-y: visible;
}
修复在 Firefox 或 Chrome 放大时显示的左侧 1px 白色边框的边框技术
使用 left: -9990px 代替 left: -9999px
http://codepen.io/lemnis/pen/djtCb
我的一些 vw 和 calc 魔法想法
不错 :D
Memmie Lenglet 提供的另一个 calc 版本
http://codepen.io/chriscoyier/pen/158a2712b7db1c7281d0f53572c6cfaf