Не применяйте ширину к элементу напрямую. Вместо этого динамически добавляйте класс, когда вы хотите, чтобы ваше наложение было открыто.
Это позволяет вам использовать CSS и медиа-запросы для определения ширины в зависимости от размера экрана.
/* Default */
.overlay {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background: #393F4D;
;
overflow-x: hidden;
transition: 0.5s;
}
/* When open class is applied */
.overlay.open {
width: 25%;
}
@media screen and (max-width: 992px) {
.overlay.open {
width: 35%;
}
}
@media screen and (max-width: 768px) {
.overlay.open {
width: 50%;
}
}
@media screen and (max-width: 548px) {
.overlay.open {
width: 90%;
}
}
new Vue({
el: '#app',
data: () => ({
open: false,
}),
methods: {
changeP() {
this.arrowP = (this.arrowP === 'arrow-right') ? 'angle-down' : 'arrow-right'
},
setProperty(event) {
this.$store.dispatch('display', event)
},
toggleOverlay() {
this.open = !this.open
}
},
})
$(function() {
openNav()
closeNav()
})
.navbar-icon {
outline: none;
border: 0;
box-shadow: none;
background: inherit;
}
.navbar-icon::before {
content: '\F0C9';
font-family: 'FontAwesome', serif;
font-size: 24px;
}
.overlay {
height: 100%;
width: 0;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background: #393F4D;
;
overflow-x: hidden;
transition: 0.5s;
}
.overlay.open {
width: 25%;
}
@media screen and (max-width: 992px) {
.overlay.open {
width: 35%;
}
}
@media screen and (max-width: 768px) {
.overlay.open {
width: 50%;
}
}
@media screen and (max-width: 548px) {
.overlay.open {
width: 90%;
}
}
.profile-image {
display: inline-block;
width: 200px;
height: 200px;
border-radius: 50%;
overflow: hidden;
background-repeat: no-repeat;
background-position: center center;
background-size: cover;
}
.close::before {
content: '\F057';
font-family: 'FontAwesome', serif;
position: absolute;
top: 20px;
right: 10px;
font-size: 25px;
color: $color-white;
border: 0;
box-shadow: none;
outline: none;
}
.bottom-border {
border-bottom: 1px solid #A6A6A6;
margin-bottom: 1em;
}
.profile-name h5 {
font-size: 18px;
font-family: inherit;
color: $color-white;
max-width: 100%;
padding-left: 0;
margin-left: 0;
}
.profile-name {
width: 60%;
margin-left: -1em;
}
.profile-row {
padding-left: 20px;
}
.profile-row .button {
padding: 0 10px;
color: $color-white;
border: 1px solid #A6A6A6;
margin-left: .5em;
box-shadow: none;
margin-top: .2em;
}
.profile-row .button::before {
font-family: FontAwesome, serif;
font-size: 18px;
}
.profile-row .new-user::before {
content: '\F007';
}
.profile-row .logout::before {
content: '\F061';
}
.profile-row .setting::before {
content: '\f013';
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-vue/2.15.0/bootstrap-vue-icons.common.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.bundle.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<div id="app" class="container-fluid admin-panel p-0">
<div class="row admin navbar-item-left">
<div class="col-md-12">
<button type="button" @click="toggleOverlay" class="navbar-icon add-right-margin" />
</div>
</div>
<b-container fluid="lg" id="myNav" class="overlay p-0" :class="{ 'open': open }">
<b-button class="close" @click="toggleOverlay" />
<b-container class="overlay-content">
<b-row class="bottom-border">
<b-container fluid="sm" class="image-cropper">
<img :src="pImage" alt="" class="profile-pic">
</b-container>
<b-container fluid="sm" class="profile-name">
<h5>Shah Rukh Khan</h5>
<b-row class="profile-row">
<b-button class="button new-user" v-b-popover.hover.bottom="'User'" />
<b-button class="button setting" v-b-popover.hover.bottom="'Setting'" />
<b-button class="button logout" v-b-popover.hover.bottom="'Logout'" />
</b-row>
</b-container>
</b-row>
<b-button @click="changeP()" :class="'sub-title product ' + arrowP" v-b-toggle.collapse-product v-text="'Product'" />
<b-collapse id="collapse-product" class="dropdown-list">
<b-button class="button" v-text="'Product List'" />
<br>
<b-button class="button" v-text="'New Product'" />
<br>
<b-button class="button" v-text="'Update Product'" />
</b-collapse>
</b-container>
</b-container>
</div>
Небольшое примечание.
Поскольку похоже, что вы используете Bootstrap - Vue, вы можете взглянуть на b-боковую панель , так вам не нужно делать все эту работу создать самостоятельно.