Создание стилей подсказок типа WhatsApp

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

Я пробовал что-то подобное, но потом теряю радиус границы

.arrow {
  --a: 15px; /* control the arrow shape */

  width: 200px;
  height: 100px;
  position: relative;
  overflow: hidden;
  background: red;
  border-radius: 10px;
  
  padding-left: var(--a); /* or padding-right */
  clip-path:polygon(0 0,100% 0,100% 100%,var(--a) 100%,var(--a) var(--a))
  /* x,y --> update all the x to (100% - x) to get the right */
}
                                <div class = "arrow">
                                  contents
                                </div>

https://jsfiddle.net/4azhk38o/

.bubble {
  --r: 25px; /* the radius */
  --t: 30px; /* the size of the tail */
  
  max-width: 300px;
  padding: calc(2*var(--r)/3);
  -webkit-mask: 
    radial-gradient(var(--t) at var(--_d) 0,#0000 98%,#000 102%) 
      var(--_d) 100%/calc(100% - var(--r)) var(--t) no-repeat,
    conic-gradient(at var(--r) var(--r),#000 75%,#0000 0) 
      calc(var(--r)/-2) calc(var(--r)/-2) padding-box, 
    radial-gradient(50% 50%,#000 98%,#0000 101%) 
      0 0/var(--r) var(--r) space padding-box;
  background: #1384C5;
  color: #fff;
}
.left {
  --_d: 0%;
  border-left: var(--t) solid #0000;
  margin-right: var(--t);
  place-self: start;
}
.right {
  --_d: 100%;
  border-right: var(--t) solid #0000;
  margin-left: var(--t);
  place-self: end;
}

body {
  margin: 0;
  min-height: 100vh;
  display: grid;
  place-content: center;
  gap: 20px;
  font-family: system-ui, sans-serif;
  font-size: 20px;
}
<div class = "bubble left">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt </div>
<div class = "bubble right">Ok, Thank you</div>
<div class = "bubble left"> ut labore et dolore magna </div>
<div class = "bubble right">Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt </div>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
74
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

введите сюда описание изображения

пожалуйста, замените этот CSS своим CSS

  -webkit-mask: radial-gradient(var(--t) at var(--_d) 100%, #0000 98%, #000 102%) var(--_d) 0%/calc(100% - var(--r)) var(--t) no-repeat, conic-gradient(at var(--r) var(--r),#000 75%,#0000 0) calc(var(--r)/-2) calc(var(--r)/-2) padding-box, radial-gradient(50% 50%,#000 98%,#0000 101%) 0 0/var(--r) var(--r) space padding-box;

Объясните, пожалуйста, как это решает вопрос. Ответы, содержащие только код, не являются хорошими ответами

DarkBee 11.10.2023 08:02

проверьте экран, почему вы ставите нижнюю точку в моем ответе?

PM Corewix 11.10.2023 08:13

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

DarkBee 11.10.2023 08:14

сначала проверь скриншот моего ответа

PM Corewix 11.10.2023 08:16

объясните пожалуйста, где я ошибся в ответе

PM Corewix 11.10.2023 08:27

у него небольшой выступ и показан только вариант с выравниванием по левому краю. Не могли бы вы показать свой ответ для решения обеих ситуаций и объяснить, где в математике это обрабатывается?

The Old County 11.10.2023 09:06
Ответ принят как подходящий

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

.left-message {
  position: relative;
  background-color: rgb(250, 230, 175);
  border-radius: 0px 10px 10px 10px;
  padding: 1%;
  text-align: left;
  margin-right: 50%;
}
.left-message:after {
  content: "";
  position: absolute;
  right: 100%;
  top: 0px;
  border-width: 5px;
  border-style: solid;
  border-color: rgb(250, 230, 175) rgb(250, 230, 175) transparent transparent;
}
.right-message {
  position: relative;
  background-color: rgb(234, 250, 175);
  border-radius: 10px 0px 10px 10px;
  padding: 1%;
  text-align: right;
  margin-left: 50%;
}
.right-message:after {
  content: "";
  position: absolute;
  left: 100%;
  top: 0px;
  border-width: 5px;
  border-style: solid;
  border-color: rgb(234, 250, 175) transparent transparent rgb(234, 250, 175);
}
<div class = "left-message">
  Hello World
</div>
<div class = "right-message">
  Hi there!
</div>

Спасибо, это выглядит очень чисто. Меня просто сбивает с толку то, как один делает поликлип в другом подходе.

The Old County 11.10.2023 15:30
jsfiddle.net/j70hzLdu/1 jsfiddle этого
The Old County 11.10.2023 16:52

Я не понял, что вы имеете в виду под "поликлипом". Можете ли вы объяснить?

kiner_shah 12.10.2023 08:06

просто кажется, что существуют различные методы, подобные приведенному ниже, которые используют математику для создания формы многоугольника - stackoverflow.com/questions/50899997/…

The Old County 12.10.2023 15:05

@TheOldCounty, к сожалению, я тоже не могу этого понять, ссылка на ответ, которой вы поделились, на самом деле ничего не объясняет.

kiner_shah 13.10.2023 10:43

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