ブログの投稿ログ

2021年
9月
8月
7月
6月

みんな大好きボタンコンポーネントについて

でも

// MyButton.vue

<template>
  <button class="my-button" :class="[type, size]" @click="click">
    <slot />
  </button>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: "",
    },
    size: {
      type: String,
      default: "",
    },
  },
  methods: {
    click() {
      this.$emit("myclick");
    },
  },
};
</script>

<style>
.my-button {
  background: #f6f6f6;
  border: none;
  border-radius: 3px;
  box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.3);
  color: #666;
  cursor: pointer;
  font-size: 14px;
  margin: 2px 5px;
  outline: none;
  padding: 10px 20px;
  transition: opacity 0.4s;
}
.my-button:hover {
  opacity: 0.8;
}
.my-button:active {
  transform: translateY(3px);
  box-shadow: none;
}
.my-button.primary {
  background: #2980b9;
  color: #ffffff;
}
.my-button.success {
  background: #2ecc71;
  color: #ffffff;
}
.my-button.info {
  background: #3498db;
  color: #ffffff;
}
.my-button.warning {
  background: #f1c40f;
  color: #ffffff;
}
.my-button.danger {
  background: #e74c3c;
  color: #ffffff;
}
.my-button.small {
  font-size: 10px;
  padding: 5px 10px;
}
.my-button.large {
  font-size: 18px;
  padding: 15px 30px;
}
</style>

// App.vue

<template>
  <div id="app">
    <div>
      <h2>Type</h2>
      <my-button>Default</my-button>
      <my-button type="primary">Primary</my-button>
      <my-button type="success">Success</my-button>
      <my-button type="info">Info</my-button>
      <my-button type="warning">Warning</my-button>
      <my-button type="danger">Danger</my-button>
    </div>
    <div>
      <h2>Size</h2>
      <my-button size="small">Small</my-button>
      <my-button>Default</my-button>
      <my-button size="large">Large</my-button>
    </div>
    <div>
      <h2>Click Event</h2>
      <my-button @myclick="click">Click Me!</my-button>
      <p>count: {{count}}</p>
    </div>
  </div>
</template>

<script>
import MyButton from "./components/MyButton.vue";

export default {
  name: "App",
  components: {
    MyButton
  },
  data() {
    return {
      count: 0
    };
  },
  methods: {
    click() {
      this.count++;
    }
  }
};
</script>

<style>
#app {
}
</style>