#html #css #css3 #svg #background
Я пытаюсь сделать DIV с разными по форме закругленными сторонами, вот так:
Я проверил некоторые решения, и самое близкое к желаемому результату, которое я смог
получить, это - border-radius. Я использовал:
border-bottom-left-radius: 80%50px;
border-bottom-right-radius: 30%30px;
Как добиться разной формы закругленных концов, как на первой картинке в вопросе?
Ответы
Ответ 1
Если использовать только border-radius, то сделать острый угол у границы не получится, но всё равно можно добиться гораздо более близкого результата, если задавать отдельно задавать значения скругления по каждой из осей: div { position: absolute; top: 32px; left: 60px; width: 325px; height: 250px; border: 1px dotted red; border-radius: 0 0 150px 190px / 0 0 50px 150px; } img { opacity: 0.5; }Если есть возможность обернуть элемент ы другой и подрезать при помощи overflow: hidden на внешнем, то всё ещё лучше. Вот сначала просто блоки нужной формы (можно подогнать ещё лучше, но мне лень): div { position: absolute; top: 32px; left: 60px; width: 325px; height: 250px; } .c { border: 1px dotted blue; } .r { width: 350px; border: 1px dotted red; border-bottom-right-radius: 200px 50px; } .l { width: 375px; margin-left: -50px; border: 1px dotted green; border-bottom-left-radius: 256px 183px; } img { opacity: 0.5; }
А теперь вкладываем (и увеличиваем размер на 2px, которые раньше добавлялись из-за border): div { position: absolute; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; } .c { top: 32px; left: 60px; width: 327px; height: 252px; } .r { right: -25px; padding-right: 25px; border-bottom-right-radius: 200px 50px; } .l { left: -50px; right: 25px; padding-left: 50px; border-bottom-left-radius: 256px 183px; } main { height: 100%; background: linear-gradient(to right, silver, white, silver); text-align: justify; }
![]()
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video Ответ 2
Вы можете рассмотреть использование clip-path: .box { height: 200px; width: 200px; background: blue; -webkit-clip-path: circle(75% at 65% 10%); clip-path: circle(75% at 65% 10%); }Или использовать radial-gradient: .box { height: 200px; width: 200px; background: radial-gradient(circle at 65% 10%, blue 75%,transparent 75.5%); }Или используйте псевдоэлемент и добавьте overflow: .box { height: 200px; width: 200px; position:relative; overflow:hidden; } .box:before { content:""; position:absolute; top:0; left:-10%; right:-10%; bottom:10%; background:blue; border-radius:0 0 50% 100%; }И давайте не будем забывать решение SVG (как обычный элемент или фон) svg { display:inline-block; } .box { display:inline-block; height:200px; width:200px; background:url("data:image/svg+xml;utf8,")0 0/100% 100% no-repeat; }Вот хороший онлайн-инструмент для легкого получения SVG
Если есть возможность обернуть элемент ы другой и подрезать при помощи overflow:
hidden на внешнем, то всё ещё лучше. Вот сначала просто блоки нужной формы (можно подогнать
ещё лучше, но мне лень):
div {
position: absolute;
top: 32px;
left: 60px;
width: 325px;
height: 250px;
}
.c {
border: 1px dotted blue;
}
.r {
width: 350px;
border: 1px dotted red;
border-bottom-right-radius: 200px 50px;
}
.l {
width: 375px;
margin-left: -50px;
border: 1px dotted green;
border-bottom-left-radius: 256px 183px;
}
img {
opacity: 0.5;
}
Комментариев нет:
Отправить комментарий