Для подобных вещей решение CSS всегда предпочтительнее, чем решение JS, потому что а) оно работает с отключенным JavaScript и б) оно работает немедленно без задержки и без проблем с синхронизацией, связанных с обеспечением работы макета.в свое последнее пристанище.Но есть ли в этом случае решение CSS?
CSS
Невозможно с заданной вами разметкой центрировать изображение вертикально по кресту-браузерный способ (включая IE 6-8) только с CSS.Тем не менее, небольшое изменение в вашей разметке включает в себя упаковку одноклеточной таблицы, и затем вы можете центрировать по вертикали с помощью vertical-align:middle
.Ваша разметка будет выглядеть следующим образом:
<div id="display">
<div id="slideshow1">
<table cellspacing=0><tr><td style="height:200px;padding:0;vertical-align:middle">
<img ... />
</td></tr></table>
</div>
</div>
Дополнительный HTML-код, но он сохраняет его по центру без запуска сценария даже при изменении размеров изображения.
JS
Если вы хотите использовать вместо этого JavaScript, похоже, у gnarf правильная идея (кроме того, почему он назвал все свои переменные, начиная со знака доллара?), Я бы взял это и переместил тело в именованную функцию, чтобы выможете звонить, когда захотите (скажем recenter
).Для первоначального рендеринга вы хотите, чтобы это произошло как можно скорее, поэтому я бы включил вызов recenter()
сразу после DIV-слайдов в разметке.