mirror of
				https://github.com/twbs/bootstrap.git
				synced 2025-11-04 00:03:15 -05:00 
			
		
		
		
	The transform of .showing was being overridden by .offcanvas.offcanvas-start, while .show wasn't. This resulted in an illusion of the offcanvas waiting for the backdrop, reported in #36347. Moving the show classes below the position classes fixes this problem.
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
// stylelint-disable function-disallowed-list
 | 
						|
 | 
						|
%offcanvas-css-vars {
 | 
						|
  // scss-docs-start offcanvas-css-vars
 | 
						|
  --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};
 | 
						|
  --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};
 | 
						|
  --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};
 | 
						|
  --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};
 | 
						|
  --#{$prefix}offcanvas-color: #{$offcanvas-color};
 | 
						|
  --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};
 | 
						|
  --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};
 | 
						|
  --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};
 | 
						|
  --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};
 | 
						|
  // scss-docs-end offcanvas-css-vars
 | 
						|
}
 | 
						|
 | 
						|
@each $breakpoint in map-keys($grid-breakpoints) {
 | 
						|
  $next: breakpoint-next($breakpoint, $grid-breakpoints);
 | 
						|
  $infix: breakpoint-infix($next, $grid-breakpoints);
 | 
						|
 | 
						|
  .offcanvas#{$infix} {
 | 
						|
    @extend %offcanvas-css-vars;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
@each $breakpoint in map-keys($grid-breakpoints) {
 | 
						|
  $next: breakpoint-next($breakpoint, $grid-breakpoints);
 | 
						|
  $infix: breakpoint-infix($next, $grid-breakpoints);
 | 
						|
 | 
						|
  .offcanvas#{$infix} {
 | 
						|
    @include media-breakpoint-down($next) {
 | 
						|
      position: fixed;
 | 
						|
      bottom: 0;
 | 
						|
      z-index: $zindex-offcanvas;
 | 
						|
      display: flex;
 | 
						|
      flex-direction: column;
 | 
						|
      max-width: 100%;
 | 
						|
      color: var(--#{$prefix}offcanvas-color);
 | 
						|
      visibility: hidden;
 | 
						|
      background-color: var(--#{$prefix}offcanvas-bg);
 | 
						|
      background-clip: padding-box;
 | 
						|
      outline: 0;
 | 
						|
      @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));
 | 
						|
      @include transition(transform $offcanvas-transition-duration ease-in-out);
 | 
						|
 | 
						|
      &.offcanvas-start {
 | 
						|
        top: 0;
 | 
						|
        left: 0;
 | 
						|
        width: var(--#{$prefix}offcanvas-width);
 | 
						|
        border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
 | 
						|
        transform: translateX(-100%);
 | 
						|
      }
 | 
						|
 | 
						|
      &.offcanvas-end {
 | 
						|
        top: 0;
 | 
						|
        right: 0;
 | 
						|
        width: var(--#{$prefix}offcanvas-width);
 | 
						|
        border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
 | 
						|
        transform: translateX(100%);
 | 
						|
      }
 | 
						|
 | 
						|
      &.offcanvas-top {
 | 
						|
        top: 0;
 | 
						|
        right: 0;
 | 
						|
        left: 0;
 | 
						|
        height: var(--#{$prefix}offcanvas-height);
 | 
						|
        max-height: 100%;
 | 
						|
        border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
 | 
						|
        transform: translateY(-100%);
 | 
						|
      }
 | 
						|
 | 
						|
      &.offcanvas-bottom {
 | 
						|
        right: 0;
 | 
						|
        left: 0;
 | 
						|
        height: var(--#{$prefix}offcanvas-height);
 | 
						|
        max-height: 100%;
 | 
						|
        border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);
 | 
						|
        transform: translateY(100%);
 | 
						|
      }
 | 
						|
 | 
						|
      &.showing,
 | 
						|
      &.show:not(.hiding) {
 | 
						|
        transform: none;
 | 
						|
      }
 | 
						|
 | 
						|
      &.showing,
 | 
						|
      &.hiding,
 | 
						|
      &.show {
 | 
						|
        visibility: visible;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    @if not ($infix == "") {
 | 
						|
      @include media-breakpoint-up($next) {
 | 
						|
        --#{$prefix}offcanvas-height: auto;
 | 
						|
        --#{$prefix}offcanvas-border-width: 0;
 | 
						|
        background-color: transparent !important; // stylelint-disable-line declaration-no-important
 | 
						|
 | 
						|
        .offcanvas-header {
 | 
						|
          display: none;
 | 
						|
        }
 | 
						|
 | 
						|
        .offcanvas-body {
 | 
						|
          display: flex;
 | 
						|
          flex-grow: 0;
 | 
						|
          padding: 0;
 | 
						|
          overflow-y: visible;
 | 
						|
          // Reset `background-color` in case `.bg-*` classes are used in offcanvas
 | 
						|
          background-color: transparent !important; // stylelint-disable-line declaration-no-important
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
.offcanvas-backdrop {
 | 
						|
  @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);
 | 
						|
}
 | 
						|
 | 
						|
.offcanvas-header {
 | 
						|
  display: flex;
 | 
						|
  align-items: center;
 | 
						|
  justify-content: space-between;
 | 
						|
  padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
 | 
						|
 | 
						|
  .btn-close {
 | 
						|
    padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);
 | 
						|
    margin-top: calc(var(--#{$prefix}offcanvas-padding-y) * -.5);
 | 
						|
    margin-right: calc(var(--#{$prefix}offcanvas-padding-x) * -.5);
 | 
						|
    margin-bottom: calc(var(--#{$prefix}offcanvas-padding-y) * -.5);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
.offcanvas-title {
 | 
						|
  margin-bottom: 0;
 | 
						|
  line-height: $offcanvas-title-line-height;
 | 
						|
}
 | 
						|
 | 
						|
.offcanvas-body {
 | 
						|
  flex-grow: 1;
 | 
						|
  padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
 | 
						|
  overflow-y: auto;
 | 
						|
}
 |