我的目标是创建一个列表,其中第一个<li>
的文本几乎为白色(#CCC
),而每个<li>
后的文本变暗。
最后一个<li>
应该几乎是黑色的(或几乎0%的不透明度)。
我们的想法是在没有Javascript 的情况下创建一种淡化文字效果。
我尝试使用不透明度添加带渐变背景的叠加div以逐步隐藏文本,但这些问题发生了:
<li>
),我无法将叠加的高度设置为固定大小。<ul>
之上,我无法选择<li>
内的文字。此外,<li>
的填充使<li>
溢出右侧。由于主<div>
的宽度将以百分比而不是最后的像素,因此我无法将宽度设置为固定大小。
以下是我的代码(代码段未显示渐变)以及有关问题的一些解释:
<html>
<head>
<meta charset="UTF-8">
<title>Fading overlay test</title>
<style>
body{
background-color: black;
color: #ccc;
font-family: sans-serif;
font-size: 16px;
}
.fade_test{
border: 1px solid #ccc;
width: 300px;
max-height: 570px;
overflow: hidden;
padding: 0;
}
.fade_test ul{
float: left;
margin: 0;
padding: 0;
list-style-type: none;
}
.fade_test li{
display: inline-block;
border: 2px solid #0000FF;
width: 100%;
padding: .61em;
}
.fading_overlay{
position: relative;
width: 100%;
height: 100%;
background: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 1));
}
</style>
</head>
<body>
<div class="fade_test">
<ul>
<li>Line n°1. Because of the padding, we can't see the blue right border. →</li>
<li>Line n°2. The overlay is on top of this text. Therefore, we cannot select this text.</li>
<li>Line n°3</li>
<li>Line n°4</li>
<li>Line n°5</li>
<li>Line n°6</li>
<li>Line n°7</li>
<li>Line n°8</li>
<li>Line n°9</li>
<li>Line n°10</li>
<li>Line n°11</li>
<li>Line n°12. This is at the bottom of the ".fade_test". This should be almost 100% black (we shouldn't be able to read this).</li>
<li>Line n°13. This one is invisible (it overflows), it's a desired behaviour.</li>
</ul>
<div class="fading_overlay"></div>
</div>
<p>
</body>
</html>
我曾尝试使用颜色淡化文字,但无法想办法淡化部分。我也试图弄乱高度,宽度,位置,浮点数,不透明度甚至calc()但没有效果。 代码是我到目前为止最接近的代码。
代码不需要与IE兼容,并且可以使用最新的CSS技术。我只是不想使用Javascript(如果可能的话)。
答案 0 :(得分:2)
要解决覆盖div高度的第一个问题,您可以将position: relative;
添加到.fade_test
并将position: relative; width: 100%; height: 100%
更改为position: absolute; top: 0; left: 0; right: 0; bottom: 0;
类中的.fading_overlay
要解决叠加层阻止与列表项的交互问题,您可以将pointer-events: none;
添加到叠加层。这将使所有指针事件(例如鼠标点击等)通过。
要使用li
填充修复问题,只需将box-sizing: border-box;
添加到.fade_test li
请参阅JSFiddle