提问人:ZNAXNOR 提问时间:11/14/2023 最后编辑:ZNAXNOR 更新时间:11/15/2023 访问量:41
我想为我 ASP.NET MVC 7 网站创建一个侧边栏
I want to create a Sidebar for my ASP.NET MVC 7 website
问:
我想为我的网站创建一个侧边栏。我现在有一个可用的侧边栏,但它在顶部使用一条白色条带作为切换器。我想将我的导航栏用作侧边栏切换器。我正在使用部分布局。这是我的代码:
_Layout.cshtml-
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - RecipeWebsite</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/RecipeWebsite.styles.css" asp-append-version="true" />
<!--Added-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</head>
<body id="body-pd">
<!--Top Nav bar-->
<div>
<partial name="~/Views/Shared/Navbar/_Navbar.cshtml" />
</div>
<!--Side bar-->
<div>
<partial name="~/Views/Shared/Sidebar/_Sidebar.cshtml" />
</div>
<!--Render Body-->
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<!--Bottom Navbar-->
<footer class="border-top footer text-muted ps-10 align-bottom">
<div class="container-fluid">
© 2023 - RecipeWebsite - <a asp-area="" asp-controller="Privacy" asp-action="Index">Privacy</a>
</div>
</footer>
<!--JQuery-->
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<!--Bootstrap-->
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<!--JavaScript-->
<script src="~/js/site.js" asp-append-version="true"></script>
<!--JavaScript Added-->
<script src="~/js/created/sidebar.js"></script>
<!--CSS Added-->
<link rel="stylesheet" href="~/css/created/sidebar.css" />
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
_Navbar.cshtml-
<header class="header" id="header">
<!--Sidebar Toggle-->
<div class="header_toggle p-3"> <i class='bx bx-menu' id="header-toggle"></i> </div>
<!--Identity-->
<partial name="~/Views/Shared/Navbar/_Identity.cshtml" />
</header>
_Sidebar.cshtml-
<div class="l-navbar" id="nav-bar">
<nav class="nav">
<div>
<a asp-controller="Home" asp-action="Index" class="nav_logo">
<i class='bx bx-layer nav_logo-icon'></i>
<span class="nav_logo-name">RecipeWebsite</span>
</a>
<div class="nav_list">
<a asp-controller="Home" asp-action="Index" class="nav_link active">
<i class='bx bx-home nav_icon'></i>
<span class="nav_name">Home</span>
</a>
<a asp-controller="Home" asp-action="Privacy" class="nav_link">
<i class='bx bx-user nav_icon'></i>
<span class="nav_name">Privacy Policy</span>
</a>
<a asp-controller="Post" asp-action="Index" class="nav_link">
<i class='bx bx-bookmark nav_icon'></i>
<span class="nav_name">Recipe Post</span>
</a>
<a asp-controller="Collection" asp-action="Index" class="nav_link">
<i class='bx bx-folder nav_icon'></i>
<span class="nav_name">Recipe Collection</span>
</a>
</div>
</div>
</nav>
</div>
侧边栏.css-
@import url("https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap");
:root {
--header-height: 3rem;
--nav-width: 68px;
--first-color: #4723D9;
--first-color-light: #AFA5D9;
--white-color: #F7F6FB;
--body-font: 'Nunito', sans-serif;
--normal-font-size: 1rem;
--z-fixed: 100
}
*, ::before, ::after {
box-sizing: border-box
}
body {
position: relative;
margin: var(--header-height) 0 0 0;
padding: 0 1rem;
font-family: var(--body-font);
font-size: var(--normal-font-size);
transition: .5s
}
a {
text-decoration: none
}
.header {
width: 100%;
height: var(--header-height);
position: fixed;
top: 0;
left: 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 1rem;
padding-top: 100px;
background-color: var(--white-color);
z-index: var(--z-fixed);
transition: .5s
}
.header_toggle {
color: var(--first-color);
font-size: 1.5rem;
cursor: pointer
}
.header_img {
width: 35px;
height: 35px;
display: flex;
justify-content: center;
border-radius: 50%;
overflow: hidden
}
.header_img img {
width: 40px
}
.l-navbar {
position: fixed;
top: 0;
left: -30%;
width: var(--nav-width);
height: 100vh;
background-color: var(--first-color);
padding: .5rem 1rem 0 0;
transition: .5s;
z-index: var(--z-fixed)
}
.nav {
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
overflow: hidden
}
.nav_logo, .nav_link {
display: grid;
grid-template-columns: max-content max-content;
align-items: center;
column-gap: 1rem;
padding: .5rem 0 .5rem 1.5rem
}
.nav_logo {
margin-bottom: 2rem
}
.nav_logo-icon {
font-size: 1.25rem;
color: var(--white-color)
}
.nav_logo-name {
color: var(--white-color);
font-weight: 700
}
.nav_link {
position: relative;
color: var(--first-color-light);
margin-bottom: 1.5rem;
transition: .3s
}
.nav_link:hover {
color: var(--white-color)
}
.nav_icon {
font-size: 1.25rem
}
.show {
left: 0
}
.body-pd {
padding-left: calc(var(--nav-width) + 1rem)
}
.active {
color: var(--white-color)
}
.active::before {
content: '';
position: absolute;
left: 0;
width: 2px;
height: 32px;
background-color: var(--white-color)
}
.height-100 {
height: 100vh
}
@media screen and (min-width: 768px) {
body {
margin: calc(var(--header-height) + 1rem) 0 0 0;
padding-left: calc(var(--nav-width) + 2rem)
}
.header {
height: calc(var(--header-height) + 1rem);
padding: 0 2rem 0 calc(var(--nav-width) + 2rem)
}
.header_img {
width: 40px;
height: 40px
}
.header_img img {
width: 45px
}
.l-navbar {
left: 0;
padding: 1rem 1rem 0 0
}
.show {
width: calc(var(--nav-width) + 156px)
}
.body-pd {
padding-left: calc(var(--nav-width) + 188px)
}
}
侧边栏.js-
document.addEventListener("DOMContentLoaded", function (event) {
const showNavbar = (toggleId, navId, bodyId, headerId) => {
const toggle = document.getElementById(toggleId),
nav = document.getElementById(navId),
bodypd = document.getElementById(bodyId),
headerpd = document.getElementById(headerId)
// Validate that all variables exist
if (toggle && nav && bodypd && headerpd) {
toggle.addEventListener('click', () => {
// show navbar
nav.classList.toggle('show')
// change icon
toggle.classList.toggle('bx-x')
// add padding to body
bodypd.classList.toggle('body-pd')
// add padding to header
headerpd.classList.toggle('body-pd')
})
}
}
showNavbar('header-toggle', 'nav-bar', 'body-pd', 'header')
/*===== LINK ACTIVE =====*/
const linkColor = document.querySelectorAll('.nav_link')
function colorLink() {
if (linkColor) {
linkColor.forEach(l => l.classList.remove('active'))
this.classList.add('active')
}
}
linkColor.forEach(l => l.addEventListener('click', colorLink))
// Your code to run since DOM is loaded and ready
});
我尝试只使用导航栏中的切换器选项,但它不起作用。我引用了多个代码,但总感觉我遗漏了一些东西。
谢谢你的帮助
答:
1赞
ZNAXNOR
11/15/2023
#1
更新
我的问题解决了。我添加了<标题>id=header
这是我所做的——
_Navbar.cshtml
<header style="padding-top:70px;" id="header">
<nav class="navbar navbar-expand navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3 ps-10 fixed-top">
<div class="container-fluid">
<!--Toggler-->
<div class="header_toggle"> <i class='bx bx-menu' id="header-toggle"></i> </div>
<!--Website Title-->
<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">RecipeWebsite</a>
<!--Options-->
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between ps-3">
<!--Search bar-->
<form class="d-flex w-50 me-5" role="search" asp-controller="Searchbar" asp-action="Index">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search" name="SearchString" required oninvalid="this.setCustomValidity(' ')" />
<button class="btn btn-outline-success" type="submit">Search</button>
<div class="invalid-feedback"></div>
</form>
<!--Identity-->
<partial name="~/Views/Shared/Navbar/_Identity.cshtml" />
</div>
</div>
</nav>
</header>
评论
0赞
Qiang Fu
11/21/2023
关于代码有什么解释吗?
1赞
ZNAXNOR
11/21/2023
@Qiang Fu 我在 Navbar.cshtml 代码中添加了。我已经更新了我的答案以进一步解释它。id="header"
评论