twbs / bootstrap

The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.

Home Page:https://getbootstrap.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Offcanvas Backdrop Disappears On Wire:Click

danielsonoiki opened this issue · comments

Prerequisites

Describe the issue

I am a Laravel/Livewire developer and I use Bootstrap for many things, including modals and offcanvas. The issue is that when I have offcanvas on, and I make any interaction which involves Livewire, the backdrop is removed and the body becomes scrollable.

Let me say that this issue does not happen with modals at all. And I think it is because the way modals are designed is a bit different from offcanvas. For modals, the div (for example) structure looks like:
.modal > .modal-dialog > .modal-content (which contains modal-header, modal-body, modal-footer)

And if I am correct, the backdrop for modal is tied to modal-dialog.

However, for offCanvas, the structure is just .offcanvas which contains the header, body and footer.

Can the Bootstrap Team look into this and try to replicate offCanvas like modal?

Reduced test cases

nill

What operating system(s) are you seeing the problem on?

Windows

What browser(s) are you seeing the problem on?

Chrome

What version of Bootstrap are you using?

v5.3.x

I fixed this by creating a custom CSS class .canvas-backdrop and tied it to both data-bs-toggle="offcanvas" and data-bs-dismiss="offcanvas".

CSS Code:

.canvas-backdrop {
	display: none;
	position: fixed;
	top: 0;
	left: 0;
	background-color: rgb(0, 0, 0);
	overflow: hidden;
	width: 100vw;
	height: 100vh;
	z-index: 1040;
}
.canvas-backdrop.show {
	display: block;
	opacity: .5;
}

jQuery code:

$('[data-bs-toggle="offcanvas"]').on('click', function() {
		$('.canvas-backdrop').toggleClass('show');
	});

	$('[data-bs-dismiss="offcanvas"]').on('click', function() {
		$('.canvas-backdrop').removeClass('show');
	});

And this solved the issue permanently.