Как я могу сделать свою кривую радиуса границы наружу?
Я пытаюсь сделать div имеющими границы, как показано на следующем рисунке:
![enter image description here]()
Вот что я пробовал:
div {
height: 100px;
width: 100px;
border-bottom-right-radius:100px 10px;
border:1px solid #000;
}
<div></div>
Ответы
Ответ 1
![Example]()
Верхняя граница создается с помощью :before
:
-
Его высота совпадает с радиусом границы
-
Он расположен только снаружи с top
и выравнивается с левой границей благодаря left
-
Его ширина рассчитывается с помощью calc
, чтобы точно выровнять верхнюю часть кривой
-
Кривая может быть уточнена с помощью transform: skewX(-60deg)
Левая граница создается с помощью :after
:
- Дается 100% -ная высота минус высота до и толщина границы с
calc
Примеры
Номер 1 - бит pointy
div {
border-bottom-right-radius: 100px 20px;
border: 1px solid #000;
border-top: none;
height: 500px;
width: 200px;
position: relative;
border-left: none;
}
div:before,
div:after {
content: '';
display: block;
position: absolute;
left: -1px;
}
div:before {
height: 20px;
width: 100%;
width: calc(100% + 1px);
border-bottom-right-radius: 100px 20px;
border-bottom: 1px solid #000;
border-right: solid 1px #000;
top: -1px;
}
div:after {
height: calc(100% - 18px);
border-left: 1px solid #000;
top: 19px;
}
<div></div>
Ответ 2
Я мог бы сделать это с помощью DIV, но я уверен, что существует более элегантный способ сделать это:
#container {
border:none;
height:100px;
border-right: solid 1px #000;
}
#square_top {
border-bottom-right-radius:100px 10px;
border:none;
border-bottom: solid 1px #000;
height:10px;
}
#square_bottom {
border-bottom-right-radius:100px 10px;
border:none;
border-bottom: solid 1px #000;
border-right:solid 1px #000;
border-left:solid 1px #000;
height:10px;
}
#square {
height: 90px;
border-left:solid 1px #000;
}
<div id="container">
<div id="square_top"></div>
<div id="square">TEXT HERE</div>
</div>
<div id="square_bottom"></div>
Ответ 3
Хотя CSS может это сделать, существует еще один подход, который обеспечивает большую гибкость: SVG
Этот подход позволяет:
- Форма добавляет свой размер к размеру содержимого
- Адаптивный
- Позволяет использовать любой фон (изображение, градиенты, полупрозрачный цвет...)
- Позволяет заполнять форму (изображение, градиенты, полупрозрачный цвет...)
- легче контролировать верхнюю и нижнюю кривые:
body {background: url('http://lorempixel.com/output/people-q-g-640-480-9.jpg');background-size: cover;}
div {
position: relative;
width: 30%;
padding: 5%;
color: #fff;
text-align: center;
}
svg {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
z-index: -1;
}
<div>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<p>Some text</p>
<svg viewbox="0 0 50 100" preserveAspectRatio="none">
<path d="M1 9 C49 10 49 1 49 1 V90 C49 91 49 99 1 99z" stroke-width="0.5" stroke="#000" fill-opacity="0.5" />
</svg>
</div>