CSS: вогнутый угол у DIV с помощью border-radius. Реально?

12
slavegirl
На сайте с 25.06.2012
Offline
388
3645

Здравствуйте!

У меня появилась необходимость трансформировать DIV довольно хитрым образом. По-умолчанию с помощью свойства border-radius у элемента можно нарисовать закругленный выпуклый уголок:

Когда-то читала, что вроде в новых версиях CSS внедрили возможность делать вогнутые углы, типа этого:

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

Мне же нужно получить вот такую фигурку из DIV с помощью стиля:

Подскажите, пожалуйста, реально ли такое? Заранее большое спасибо за любые советы!

С уважением,

Slavegirl

https://t.me/joinchat/RKtR6f68OwU1NzM6  ❤️‍🔥  Сарказм is my orgazm
lutskboy
На сайте с 22.11.2013
Offline
172
#1

поскольку можно сделать то что на рис 1, то можно сделать два дива.

один прямоугольник а другой - рис1. и наложить его поверх первого

slavegirl
На сайте с 25.06.2012
Offline
388
#2

lutskboy, забыла дописать, "клеточки" - это прозрачность. На их месте должно просвечиваться то, что находится под фигуркой (DIV).

WebAlt
На сайте с 02.12.2007
Offline
251
#3

https://jsfiddle.net/9en5pyao/

<div class='concave'>

<div class='rightconcave'></div>
</div>

div.concave {

background:green;
width:150px;
height:150px;
position:relative;
}

div.rightconcave {
position:absolute;
background:white;
width:150px;
height:150px;
bottom:0;
left:0;
border-top-left-radius:500px;
}

IL
На сайте с 20.04.2007
Offline
435
#4
WebAlt:
background:white;
slavegirl:
"клеточки" - это прозрачность. На их месте должно просвечиваться то, что находится под фигуркой (DIV).

То, что под фигуркой..

https://jsfiddle.net/pgq54d7y/

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

Вообще, раньше для такого обычные прозрачные png-шки использовались..

Основной блок - как есть.. (при необходимости "пилится" на несколько составных) а место "прозрачности" отрисовывается PNG-шкой и позиционируется "как нужно"

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
slavegirl
На сайте с 25.06.2012
Offline
388
#5
ivan-lev:
Вообще, раньше для такого обычные прозрачные png-шки использовались..

Тоже думала на счёт PNG прозрачного, чтобы его наложить сверху можно было. Но проблемки начинаются, если у элемента динамические высота с шириной... Картинку тогда нужно заблаговременно достаточно большого размера вставлять и сплюскивать её под размеры уголка. Иначе "поплывут" её границы (чёткость потеряют), особенно на ретинах всяких.

Z0
На сайте с 03.09.2009
Offline
758
#6
slavegirl:
Тоже думала на счёт PNG прозрачного, чтобы его наложить сверху можно было. Но проблемки начинаются, если у DIV динамические высота с шириной... Картинку тогда нужно заблаговременно достаточно большого размера вставлять и сплюскивать её под размеры уголка у DIV. Иначе "поплывут" её границы (чёткость потеряют), особенно на ретинах всяких.

4 пнгшки абсолютные 🤪

slavegirl
На сайте с 25.06.2012
Offline
388
#7

ziliboba0213, можно ещё на canvas всё нарисовать (вместо PNG со статическим цветом фона и размерами). Но хотелось бы найти этот волшебный параметр для border-radius (а может быть что-то другое?), чтобы фигурку такую получить из залитого фоном DIV.

Разве нету такого? Я видела, на Хабре рисовали всплывашки с вогнутыми боками. Но уголков так и не нашла, увы.

IL
На сайте с 20.04.2007
Offline
435
#8
slavegirl:
Но проблемки начинаются, если у элемента динамические высота с шириной... Картинку тогда нужно заблаговременно достаточно большого размера вставлять и сплюскивать её под размеры уголка.

Посмотрите в сторону SVG

p.s. Или так:

https://stackoverflow.com/questions/11033615/inset-border-radius-with-css3

https://css-tricks.com/scooped-corners-in-2018/

Z0
На сайте с 03.09.2009
Offline
758
#9

http://dabblet.com/gist/10168919 во че нашел 🍿

Как я понял, вот это за углы отвечает :)


div.round {
background-image:
radial-gradient(circle at 0 0, rgba(204,0,0,0) 14px, #c00 15px),
radial-gradient(circle at 100% 0, rgba(204,0,0,0) 14px, #c00 15px),
radial-gradient(circle at 100% 100%, rgba(204,0,0,0) 14px, #c00 15px),
radial-gradient(circle at 0 100%, rgba(204,0,0,0) 14px, #c00 15px);
}
slavegirl
На сайте с 25.06.2012
Offline
388
#10
ziliboba0213:
http://dabblet.com/gist/10168919 во че нашел 🍿

Как я понял, вот это за углы отвечает :)

div.round {
background-image:
radial-gradient(circle at 0 0, rgba(204,0,0,0) 14px, #c00 15px),
radial-gradient(circle at 100% 0, rgba(204,0,0,0) 14px, #c00 15px),
radial-gradient(circle at 100% 100%, rgba(204,0,0,0) 14px, #c00 15px),
radial-gradient(circle at 0 100%, rgba(204,0,0,0) 14px, #c00 15px);
}

ziliboba0213, Вы умничка!

Это то, что я искала! А я, блин, дурочка, думала, что нужно через border-radius всё делать...

И ещё важное там, насколько я поняла, вот это:

don't put the color stops at the exact same position, since the result will be too aliased

А если указать одинаковые координаты (15px и 15px), то сглаживание у полукруга вообще пропадает.

ivan-lev, спасибо и Вам большое за подсказки! Вы мне очень быстро помогли.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий