2012-07-03 4 views
1

Я пытаюсь создать страницу для отображения двух изображений рядом. Я хочу, чтобы эти элементы были сосредоточены на экране в формате книги, и по мере изменения размера браузера высота изображения изменилась, чтобы они заполнили окно.Элементы перекрытия Safari/Chrome, которые установлены с помощью встроенного блока

Для этого я использую встроенный блок отображения с выравниванием по центру, чтобы добиться эффекта. IT отлично работает на FF, но когда я открываю Safari или Chrome при изменении размера, divs начинают перекрываться. Я создал этот jsfiddle, чтобы показать пример моего dom. Мне нужно, чтобы pageOne и pageTwo делились встроенным блоком, потому что позже я абсолютно позиционирую ссылки поверх изображений страниц.

Что мне не хватает?

Чтобы увидеть эту проблему, вам нужно открыть jsFiddle в safari/chrome и сделать панель результатов больше, чем значение по умолчанию. Начните с браузера около 1/2 его нормальной ширины/высоты. Когда вы запустите jsFiddle, увеличьте свой браузер и обратите внимание, как два изображения начинают перекрываться. Если вы откроете его в FF, они не будут перекрываться.

http://jsfiddle.net/X9NNh/1

я смог приблизиться к эффекту я хочу во всех браузерах с этим с помощью таблиц:

http://jsfiddle.net/x82uK/

+0

Другая вещь, которую я заметил, что, если они перекрывают друг друга при расширении браузера и они раздвигаются, когда я уменьшить браузер .. в FF они остаются butted (sp?) повторяет друг друга, что является эффектом, который я хочу. –

ответ

1

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

Хотя это сделает вашу работу более трудной (прочтите: требуйте Javascript), когда дело касается абсолютно позиционирующих ссылок на изображениях, here's an alternative approach, используя background-size: contain.

HTML:

<div id="issue"> 
    <div id="leftPage" class="page" style="background-image: url(http://placekitten.com/g/304/400);"></div> 
    <div id="rightPage" class="page" style="background-image: url(http://placekitten.com/g/304/400);"></div> 
</div> 

CSS:

html, body { 
    height: 100%; 
    background: #666; 
} 
#issue { 
    position: absolute; 
    top: 20px; bottom: 20px; 
    left: 20px; right: 20px; 
    border: 1px solid grey; 
    box-sizing: border-box; 
    background: #EEE; 
} 
.page { 
    position: absolute; 
    top: 30px; bottom: 30px; 
    background-repeat: no-repeat; 
    background-size: contain; 
} 
#leftPage { 
    background-position: center right; 
    left: 30px; right: 50%; 
} 
#rightPage { 
    background-position: center left; 
    left: 50%; right: 30px; 
} 
+0

Никогда не думал об использовании этого подхода ... Мне нужно будет сделать снимок. Я делаю ленивую загрузку изображений, поэтому мне нужно написать новый плагин для ленивой загрузки и заменить исходный url, я полагаю ... и да, абсолютное позиционирование моих ссылок будет более сложным b/c. Я не знаю, что такое фактическая ширина div.page есть. Я думаю, я могу определить соотношение сторон изображения и выяснить ширину, основанную на высоте контейнера ... но да, это стоит попробовать. Благодаря! –

+0

Вы на самом деле дали мне отличную идею с вашим комментарием: «встроенные контейнеры не изменяют размер, чтобы соответствовать их содержимому в качестве шкалы их содержимого»! Я просто добавил фрагмент кода для моего обработчика изменения размера, чтобы настроить ширину контейнера .page, чтобы быть шириной img в нем .. и теперь он работает в сафари, хром и ff. http://jsfiddle.net/X9NNh/3/ –

+0

Да, размер ширины, основанный на изображении, неуловим ... назад к чертежной доске. –

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