ModalDemo.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <script setup lang="ts">
  2. import { ref } from 'vue'
  3. const showModal = ref(false)
  4. </script>
  5. <template>
  6. <button class="modal-button" @click="showModal = true">
  7. Показать модальное окно
  8. </button>
  9. <Teleport to="body">
  10. <Transition name="modal">
  11. <div v-show="showModal" class="modal-mask">
  12. <div class="modal-container">
  13. <p>Привет из модального окна!</p>
  14. <div class="model-footer">
  15. <button class="modal-button" @click="showModal = false">
  16. Закрыть
  17. </button>
  18. </div>
  19. </div>
  20. </div>
  21. </Transition>
  22. </Teleport>
  23. </template>
  24. <style scoped>
  25. .modal-mask {
  26. position: fixed;
  27. z-index: 200;
  28. top: 0;
  29. left: 0;
  30. width: 100%;
  31. height: 100%;
  32. background-color: rgba(0, 0, 0, 0.5);
  33. display: flex;
  34. align-items: center;
  35. justify-content: center;
  36. transition: opacity 0.3s ease;
  37. }
  38. .modal-container {
  39. width: 300px;
  40. margin: auto;
  41. padding: 20px 30px;
  42. background-color: var(--vp-c-bg);
  43. border-radius: 2px;
  44. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);
  45. transition: all 0.3s ease;
  46. }
  47. .model-footer {
  48. margin-top: 8px;
  49. text-align: right;
  50. }
  51. .modal-button {
  52. padding: 4px 8px;
  53. border-radius: 4px;
  54. border-color: var(--vp-button-alt-border);
  55. color: var(--vp-button-alt-text);
  56. background-color: var(--vp-button-alt-bg);
  57. }
  58. .modal-button:hover {
  59. border-color: var(--vp-button-alt-hover-border);
  60. color: var(--vp-button-alt-hover-text);
  61. background-color: var(--vp-button-alt-hover-bg);
  62. }
  63. .modal-enter-from,
  64. .modal-leave-to {
  65. opacity: 0;
  66. }
  67. .modal-enter-from .modal-container,
  68. .modal-leave-to .modal-container {
  69. transform: scale(1.1);
  70. }
  71. </style>