有问题的设计是:http://hthworldwide.net/
我特意尝试重新创建着陆/英雄元素,在滚动时淡化不透明度以在背景中显示固定图像。
我已经接近了,但我似乎无法把这件事搞得一团糟。问题是我不能让白色滤镜在整个屏幕上伸展而不给透明字母留下白色背景。理想情况下,您应该能够通过示例中显示的文本查看背景图像。
以下是我目前的情况:http://codepen.io/rsprice/pen/reVazo
HTML:
<div class="background"></div>
<div class="opacity-layer"></div>
<div class="text"></div>
<div class="other"></div>
的CSS:
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
.background {
width: 3000px;
height: 1000px;
background-position: 0px -300px;
background-size: 130%;
box-sizing: border-box;
z-index: -1;
position: fixed;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
margin: 0;
padding: 0;
color: white;
background: url('https://images.unsplash.com/photo-1454496522488-7a8e488e8606?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&s=a9504411622da8e65df977606f82479c');
}
.opacity-layer {
transform: rotateZ(360deg);
-webkit-perspective: 1000;
box-sizing: border-box;
position: relative;
width: 2000px;
min-height: 100%;
background-size: cover;
background-position: center top;
overflow: hidden;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
margin: 0;
padding: 0;
}
.text {
height: 300px;
width: 100%;
background-position: center;
background: url('http://hthworldwide.net/sites/all/themes/hthworldwide/style/images/home-intro.png') no-repeat;
background-color: transparent;
padding: 0;
margin: 0;
}
.text img {
margin: 0 auto;
}
.other {
height: 2000px;
}
jQuery的:
$(window).scroll(function(){
$(".opacity-layer").css("opacity", 1 - $(window).scrollTop() / 250);
});
答案 0 :(得分:0)
如果您检查源代码,则不仅可以使用单个div
,还可以使用表格。
看起来像这样:
+--+--------------------+--+
| | | |
+--+--------------------+--+
| | TRANSPARENT TEXT | |
+--+--------------------+--+
| | | |
+--+--------------------+--+
代码就像这样(简化):
<div>
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td id="centerCell"></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<table>
</div>
该表格中的所有单元格都有白色背景,但中间的单元格(用透明文本保存白色图像)。此外,中心单元格是唯一具有宽度设置的单元格,因此其他单元格将占据表格/窗口的其余部分。然后,当页面滚动时,您可以更改包含整个表格的div
的不透明度,而不是更改图像图层的不透明度。
这几乎就是你在codepen中的方式(不在问题的代码中),你只需要改变一点代码就可以了:
$(window).scroll(function(){
$(".container table").css("opacity", .95 - $(window).scrollTop() / 250);
});
html,
body {
height: 100%;
margin: 0;
padding: 0;
background: url('https://images.unsplash.com/photo-1454496522488-7a8e488e8606?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&s=a9504411622da8e65df977606f82479c');
}
.container {
width: 100%;
background-position: 0px -300px;
background-size: 130%;
box-sizing: border-box;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
margin: 0;
padding: 0;
color: white;
background:url(http://hthworldwide.net/sites/all/themes/hthworldwide/style/images/background-home-hk2.jpg);
}
#text {
height: 300px;
width: 980px;
background-position: center;
background: url('http://hthworldwide.net/sites/all/themes/hthworldwide/style/images/home-intro.png') no-repeat;
background-color: transparent;
padding: 0;
margin: 0;
}
table {
width: 100%;
height: 100%;
border:0;
border-collapse:collapse;
}
td {
opacity: .95;
height:100px;
background-color:white;
}
#footer { height:1000px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container">
<table border="0">
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td id="text"></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div id="footer"></div>