vuetify
Version:
Vue.js 2 Semantic Component Framework
340 lines (264 loc) • 6.47 kB
text/stylus
@import '../bootstrap'
@import '../components/_ripples'
@import '../theme'
button($material)
color: $material.text.primary
&.v-btn--disabled
color: $material.buttons.disabled
.v-icon,
.v-btn__loading
color: $material.buttons.disabled
&:not(.v-btn--icon):not(.v-btn--flat):not(.v-btn--outline)
background-color: $material.buttons.focused
&:not(.v-btn--icon):not(.v-btn--flat)
background-color: $material.app-bar
theme(button, "v-btn")
/** Base Spec */
.v-btn
align-items: center
border-radius: $button-border-radius
display: inline-flex
height: $button-height
flex: 0 0 auto
font-size: $button-font-size
font-weight: $button-font-weight
justify-content: center
margin: $button-margin
min-width: $button-min-width
outline: 0
text-transform: $button-text-transform
text-decoration: none
transition: $primary-transition, color 1ms
position: relative
vertical-align: middle
user-select: none
/** Psuedo */
.v-btn
&:before
border-radius: inherit
color: inherit
content: ''
position: absolute
left: 0
top: 0
height: 100%
opacity: .12
transition: $primary-transition
width: 100%
/** Content */
.v-btn
padding: $button-padding
&--active,
&:hover,
&:focus
position: relative
&:before
background-color: currentColor
&__content
align-items: center
border-radius: inherit
color: inherit
display: flex
flex: 1 0 auto
justify-content: center
margin: 0 auto
// Fixes bug where IE11 moves
// button content when clicked
// https://stackoverflow.com/questions/10305658/prevent-button-from-shifting-during-click-in-ie
position: relative
transition: $primary-transition
white-space: nowrap
width: inherit
/** Sizes */
.v-btn
&--small
font-size: $button-small-font-size
height: $button-small-height
padding: $button-small-padding
&--large
font-size: $button-large-font-size
height: $button-large-height
padding: $button-large-padding
/** Icons */
.v-btn .v-btn__content .v-icon
color: inherit
/** Types */
.v-btn
&:not(.v-btn--depressed):not(.v-btn--flat)
will-change: box-shadow
elevation(2)
&:active
elevation(8)
&--icon
background: transparent
box-shadow: none
border-radius: 50%
justify-content: center
min-width: 0
width: $button-height
&.v-btn--small
width: $button-small-height
&.v-btn--large
width: $button-large-height
&:before
border-radius: 50%
&--floating
border-radius: 50%
min-width: 0
height: $button-floating-width
width: $button-floating-width
padding: 0
&.v-btn--fixed,
&.v-btn--absolute
z-index: 4
&:not(.v-btn--depressed):not(.v-btn--flat)
elevation(6)
&:active
elevation(12)
.v-btn__content
flex: 1 1 auto
margin: 0
height: 100%
&:after
border-radius: 50%
.v-btn__content
:not(:only-child)
transition: $primary-transition
&:first-child
opacity: 1
&:last-child
opacity: 0
transform: rotate(-45deg)
&:last-child,
&:first-child
// https://stackoverflow.com/questions/14729492/css3-transform-rotate-causing-1px-shift-in-chrome
-webkit-backface-visibility: hidden
position: absolute
left: 0
top: 0
&.v-btn--active
.v-btn__content
:not(:only-child)
&:first-child
opacity: 0
transform: rotate(45deg)
&:last-child
opacity: 1
transform: rotate(0)
.v-icon
height: inherit
width: inherit
&.v-btn--small
height: $button-floating-small-width
width: $button-floating-small-width
.v-icon
font-size: $button-floating-small-icon-width
&.v-btn--large
height: $button-floating-large-width
width: $button-floating-large-width
.v-icon
font-size: $button-floating-large-icon-width
&--reverse
.v-btn__content
flex-direction: row-reverse
&.v-btn--column
.v-btn__content
flex-direction: column-reverse
&--fixed, &--absolute
margin: 0
// Position must have prepended .v-btn
// to account for tooltip
// TODO: Remove this once tooltips are
// converted to elements
&.v-btn--absolute
position: absolute
&.v-btn--fixed
position: fixed
&--top
&:not(.v-btn--absolute)
top: $grid-gutters.lg
&.v-btn--absolute
top: -($button-floating-width / 2)
&.v-btn--small
top: -($button-floating-small-width / 2)
&.v-btn--large
top: -($button-floating-large-width / 2)
&--bottom
&:not(.v-btn--absolute)
bottom: $grid-gutters.lg
&.v-btn--absolute
bottom: -($button-floating-width / 2)
&.v-btn--small
bottom: -($button-floating-small-width / 2)
&.v-btn--large
bottom: -($button-floating-large-width / 2)
&--left
left: $grid-gutters.lg
&--right
right: $grid-gutters.lg
/** Disabled */
.v-btn
&.v-btn--disabled
box-shadow: none
pointer-events: none
&:not(.v-btn--disabled):not(.v-btn--floating):not(.v-btn--icon)
.v-btn__content .v-icon
transition: none
.v-btn--icon
padding: 0
/** Loader */
.v-btn
&--loader
pointer-events: none
.v-btn__content
opacity: 0
&__loading
align-items: center
display: flex
height: 100%
justify-content: center
left: 0
position: absolute
top: 0
width: 100%
.v-icon
&--left
margin-right: 1rem
line-height: inherit
&--right
margin-left: 1rem
line-height: inherit
/** Custom Buttons */
.v-btn
&.v-btn--outline
border: 1px solid currentColor
background: transparent
box-shadow: none
&:hover
box-shadow: none
&--block
display: flex
flex: 1
margin: $button-margin-y 0
width: 100%
&--round
border-radius: 28px
&:after
border-radius: 28px
/** Button w/ directional Icon */
.v-btn
.v-icon
&--right
margin-left: 16px
&--left
margin-right: 16px
/** Themes */
.v-btn:not(.v-btn--outline)
&.primary,
&.secondary,
&.accent,
&.success,
&.error,
&.warning,
&.info
color: $material-dark.text.primary