Как сделать форму яйца с помощью CSS

Я пытаюсь создать форму, похожую на ту, что на этой картинке: Как сделать форму яйца с помощью CSS

Попытка использовать border-radius для нацеливания на верхний левый и нижний левый углы моего div дает близкий эффект, но я не могу получить такую ​​резкую кривую. Есть ли элегантное решение для этого? Я немного заглянул в clip-path, но не уверен, стоит ли это делать.

Вам не подходит svg?

Fabien Greard 25.06.2018 18:20

Я не уверен. Можно ли использовать SVG с API карт Google?

Vincent Nguyen 25.06.2018 18:21

Что вы имеете в виду под использованием API Google? Вы хотите интегрировать iframe карты Google в эту фигуру?

Fabien Greard 25.06.2018 18:24

@FabienGreard Совершенно верно. У меня уже есть карта, и я просто пытаюсь придать ей такую ​​форму.

Vincent Nguyen 25.06.2018 18:26
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
2
5
129
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сделать это с border-radius можно так:

.box {
  width: 200px;
  height: 200px;
  position: relative;
  overflow: hidden;
}

.box:before {
  content: "";
  position: absolute;
  width: 120%;
  height: 150%;
  transform: rotate(-50deg) translate(45%, 15%);
  background: grey;
  border-radius: 35px;
}
<div class = "box">

</div>

Или используйте SVG в качестве фона:

.box {
  width: 200px;
  height: 200px;
  position: relative;
  background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='grey'><path d='M32 0 C12 28 10 18 38 64 L64 64 L64 0 Z' /></svg>") center/100% 100% no-repeat;
}
<div class = "box">

</div>

ОБНОВИТЬ

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

.box {
  width: 200px;
  height: 200px;
  position: relative;
  background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64' fill='white'><path d='M32 0 C12 28 10 18 38 64 L0 64 L0 0 Z' /></svg>") center/100% 100% no-repeat,
  url(https://picsum.photos/200/200?image=1069);
}
<div class = "box">

</div>

Есть ли способ сделать это без псевдоэлемента before?

Vincent Nguyen 25.06.2018 18:35

@VincentNguyen Я добавил еще один способ;)

Temani Afif 25.06.2018 18:41

Большое спасибо! Это решает исходный пост, но, к сожалению, мне кажется, что мне нужно продолжать поиск альтернативного решения, потому что я недостаточно конкретен в своем OP. Моя реальная проблема заключается в том, что div будет содержать карту Google, поэтому я предположил, что мне нужно создать SVG / псевдоэлементы, которые являются пробелами и покрыть карту этим, иначе моя карта будет полностью серой. Спасибо.

Vincent Nguyen 25.06.2018 18:44

@VincentNguyen Хорошо, я вижу, все еще можно применить мои методы ... Я отредактирую свой ответ, как вы хотите;)

Temani Afif 25.06.2018 18:45

Я пытаюсь создать пробел, но не знаю, как создать круглую часть посередине. Я могу сделать две прямые линии сверху и снизу с помощью :: before и :: after ..

Vincent Nguyen 25.06.2018 19:54

@VincentNguyen проверяю обновление, я инвертирую SVG

Temani Afif 25.06.2018 20:54

Мой div содержит карту, поэтому я попытался переместить SVG в отдельный отдельный элемент и установить для моего div clip-path этот svg. Я подхожу ближе, он имеет правильную форму, слишком маленький

Vincent Nguyen 25.06.2018 21:13

@VincentNguyen не нужен клип-путь ... возьмите код, который я написал последним, удалите фоновое изображение и оставьте только SVG, а затем просто поместите этот элемент над картой, используя абсолютную позицию

Temani Afif 25.06.2018 21:18

Вроде почти работает. Я установил высоту SVG равной 100%, но в следующем разделе ниже он проходит над родительским контейнером. Кроме того, поскольку svg должен иметь z-index для отображения над картой, я теряю возможность щелкать и перетаскивать карту ... возможно, нужно искать другое решение, не уверен.

Vincent Nguyen 25.06.2018 21:27

@VincentNguyen Ах, если вы хотите иметь возможность щелкать / перетаскивать, вы можете добавить pointer-events: none; в SVG, также убедитесь, что вы добавили position:relative в родительский элемент, чтобы высота не переполнялась

Temani Afif 25.06.2018 21:30

Вау .... это работает, не могу поверить, что он работал над этим 5 часов ... Хотел бы я дать вам больше зеленых чеков. Прочитаю немного в svg, чтобы узнать, как вы пришли к этому пути.

Vincent Nguyen 25.06.2018 21:36

@VincentNguyen вот ссылка, которую я использую для создания фигур SVG;) jxnblk.com/paths/…

Temani Afif 25.06.2018 21:37

Отлично, спасибо за этот ресурс. Теперь поработаем над тем, чтобы сделать его более отзывчивым, поскольку он сжимается на маленьких экранах :)

Vincent Nguyen 25.06.2018 21:39

Другие вопросы по теме