Как правильно добавить «уголки»?

Как правильно реализовать подобное в Vue 3? Меня интересует использование уголков не только для кнопок, но и для форм. Если использовать SVG как фоновое изображение, оно не расширяется, а при использовании PNG изображение расширяется, но теряет качество. <br/> <br/> В данный момент у меня есть рабочий вариант, но как можно избавиться от лишнего уголка в конце и сделать его более переисполняемым (например, чтобы уголки имели разные цвета, а также предоставлять возможность задать различные внутренние отступы и т.д.)? <br/> <br/> <a href="https://play.vuejs.org/#eNq1Vl1v0zAU/StW9gLSkqZp10EYkwCNL4kPAY95SZOb1JtjW7bTtEz771w7SZNu7UAC9jDlnnt87zn2tbdb75WUwboGL/YuDFSSpQYuE07IRU7XJGOp1i8TbynybeIhbjMPs7UxgvuNSqUE5XgEfy70utxxMqE4KN9CRkifQWF2RKTWGshKQYHMk4GaeGTSF5tg/AeFFS1X/77yUqDD6v+o7mr/pfD2DIjZSsAFul5WFKsN/VYpL8FvWeMuWqb88s37V5/fXWE9G/TFW+4uxANv56L7ct9WP833/GDThuZmheAMv1dgfXXBmkLzWmwwCklIZsRiBWUMAS44YLSpGLd6V8bIeDJpmiZoZoFQ5SQKw9AaHsZLQWbI1hYLMDeNovD8WPPp0Ojk7durxXw+3kdXqF9nqXuij6zrd/9iMro2GGqzZUB0JiTkiAT26pDbhOdUI2sbk4LB5kXCU0ZL7lNcrGOSATegEL2utaHF1s8EAtyMMss0uymVqHkekyXDALE72zHYv362F2ndxGS6CKVtRjpLMZk/6wApNDVU8JgoQPV0DQ6uUlVSBKN+4VKoHBSWkhuiBaM5UeUyfRKdnZ2S4VcYTJ86+n2bhBw2Sshxq62t0RVxlgbB6RKF1KYV3DmN5veM7gApqK3rwxrrowQ7absm/VvUtsAoJj46dQstvgsHuruoh/guMYqNSrkuhKpwi4XBAXnyPMyhtPvUHdzwqrT1WuCYhEMVo/ODJUcaH9T8vczps/2ie4/H/nydRffnq5+bI/M1HuPuSu2NWXc6uD7Nc8rLmIQuzGqlBea70zyizT5grcACp8ov0ooynMVPGGhQKjWnRKNbHwNauLqOp+lPQDO9F4c1naHzsBXAKAe/dzmdB4tZx84Es8JOokW0mFkzKAwfB/sMXHqnnsGngBe0DK614PhX1qmzD2YlKQP1RdpN0okXt7ptLmVMNB8dZlQNpz2erSC7OYBf643FEu+rAnS2xod0lzN4nwH/Etj01ffPsMHvXbISec2Q/UjyG7i7hhpb2ms8OZQ94jm1HyoplMHz+qGvNniddW/KCrXMO8dPPPxX480j1ge5s2Du1uF+ene/AKMw1/c=" rel="nofollow">vue sfc</a> <br/> <br/>
  • 22 сентября 2024 г. 11:13
Ответы на вопрос 2
Для реализации уголков в Vue 3, которые будут переисполняемыми и настроимыми (с возможностью выбора цветов и внутренних отступов), вы можете использовать комбинацию Vue 3 и CSS в стиле, как показано ниже. Я создам простой компонент, который позволяет добавлять уголки к элементам.

### Пример компонента Corner

```vue
<template>
  <div class="corner-container" :style="containerStyle">
    <div class="corner corner-top-left" :style="cornerStyle"></div>
    <div class="corner corner-top-right" :style="cornerStyle"></div>
    <div class="corner corner-bottom-left" :style="cornerStyle"></div>
    <div class="corner corner-bottom-right" :style="cornerStyle"></div>
    <slot></slot>
  </div>
</template>

<script>
export default {
  props: {
    cornerColor: {
      type: String,
      default: 'red'
    },
    cornerSize: {
      type: Number,
      default: 20
    },
    padding: {
      type: String,
      default: '10px'
    }
  },
  computed: {
    cornerStyle() {
      return {
        backgroundColor: this.cornerColor,
        width: `${this.cornerSize}px`,
        height: `${this.cornerSize}px`
      }
    },
    containerStyle() {
      return {
        padding: this.padding,
        position: 'relative'
      }
    }
  }
}
</script>

<style scoped>
.corner-container {
  position: relative;
}

.corner {
  position: absolute;
  z-index: 1;
}

.corner-top-left {
  top: 0;
  left: 0;
  border-top-left-radius: 50%;
}

.corner-top-right {
  top: 0;
  right: 0;
  border-top-right-radius: 50%;
}

.corner-bottom-left {
  bottom: 0;
  left: 0;
  border-bottom-left-radius: 50%;
}

.corner-bottom-right {
  bottom: 0;
  right: 0;
  border-bottom-right-radius: 50%;
}
</style>
```

### Использование компонента

Теперь вы можете использовать компонент `Corner` в других местах вашего приложения.

```vue
<template>
  <div>
    <Corner cornerColor="blue" cornerSize="30" padding="20px">
      <div class="content" style="background-color: white; padding: 20px;">
        Ваше содержимое здесь
      </div>
    </Corner>
  </div>
</template>

<style>
.content {
  border: 1px solid #ccc;
  border-radius: 8px;
}
</style>
```

### Объяснение

1. **Свойства компонента:**
   - `cornerColor`: Позволяет задавать цвет уголков.
   - `cornerSize`: Определяет размер уголков.
   - `padding`: Устанавливает внутренние отступы.

2. **Стили:**
   - Мы используем `position: absolute` для уголков, чтобы они располагались в каждом углу контейнера.
   - `border-radius` делает уголки круглыми.

3. **Слот:**
   - Используется для размещения содержимого внутри компонента `Corner`. 

Таким образом, вы можете легко комбинировать его с другими компонентами и изменять визуальные характеристики уголков.
Можно поизвращатся. Вставить элемент с нужными границами и вырезать из него все ненужное
Похожие вопросы