Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Срезание дива по диагонали (https://javascript.ru/forum/jquery/12338-srezanie-diva-po-diagonali.html)

Acrossfy 13.10.2010 00:56

Срезание дива по диагонали
 
Вложений: 1
Здравствуйте, ситуация довольно необычная. У меня имеется див статичной шириной, скажем 200 пикселей и растянутый на всю высоту странички. Диву задан повторяющийся в высоту фон, сложный паттерн с узором.
Задача - срезать нижнюю часть дива №1 (я приложил наглядную схематичную иллюстрацию) по диагонали. Диагональный срез должен быть 20 градусов, плюс поскольку за нашим дивом имеется второй див с повторяющимся с фоном, срез должен быть прозрачным.
Была идея сделать паттерн фона с прозрачным вырезанным углом снизу справа и сверху слева, но тут этот вариант не подходит, т.к. в условиях данной верстки фон обязательно должен начинаться от верхнего левого угла дива, а высота странички будет постоянно меняться(из-за длины паттерна нужной "стыковки" внизу не получится). Сделать тоже с дивом под вторым номером нельзя, т.к. на правой стороне страницы все повторится зеркальным образом.
Я начал гуглить по поводу плагинов jquery для закругления углов. Видел, что они еще и срезать углы умеют. Но почти все они делают это скриптами и срезают строго на 45 градусов. На офф сайте данного фреймворка я нашел плагины, которые используют пнг как основу для среза углов, но ни на один из этих плагинов ссылки на доки, примеры и даже на скачку уже не работают (по прошествии немалого времени). Другие найденные гуглом плагины не дают прозрачности срезанным углам, или не совместимы с дивами, у которых сложный фон.
Собственно поэтому мне ничего другого не остается, как обратиться к экспертам.
Буду благодарен за любую наводку, помощь или совет в данной ситуации (про переделать дизайн - не принимается, заказчик барин).

Octane 13.10.2010 01:07

Как вариант, постучать по голове дизайнеру за незнание основ создания макетов для веб и попросить переделать.

Еще можно посмотреть в сторону SVG/VML, но расположить SVG в виде фона растягивающегося блока сейчас только Opera умеет, придется помучиться, чтобы расположить блок с SVG под текстом.

Acrossfy 13.10.2010 01:48

Я и есть этот дизайнер) Основы верстки прекрасно знаю, на что шел тоже знал. Сделать подобный дизайн, да еще и резиновый в высоту и ширину - желание заказчицы, а иного она и видеть не хочет.
Что касается SVG, то тут я честно не специалист, работать с ним не умею. Что касается текста, то на этих блоках его совсем не будет, они чисто декоративные.

Aetae 13.10.2010 02:08

Ну можно извращаться сделав сотню дивов(каждый чуть короче) и меняя динамически бгпозищн. Но это такая бяка.
Если вы дизайнер - то постучите по голове себе.)

Пойдём от обратного: почему нельзя сделать фиксирование фона левого блока или заднего фона по низу, и соот-но срезанную картинку на угол?
Возможно эту проблему можно будет проще а главное красивее преодолеть.)

tenshi 13.10.2010 02:18

хороший повод разобраться с svg

Acrossfy 13.10.2010 02:21

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

Aetae 13.10.2010 02:29

Так я специально выделил слово "почему": что за абстрактные нужды дизайна?)
Впрочем пустое - мучайте svg и будет вам счастье.)

Acrossfy 13.10.2010 14:53

Про SVG честно пытался гуглить, но ничего кроме фотошопа и графического формата не находит. Был бы признателен, если бы меня ткнули носом в статью о применении SVG в верстке.
Насчет асбстрактных нужд дизайна я с вами полностью согласен. Но я уже говорил, заказчик-барин, приходится искать выход)
В свое оправдание скажу, что дизайн изначально планировался статичный в ширину, тогда бы проблемы не было. Но у меня потребовали еще и в ширину тянуть, поэтому и возникла головная боль.

subzey 13.10.2010 16:47

Вложений: 1
Мсье знает толк в извращениях.

Держите. Под IE, как обычно, работать не будет.

sysya 13.10.2010 19:15

Ещё можно капнуть в сторону canvas

monolithed 13.10.2010 19:37

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

а во-вторых сделать это еще проще картинкой (как это делается в 99,9% случаев)

Acrossfy 13.10.2010 22:32

monolithed, ну во первых кроссбраузерность нужна. ИЕ6 не счет, но остальное важно. Во-вторых это не тот случай, когда можно сделать картинкой. див 1 тянется в высоту на всю страницу. Паттерн не короткий, и сверху должен стыковаться, поэтому картинкой это не делается.
subzey, спасибо, решение интересное, но ИЕ тоже нужен.. В 9-ом кстати тоже не заработало.
Ситуация разрешилась проще. Все же удалось уговорить заказчицу поменять кое-что, чтобы это стало возможно сверстать.
Спасибо всем большое за советы и помощь, извиняюсь, что нагрузил подобным.

Gvozd 14.10.2010 07:17

Если левый край #div2 четко совпадает с левым краем #div1 При любых телодвижениях, то:
ввести #div3
его ширина равна ширине #div1, а высота равноа высоте #div2
его левый верхний уголй всегда совпадает с левым верхним углом #div2
его z-index больше чем у #div1
его фоновым рисунком задан прямоугольник разделенный по диагонали
правый-верхнйи угол полностью прозрачный(и отображает верный кусок #div1 не зависимо от смещения), а нижний-левый закрашен так же как и #div2, так чтобы плавно переходить в него на совей границе.
кажется все, и все это прекрасно реализуется с помощью голого CSS же, если я ничего не путаю.
размещение текстового и прочего контента в #div1 и #div2 уже будет не так просто, но ТС-у этого воде и не надо

Acrossfy 14.10.2010 10:48

Gvozd, именно так я уже и сделал, после внесения правок в дизайне. Для этого способа требовалось, чтобы фон дива1 позиционировался снизу. Но дело в том, что при первом варианте дизайна, вверху фон дива1 должен был стыковаться с другим дивом. А это было бы невозможно при позиционировании снизу, т.к. высота странички постоянно менялась.
Но все равно спасибо, что откликнулись)

monolithed 14.10.2010 11:47

Если честно я не понимаю почему это вызвало у вас трудности?
пусть даже высота меняется, это реализуется в два счета:
Если div1 - это верх, div2 - середина, div3 - низ, и даже если div3 прижат к низу, а div2 не имеет фиксированной высоты, в самом худшем случае, что может это делается с помощь позиционирования:

margin: 0px 0px -100000px 0px;
padding: 0px 0px 100000px 0px;
position: relative;

в лучшем случае фону для div2 назначается repeat-y и он четко прижимается к div3

Acrossfy 15.10.2010 11:00

Вы совсем не так поняли ситуацию, но все равно спасибо советы.


Часовой пояс GMT +3, время: 15:35.