Как использовать обратный радиус границы в верхней части карты? (ССС)

Я пытаюсь создать красную коробку (как показано на рисунке) с выемкой на верхнем крае. Этот вырез должен иметь закругленные углы с инвертированным радиусом границы. Затем я захотел написать слово в вырезе, размер которого зависел бы от длины слова. Позже на поле также будет текст. Все, что на картинке черное, должно быть прозрачным, чтобы потом можно было откорректировать фон.

Как использовать обратный радиус границы в верхней части карты? (ССС)

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

Можете ли вы предоставить минимально воспроизводимый пример , чтобы участники могли помочь вам с вашей проблемой? Также прочтите как задать хороший вопрос. Вы получите лучшие ответы, если будете следовать этому руководству.

Tushar Jadav 04.09.2024 13:13

Я отредактировал свой ответ, так как пропустил момент, когда выемка увеличивалась автоматически. Это то, что вы ищете?

Endunry 04.09.2024 14:12

См. также «Как создать гладкую изогнутую SVG-маску для правого верхнего угла блока?» Вы можете расширить описанные концепции под свои нужды

herrstrietzel 04.09.2024 22:31
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
3
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для этого вы можете использовать псевдоэлемент ::before. Вот пример:

div {
  width: 200px;
  text-align:center;
  padding:10px;
  border-radius: 20px;
  background: green;
  font-weight: bold;
  font-family: sans-serif;
  color: white;
  padding-top: 30px;
  position: relative;
}

div::before {
  content: '';
  display: block;
  width: 100px;
  height: 20px;
  background: #FFF;
  position: aboslute;
  border-radius: 20px;
  margin-top: -37px;
  margin-left: calc(50% - 50px);
}
<div>
  <br />
  Doloribus est architecto laboriosam minus a dolorem labore. Repudiandae natus voluptates tempora dignissimos eos explicabo. Quibusdam fuga et quo impedit excepturi a voluptates optio. Temporibus laborum rem aut illo ea a.
</div>
Ответ принят как подходящий

Думаю, я добился этого, используя большой элемент div для всей верхней области (черная и красная части) с черным фоном.

Здесь есть 3 элемента div: левая и правая части, а также центральная область выреза.

Левый и правый имеют красный фон, область надреза — красный. Левый и правый получают радиус границы на границе экрана и границу для внутреннего радиуса границы, а вырез в области выреза получает черный фон и радиус границы для нижних краев.

Это работает только с простым фоном, а не с более сложным контентом. Могу поспорить, что можно использовать некоторые магические методы SVG и Clip Path, но если вы используете только простой фон и вам не нужно отображать контент под областью заголовка, где находится вырез, это должно работать.

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

*{
 --notch-top-radius: 5px;
 --notch-bottom-radius: 10px;
 --screen-radius: 10px;
 --screen-bg: red;
 --notch-bg: black;
}

body{
  margin: 0;
  padding: 0;
  background: var(--notch-bg);
}

.screen{
  background: var(--screen-bg);
  height: calc(100vh - 2rem);
  margin: 1rem;
  width: calc(100vh / 1.61);
  display: flex;
  justify-content: space-between;
  flex-direction: column;
  border-radius: var(--screen-radius);
}

.notch-area{
   background: var(--notch-bg);
   display: flex;
   justify-content: space-between;
   width: 100%;
}

.notch .content{
font-size: 0.5rem;
color: white;
text-align: center;
white-space: nowrap;
padding: 0.1rem;
}

.notch-area .left, .notch-area .right{
  width: 100%;
  height: 1rem;
  background: var(--screen-bg);
}

.notch-area .left{
   border-radius: var(--screen-radius) var(--notch-top-radius) 0 0;
}

.notch-area .right{
   border-radius: var(--notch-top-radius) var(--screen-radius) 0 0;
}

.notch-wrapper{
 background:var(--screen-bg);
  height: 1rem;
}
.notch{
  width: 100%;
  height: 1rem;
  background: var(--notch-bg);
  border-radius: 0 0 var(--notch-bottom-radius) var(--notch-bottom-radius);
}
<div class = "screen">
  <div class = "notch-area">
  <div class = "left"></div>
  <div class = "notch-wrapper">
  <div class = "notch">
    <div class = "content">Hello World</div>
  </div>
  </div>
  <div class = "right"></div>
  </div>
  Doloribus est architecto laboriosam minus a dolorem labore. Repudiandae natus voluptates tempora dignissimos eos explicabo. Quibusdam fuga et quo impedit excepturi a voluptates optio. Temporibus laborum rem aut illo ea a.displayCantLoadMessage
</div>

<div class = "screen">
  <div class = "notch-area">
  <div class = "left"></div>
  <div class = "notch-wrapper">
  <div class = "notch">
    <div class = "content">Hello World With longer text</div>
  </div>
  </div>
  <div class = "right"></div>
  </div>
  Doloribus est architecto laboriosam minus a dolorem labore. Repudiandae natus voluptates tempora dignissimos eos explicabo. Quibusdam fuga et quo impedit excepturi a voluptates optio. Temporibus laborum rem aut illo ea a.displayCantLoadMessage
</div>

Вы случайно не знаете, работает ли это как-то в React Native?

Hunter 04.09.2024 22:34

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