Главная CSS-верстка

Позиционирование блока относительно родителя с помощью position: fixed

За столь продолжительный период верстки сегодня мне впервые пришлось столкнуться с необходимостью разместить на странице фиксированный блок (используя CSS-свойство position:fixed), который бы при скролле страницы всегда сидел в одном месте окна браузера. Информацию по этому поводу я, естественно, почитал на разных блогах и форумах. Но ...

Комментарии (50)

  1. правый блок уплывает под основной контент, при уменьшении ширины

  2. Есть такой плагинчик для ВП — там фиксированный блок мягко подплывает сверху к верхнему краю окна при скроллинге и всегда остается наверху: LC-StatusLine ardy.or.id/2007/11/19/wordpress-plugins-limosin-creative-status-line.xhtml
    В общем, тоже может пригодится — зависит от целей :)

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

  4. Выглядит отлично и вообще может быть полезно для размещения навигации или невысокого сайдбара.
    Заметил только один небольшой глючок — при уменьшении окна до возникновения горизонтальной прокрутки блок ведёт себя эээ… ненормально :)

    Проверял только на Opera 9.50, на последнем билде.

  5. Позитивно.
    Еще посмотри на Полноценный fixed в MSIE, а то твой пример в шестом ИЕ прыгает капец некрасиво.

    Блин, извиняюсь, до конца не дочитал, думал статья уже кончилась, но всё же, в IE6 блок прыгает, как ни крути.

  6. правый блок уплывает под основной контент, при уменьшении ширины

    Да, я знаю. Но этого не избежать, по крайней мере, я не знаю способа для устранения данного недостаток. Но, я считаю, он не существенен, поскольку пользователей с разрешением 800×600 — менее 5% (это в РУнете). Однако, на случай просмотра такой страницы с мобильных устройств данный метод, получается, не подходит.

    sonika, я встречал такие штуки. Без ява-скрипта они работать не будут. Мой же пример сделан на голом CSS, за исключением IE6.

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

    Не понял, о чем ты говоришь.

    Заметил только один небольшой глючок — при уменьшении окна до возникновения горизонтальной прокрутки блок ведёт себя эээ… ненормально :)

    Чуть выше я ответил по этому поводу.

    но всё же, в IE6 блок прыгает, как ни крути.

    Прыгает, потому что я специально не добавил фоновый прозрачный рисунок, чтобы можно было наглядно увидеть, КАК он нехорошо прыгает :)

  7. Интересно для чего это применялось?

  8. Для баннера и картинки RSS-подписки.

  9. Пойдёт статейка для начинающих)

  10. Dimox — спасибо за позновательные статьи, каждый раз читаю и нахожу что-то новое и интересное:)

  11. Нет, Дмитрий не очень хороший вариант :)
    Для Вадима Lasto, а здесь улучшенный вариант: time-info.info/show/
    по моему сделал проще, и без expression.
    Минус твоего решения и в том, что при разных разрешениях все будет разваливаться.
    Так же при уменьшении размеров окна браузера, фиксированный блок не прячется под областью контента, а отрывается от нее, но все равно часть его остается не доступной.
    Тут не должно быть компромиссов :)

  12. Хм.
    gordi, благодарю. По ссылке нашел отличное решение.

  13. Рыскал по Интернету, но не нашёл нужный пример. Мне необходимо зафиксить полноценно в родительском блоке элемент, т. е. если родительский элемент не на всю высоту документа и он вне зоны видимости, то и «блок, который фиксируем» вне зоны видимости. Надеюсь, изложил понятно свою мысль. Никто с таким примером не сталкивался? Заранее благодарен.

  14. а здесь улучшенный вариант: time-info.info/show/

    В Опере 9.27 наблюдается глюк — страница не прокручивается, пока не отключишь ява-скрипты.

    Минус твоего решения и в том, что при разных разрешениях все будет разваливаться.

    Что будет разваливаться? Если разрешение экрана 1024×768 и выше, ничего не разваливается! Зачем вообще брать во внимание разрешения ниже 1024×768? Мы живем в 21 веке.

    Сергей, твой вариант тоже не очень хорош — фиксированный блок начинает прятаться под основной, когда ширина окна браузера примерно 1250 пикселей и ниже, т. е. фиксированный блок виден на разрешениях, начиная от 1280px и выше, при том, что ширина всего контентного блока — 1000px.

    К тому же в FireFox’e (2-я версия) наблюдается некрасивый эффект — та часть основного блока, которая при сужении окна закрывает фиксированный блок, ужасно дергается.

    ИМХО, в твоем варианте минусов больше, чем в моем.

  15. Im Eugene, в вашем случае нужно использовать position: absolute.

  16. № 14
    >В Опере 9.27 наблюдается глюк
    Тут попытался решить проблему для разных разрешений через скрипт,
    чтобы между колонками по сравнению дефолтом 1024*768, при более высоком разрешении не было пустоты, может получилось не совсем удачно :), но похоже это правильный путь.

    Сам макет заточен именно под 1024*768 и во всех браузерах — IE6(7), FF, OPERA 9.23
    не вижу проблем описанных тобой.

    А OPERA вообще и с position: absolute; и с position: fixed; как кошка, что гуляет сама по себе :)
    Писал об этом у себя на блоге.

    Да в FF есть такая неприятность :), но на сколько это критично?

    Дима, в твоем варианте, у меня в IE6 фиксированный блок сваливается под область контента. Могу прислать скрин.

  17. А OPERA вообще и с position: absolute; и с position: fixed; как кошка, что гуляет сама по себе :)

    Насчет fixed не уверен, но с absolute я в Опере никогда не наблюдал проблем.

    Дима, в твоем варианте, у меня в IE6 фиксированный блок сваливается под область контента. Могу прислать скрин.

    Весьма странно. У меня в нем же все на месте.

  18. Да. Все здорово. Вот только у меня body уже дает свой фон на сайте. Но, думаю, можно закрыть глаза на этот баг.

  19. Извините за идиотский вопрос:  — это что и зачем?

  20. LisenOK, это называется условными комментариями, которые используются для Internet Explorer. «if lt IE 7» — обозначает условие «если версия IE меньше 7-й.