2014-02-07 3 views
4

У меня есть DIV, который покрывает всю страницу (высота и ширина 100%). Я пытаюсь использовать CSS (и, возможно, JavaScript) для создания эффекта уменьшения масштаба, поэтому DIV меньше (что делает все внутри div - его детей - меньше) до определенной точки на странице (в середине страницы) и к конкретным width и height (скажем, 100 * 100 пикселей, например).Выравнивание div с помощью CSS

Я начинаю со следующим кодом:

<div id="toBeZoomedOut"> 
    <div>something</div> 
    <div><img src="background.jpg"></div> 
</div> 

#toBeZoomedOut { 
    background-color: black; 
    border: 1px solid #AAAAAA; 
    color: white; 
    width: 300px; 
    height: 300px; 
    margin-left: auto; 
    margin-right: auto; 
    -webkit-transition: 1s ease-in-out; 
    -moz-transition: 1s ease-in-out; 
    transition: 1s ease-in-out; 
} 

#toBeZoomedOut img { 
    height: 250px; 
    width: 250px; 
} 

#toBeZoomedOut:hover { 
    zoom: 0.5; 
} 

Проблема с этим кодом является то, что он отъезжает на компоненты вниз (родительский DIV), и сразу же отъезжает, что внутри она затем возвращается, чтобы увеличить компоненты.

В основном это небольшая багги. Какие-нибудь полезные исправления, чтобы уменьшить масштаб изображения? Было бы здорово, если бы я мог уменьшить все вместе до определенного места на странице и до определенной ширины/высоты (например, масштабировать все влево: 100 пикселей, верх: 100 пикселей, а родительский div должен быть: 100 пикселей * 100 пикселей и все остальное относительное по размеру).

Насколько я понимаю, это может быть проще с JavaScript? Любая помощь?

Последнее замечание, если вы заметили, что анимация на самом деле не отражает анимацию масштабирования. Хотя это будет дополнительным плюсом, реальная анимация увеличения будет отличной.

Заранее спасибо :)

jsfiddle ссылку, чтобы сделать его проще: http://jsfiddle.net/HU46s/

+0

Вы пытаетесь сделать [это] (http://stackoverflow.com/questions/21300673/how-do- я-зум-а-фоновое изображение-на-Div-с-фон-размер/21300704 # 21300704)? –

+0

Спасибо, что ответили, но не совсем. То, что я пытаюсь сделать, - это когда у меня есть div (даже если у него есть 10 разных детей с разными размерами и местоположениями в этом div), я пытаюсь увеличить родительский div, уменьшать то, что находится внутри него относительно его теперь нового размер без расширения div в первую очередь. То, что у вас есть, - это div, который имеет свой фон, увеличенный при наведении и уменьшении, когда вы покидаете зависание, которое отличается от моего вопроса. Я действительно ценю, что вы пытаетесь помочь, спасибо, спасибо :) – user220755

+0

О, они вам нужны родственники :) ОК, спасибо за разъяснение .. –

ответ

5

Я использую универсальный селектор, чтобы предназначаться все внутри родительского контейнера, чтобы применить к нему css-переходы.

Следующее, что я сделал, - это изменение ширины внутреннего содержимого до % для удобства масштабирования.

Вот CSS:

#toBeZoomedOut * { 
    -webkit-transition: all 1s ease; 
    -moz-transition: 1s ease; 
    transition: 1s ease; 
} 

Наконец, скрипку: Demo

+0

Спасибо за ответ! Еще несколько вопросов (заданных в вопросе выше): 1. Можем ли мы иметь конечный результат конкретной ширины и высоты вместо масштабирования: 0,5? 2. Можем ли мы иметь конечный результат (окончательный вырезанный ящик) в определенном месте (плавно уменьшать масштаб до определенного места на странице, например, сверху: 100 пикселей, слева: 100 пикселей)? Еще раз спасибо за ответ :) – user220755

+0

Несомненно! Вот обновленная скрипка, http://jsfiddle.net/HU46s/3/. –

+0

Удивительно, я также обновил его, чтобы убедиться, что он масштабируется до определенного места на странице. Это круто, я буду принимать это как ответ. Благодаря! :) – user220755

1

Для того, чтобы все изображения и DIV фона масштаба в то же время вы должны использовать процентный размер для # ZOOMER-внутри элементов и задайте конкретные размеры шрифта ...

Однако не гладкий, если вы хотите получить более гладкий результат, я предлагаю вам использовать jQuery в сочетании с некоторым методом анимации() или плагином.

Fiddle:http://jsfiddle.net/HU46s/1/

Код:

#toBeZoomedOut { 
    background-color: black; 
    border: 1px solid #AAAAAA; 
    color: white; 
    width: 300px; 
    height: 300px; 
    margin-left: auto; 
    margin-right: auto; 
    -webkit-transition: all 1s ease-in-out; 
    -moz-transition: all 1s ease-in-out; 
    transition: all 1s ease-in-out; 
} 
#toBeZoomedOut div, #toBeZoomedOut img { 
    width: 90%; 
    font-size: 20px; 
} 
#toBeZoomedOut img { 
    height: 90%; 
    width: 90%; 
} 

#toBeZoomedOut:hover { 
    zoom: 0.5; 
} 

ровнее по JQuery:

Fiddle:http://jsfiddle.net/HU46s/5/

Код: JQuery - ровнее решение (даже меньше CSS):

$('#toBeZoomedOut').hover(/* change the animation speed as you want :) */ 
    function(){ 
     $(this).animate({ 'zoom': 0.5}, 400); //animation speed 400=0.4s ! 
    }, 
    function(){ 
     $(this).animate({ 'zoom': 1}, 400); //animation speed 400=0.4s ! 
    } 
); 

... с этим только CSS вам нужно, это:

#toBeZoomedOut { 
    background-color: black; 
    border: 1px solid #AAAAAA; 
    color: white; 
    width: 300px; 
    height: 300px; 
    margin-left: auto; 
    margin-right: auto; 
} 

#toBeZoomedOut img { 
    width: 250px; 
} 
+0

Спасибо за ответ! Хотя это исправляет часть проблемы (масштабируя все относительно), что отлично, она все еще негладна (как вы упомянули), а также тот факт, что она не выглядит как эффект масштабирования. Как вы думаете, вы можете оказать какую-либо помощь в реализации jQuery? Еще раз спасибо за ответ :) – user220755

+0

Да, я могу, пожалуйста, проверить и, возможно, принять :) –

Смежные вопросы