Довольно часто на страницах приходится строить блоки, которые должны иметь прозрачные уголки, тянуться по горизонтали и вертикали и иметь графические границы. В сети описано очень много способов, но красивого решения я так и не увидел. Поэтому хочу предложить свое. Суть его в том, что левая и правая стороны позиционируются с помощью отрицательных маргинов, а верхняя и нижняя - с помощью относительного позиционирования. Уголочки расставляются float'ами.
HTML
<div class="block">
<span class="up-r"></span>
<span class="up-l"></span>
<div class="side-left">
<div class="side-right">
<div class="side-up">
<div class="side-bottom">
<div class="box">
<h2>Тело блока</h2>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit</p>
</div>
</div>
</div>
</div>
</div>
<span class="bottom-r"></span>
<span class="bottom-l"></span>
</div>
CSS
/* reset */
p, h2, div, span{padding:0;margin:0}
/* */
body{ background: url(img/main-fon.gif) 0 0 repeat; }
.block{ position:relative; margin:10px 0 15px;}
.box{ position:relative;top:-10px}
/* sides */
.side-left{ background:url(img/w-v-l.gif) 0 0 repeat-y #fff;margin-right:10px;padding-left:10px}
.side-right{ background:url(img/w-v-r.gif) right 0 repeat-y;margin-right:-10px;padding-right:10px}
.side-up{ background:url(img/bw-up.gif) 0 0 repeat-x; position:relative;top:-10px}
.side-bottom{ background:url(img/w-down.gif) 0 bottom repeat-x;position:relative;top:15px}
/* corners */
.up-l{background:url(img/bw-up-l.gif) 0 0 no-repeat;height:68px;width:10px;float:left;margin-top:-10px}
.up-r{ background:url(img/bw-up-r.gif) right 0 no-repeat;height:68px;width:10px;float:right;margin-top:-10px}
.bottom-l{background:url(img/w-down-l.gif) 0 bottom no-repeat;width:10px;height:6px;margin-top:-1px;float:left}
.bottom-r{background:url(img/w-down-r.gif) right bottom no-repeat;width:10px;height:6px;margin-top:-1px;float:right}
/* fix-ie */
.up-l, .up-r, .bottom-l, .bottom-r{font-size:1px;position:relative}
Есть соблазн сократить код на 1 div и переместить уголки внутрь блока и разметить их с помощью абсолютного позиционирования. Однако это решение не кроссбраузерное, так как уголки в ие6 будут гулять на 1 пиксель при разных разрешениях, поэтому только float'ами. Конечно же, под свои блоки придется несколько изменить CSS, тогда как HTML трогать не нужно. К плюсам метода могу отнести возможность темизации всех сторон и уголков блока с помощью изображений. К минусам - большое количество div'ов.
Самое главное - это вариант построения блока является валидным и кроссбраузерным, а также испытан мной во многих проектах.
Rss-подписка
Email
Re: Шаблон резинового блока с прозрачными уголками
годно, у меня на 1920х1080 все ровно :)
Re: Шаблон резинового блока с прозрачными уголками
Спасибо, старался :)
Re: Шаблон резинового блока с прозрачными уголками
В данном моменте вы не правы. Для ie6 есть очень красивое решение. Делается через очень простой expression, прописанный в конд. комментах. Т.ч. данный способ ужасно громоздкий, и не очень заслуживает на жизнь.
html:
<div id="main_text"> <div class="top_left"></div> <div class="top_right"></div> <div class="bottom_left"></div> <div class="bottom_right"></div> Lorem ipsum </div>css для нормальных браузеров:
css ie6:
#main_text div.top_right, #main_text div.bottom_right {righty:expression(parentNode.offsetWidth % 2 ? style.right="-1px" : style.right="0px")} #main_text div.bottom_left, #main_text div.bottom_right {bottomy:expression(parentNode.offsetHeight % 2 ? style.bottom="-1px" : style.bottom="0px")}http://nz-studio.com/flight/fair/ - вот макет, в котором это используется в блоке "Коротко о нас" и футере.
ЗЫ. отступы в главном меню - извращённый взгляд дизайнера.
ЗЗЫ. если вам нужен третий человек в команду - свяжитесь, хотел бы поработать в команде с нормальными верстальщиками. Занимаюсь версткой уже 4 года, сделанных проектов больше сотни. (ICQ 212 666 восемь шесть девять)
Re: Шаблон резинового блока с прозрачными уголками
За expression спасибо. Действительно, даже не знал что так можно.
Мой способ действительно громоздкий, но он предназначен для блоков, в котором стороны можно оформить только с помощью фоновых изображений(когда применение бордера не дает нужный эффект). Возможно, пример выбрал неудачный.
Евгений, Ваша верстка действительно очень хорошая, однако у меня есть несколько замечаний, если хотите, я бы мог поделиться своими мыслями о ней.
Re: Шаблон резинового блока с прозрачными уголками
win xp sp2, ie6, 1699x900:
http://clip2net.com/page/m0/5957239
Re:
1600x900
Re: Шаблон резинового блока с прозрачными уголками
Дело в том, что блок слишком растянулся и его высота стала меньше высоты верхних уголков. Из-за этого-то и произошла деформация. Наверно стоило указать минимальную высоту для блока, тогда этой проблемы бы не возникло.