Сегодня хочу рассказать об интересном способе получения такого эффекта с помощью css:
Для начала создадим разметку. Нам потребуются три блока:
Основная идея состоит в том, что если два блока утекают влево (float: left), то они разместятся друг под другом, если высота промежуточного текста, в котором они плавают, больше высоты первого блока, или рядом друг с другом, если меньше. Иллюстрация:

В нашем случае утекать будут .text и .fade, а роль обтекаемого текста будет выполнять .helper.
Высота вспомогательного элемента соответствует высоте контейнера. Тогда если .text (первый утекающий элемент) выше .helper, .fade сдвинется вправо.

А теперь «инвертируем» поведение .fade путём смещения его влево на 100% ширины и вверх, чтобы он показывался в рамках контейнера:
Position нужен для того, чтобы fade был сверху текста.
Кстати, о контейнере.
Обернём все элементы, чтобы дать простор их обтеканию:
А сам контейнер сделаем таким, как хотели изначально:
Всё!

Демо
Задача:
Показывать fade только тогда, когда высота текста превышает высоту контейнера. Считается, что размеры контейнера заданы.Решение:
Шаг первый
Для начала создадим разметку. Нам потребуются три блока:
- для самого текста;
- для вспомогательной распорки;
- для fade.
<div class="text"></div>
<div class="helper"></div>
<div class="fade"></div>
Шаг второй
Основная идея состоит в том, что если два блока утекают влево (float: left), то они разместятся друг под другом, если высота промежуточного текста, в котором они плавают, больше высоты первого блока, или рядом друг с другом, если меньше. Иллюстрация:

В нашем случае утекать будут .text и .fade, а роль обтекаемого текста будет выполнять .helper.
.text {
float: left;
width: 400px;
}
.helper {
height: 400px;
}
.fade {
float: left;
width: 400px;
height: 60px;
background: url(fade.png) repeat-x;
}
Высота вспомогательного элемента соответствует высоте контейнера. Тогда если .text (первый утекающий элемент) выше .helper, .fade сдвинется вправо.

Шаг третий
А теперь «инвертируем» поведение .fade путём смещения его влево на 100% ширины и вверх, чтобы он показывался в рамках контейнера:
.fade {
...
margin: -60px 0px 0px -400px;
position: relative;
}
* html .fade {
position: static;
}
Position нужен для того, чтобы fade был сверху текста.
Шаг четвёртый
Кстати, о контейнере.
<div class="container">
<div class="wrapper">
<div class="text"></div>
<div class="helper"></div>
<div class="fade"></div>
</div>
</div>
Обернём все элементы, чтобы дать простор их обтеканию:
.wrapper {
width: 5000px;
height: 100%;
}
.helper {
height: 100%;
}
А сам контейнер сделаем таким, как хотели изначально:
.container {
width: 400px;
height: 400px;
overflow: hidden;
border: 1px solid #aaa;
}
Всё!