2 части CSS "обои", которые изменяются в браузере

Мой дизайнер считает, что этого не может быть сделано, однако это кажется мне возможным. (Хотя у меня ограниченный опыт CSS). Однако он также сказал, что фон не может быть исправлен, и stackoverflow доказал свою ошибку в прошлом; поэтому я сомневаюсь в его знаниях.

JQuery можно использовать, если это невозможно сделать в чистом CSS. alt text

Верхняя половина будет градиентом, который обладает полным гибким наклоном влево, вправо, вверх, вниз без значительных искажений. Нижняя половина - это изображение, которое идеально подходит для разрешения 1280 x 1024 (так как это наиболее популярное разрешение экрана браузера). Затем, в зависимости от требуемых требований, он будет набросать и исказить любой размер, который ему нужен. Все еще разрешено видеть все изображение.

Рацион между верхней половиной и нижней половиной всегда 50% 50% независимо от разрешения браузера.

Мне также хотелось бы, чтобы исправлены как верхняя, так и нижняя части.

В идеальном мире (без IE) id хотел бы сделать это с градиентами css3 и несколькими фонами в 1 DIV. Однако, поскольку IE9 еще не вышел, я думаю, что лучший способ приблизиться к нему - это 2 divs в контейнере DIV и использование повторного фона PNG для верхнего div.

Следует отметить, что я собираюсь использовать css3pie.com, чтобы разрешить некоторый CSS3 для IE6-8 (но я не хочу полагаться на него, если не доказано 100%)

Возможно ли это с помощью только CSS? Как вы это сделаете?

Если это невозможно с помощью только CSS, есть ли способ, с помощью которого я могу использовать JavaScript/JQuery? Я думаю, что база 1280 x 1024 не самая лучшая идея, потому что у нее, похоже, есть нечетное радио.

Edit 1

О да, у меня тоже есть WIP: http://meyers.ipalaces.org/ extra/

Он выглядит неплохо в 1280 x 1024... теперь он просто получает все изменения размера верхнего DIV на 50%, поэтому изображение составляет 50%.

Мне все равно понравится ВСЕ вода, потому что мне нравится внешний вид скал внизу. Тем не менее, я открыт для альтернативных идей, которые не достигают того, что я хочу на 100%, но приближаюсь.

Edit 2

Как использовать верхний градиент в качестве истинного фона CSS2, а затем просто поместить <img> в нижней части его, чтобы изменить размер? Возможно, это позволит использовать CSS2. Я здесь ссылаюсь на некоторые методы работы: Список в отдельности

Edit 3

Я все еще ищу результаты, которые работают на IE6, а также не заставляют Internet Explorer отставать. Я задаю щедрость 50, чтобы привлечь больше внимания.

Ответ 1

Я успешно придумал два способа сделать это:

Метод 1

Нажмите здесь, чтобы посмотреть демонстрацию

Использование CSS3 background-size Я смог установить 2 div элементов друг на друга с помощью min-height: 50%, а затем с помощью background-size: 100% 50% они успешно выполнили то, что я ищу.

Этот метод был всего лишь доказательством концепции, поскольку IE6-8 не поддерживает background-size, я не преследовал эту настройку совершенно. Как бы то ни было, в настоящий момент это происходит, когда вы прокручиваете, несмотря на background-attachment: fixed;. Я бросил этот метод CSS3, чтобы искать лучшие методы с помощью трюков CSS...


Метод 2

Нажмите здесь, чтобы посмотреть демонстрацию

Следуя примерам, найденным в A List Apart (Article | Пример1 | Пример2). Я использовал Technique # 2 из примера 1, и мне удалось подражать тому, что я хотел сделать, используя только CSS2. (Я не уверен на 100%, как и почему это работает, но это так)

Потому что я также собираюсь использовать CSS3PIE, чтобы дать IE6-8 CSS3 возможность делать linear gradients, border-radius и box-shadow; Я решил использовать линейный градиент вместо изображения для верхнего фона.

Проблемы

  • Метод CSS2 из методики # 2, пример 1 не работает с IE6 правильно
  • Создает чрезмерное отставание во всех существующих Internet Explorer

Ответ 2

Это можно сделать только с помощью CSS. Не требуется никаких PIE. Просто ошибка IE6 и магия фильтров.

Демо: http://www.bundyo.org/test/FPB.html

Ответ 3

Сделайте это, используя raphaeljs. Создайте фон DIV, который станет холстом, нарисуйте rect до 50% высоты страницы (при использовании jquery затем используйте $(window).resize() для мониторинга изменения размера окна и $(window).height(), чтобы получить 50% в пикселях).

Вы можете заполнить формулу raphealjs rect, указав ее значение заливки на что-то вроде fill: "90-#000000-#ffffff"

Что касается изображения: Поместите изображение с помощью raphealjs image Или просто вставьте его с помощью HTML и обновите его по высоте с помощью jquery, как указано выше.

Я сделал что-то подобное недавно, используя около 10 строк кода.

Также: измените ваш water.png, около 275kb, где, как следующий самый большой файл на вашей странице (css), похож на 1.5kb.

Ответ 4

Если вы хотите сохранить горизонт воды на 50% на экране, я бы предложил более простой способ:

Создайте изображение (возможно, шириной около 1280) в Photoshop на дне и градиенте сверху. Утяните верхний градиент в сплошной голубой (например, # 68b). Утенок слева, справа и снизу изображения в тот же сплошной цвет (# 68b).

Установите фон своей страницы следующим образом:

html {
background: #68b url(waterimage.png) center center no-repeat;
}

В вашем случае вы, вероятно, захотите применить фон к #wdth-100 вместо html, но все зависит от того, на какой элемент вы хотите поместить свой фон.

Все сделано. Сообщите мне, если это сработает для вас.

Ответ 5

У меня нет ссылки на ваш верхний образ, поэтому я использовал одно и то же изображение сверху и снизу. Вероятно, вы должны использовать решение CSS для обычных браузеров и JS для IE.

<script type='text/javascript'>

$(document).ready(function() {
    wh=$(window).height();
    ww=$(window).width();
    if(wh%2) {
        h1=Math.round(wh/2);
        h2=Math.round(wh/2)-1;
    } else {
        h1=h2=wh/2;
    }
    img1=$("<IMG/>",{'src':'http://meyers.ipalaces.org/images/bottom-bg.jpg','id':'img1'} )
            .css({'width':ww,'height':h1,'top':'0','left':'0','position':'absolute','z-index':'-100'});
    img2=$("<IMG/>",{'src':'http://meyers.ipalaces.org/images/bottom-bg.jpg','id':'img2'} )
            .css({'width':ww,'height':h2,'top':h1,'left':'0','position':'absolute','z-index':'-100'});


    $(document.body).append(img1);
    $(document.body).append(img2);
});
$(window).resize(function() {
    wh=$(window).height();
    ww=$(window).width();
    if(wh%2) {
        h1=Math.round(wh/2);
        h2=Math.round(wh/2)-1;
    } else {
        h1=h2=wh/2;
    }
    $('#img1').css({'width':ww,'height':h1,'top':'0','left':'0'});
    $('#img2').css({'width':ww,'height':h2,'top':h1,'left':'0'});
});
</script>

Ответ 6

Прагматичный ответ, казалось бы, должен был бы сделать это, используя несколько div с собственным фоном, все из которых были бы расположены абсолютно и позади всего остального, используя z-index.

Я знаю, что не чистое решение разметки с одним div с каким-то волшебным CSS, но это сложная проблема в чистом CSS в любом браузере и почти наверняка невозможна, если вам нужно поддерживать IE6.

Еще более прагматичный ответ заключался бы в том, чтобы сказать: "Я буду поддерживать IE6 насколько могу, но если он не сможет поддержать мой прекрасный фоновый эффект, тогда это просто тяжелая удача для тех, кто все еще использует его".