gpt4 book ai didi

javascript - 将拉伸(stretch)上的元素对齐到父 div 的中心

转载 作者:可可西里 更新时间:2023-11-01 12:56:00 25 4
gpt4 key购买 nike

我尝试创建一个在移动设备屏幕上延伸至全高的菜单。对于父容器,我使用带有 flex-direction 列的 flexbox 并在全屏高度上拉伸(stretch)元素。

$(document).ready(() => {
$("#btnMenu").click(() => {
toggleMenu();
});

$(".navbarLink").click(() => {
if ($("#navbarItems").hasClass("activeNavbar")) {
toggleMenu();
}
});
});

function toggleMenu() {
$("#navbarItems").toggleClass("activeNavbar");
toggleMenuBtn();
}

function toggleMenuBtn() {
$("#btnMenu").toggleClass("activeMenuBtn");
}
body {
margin: 0;
}

.link {
text-decoration: none;
}

#navbar {
height: 60px;
top: 0;
padding-left: 200px;
padding-right: 200px;
position: sticky;
background: #1e222a;
}

#navbarItems {
height: 100%;
display: flex;
align-items: center;
}

#logoLink {
display: flex;
align-items: center;
}

#navbarItems .navbarItem:not(:first-child) {
margin-left: 30px;
}

.navbarItem {
background: #1e222a;
}

.navbarLink {
color: #ffffff;
}

.navbarLink:hover {
color: #3abcf3;
}

#btnMenuContainer {
height: 100%;
display: none;
}

#btnMenu {
cursor: pointer;
}

.menuBtnBar {
width: 35px;
height: 5px;
margin: 6px 0;
background-color: #ffffff;
transition: 0.4s;
}

.activeMenuBtn #barTop {
transform: rotate(-45deg) translate(-9px, 6px);
}

.activeMenuBtn #barCenter {
opacity: 0;
}

.activeMenuBtn #barBottom {
transform: rotate(45deg) translate(-8px, -8px);
}

@media(max-width: 1200px) {
#navbar {
padding-left: 150px;
padding-right: 150px;
}
}

@media(max-width: 1100px) {
#navbar {
padding-left: 0;
padding-right: 0;
}
#btnMenuContainer {
display: flex;
align-items: center;
}
#btnMenu {
margin-left: 20px;
}
#navbarItems {
margin-left: 0;
display: none;
}
#navbarItems.activeNavbar {
display: flex;
flex-direction: column;
align-items: stretch;
height: 100vh;
}
#logoLink {
display: inline-block;
}
.navbarItem {
flex: 1 1 100%;
align-items: center;
justify-content: center;
text-align: center;
}
#navbarItems .navbarItem:not(:first-child) {
margin-left: 0;
}
#navbarItems .navbarItem:not(:last-child) {
border-bottom: 1px solid #676767;
}
.navbarLink {
width: 100%;
height: 100%;
display: inline-block;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="navbar">
<div id="btnMenuContainer">
<div id="btnMenu">
<div id="barTop" class="menuBtnBar"></div>
<div id="barCenter" class="menuBtnBar"></div>
<div id="barBottom" class="menuBtnBar"></div>
</div>
</div>

<div id="navbarItems">
<div class="navbarItem">
<a id="logoLink" class="link navbarLink" href="#">
<img class="img" src="https://cdn4.iconfinder.com/data/icons/32x32-free-design-icons/32/Ok.png">
</a>
</div>

<div class="navbarItem">
<a class="link navbarLink" href="#">
Link 2
</a>
</div>

<div class="navbarItem">
<a class="link navbarLink" href="#">
Link 3
</a>
</div>
</div>
</div>

当使用 align-items: stretch; 时,如何将链接(和 Logo )放回中心?

我的第二个问题是我可以用什么代替 height: 100vh;?我想让它保持动态,所以也许有比使用常数更好的方法?

最佳答案

它工作正常。检查代码片段和 fiddle 以获得进一步的说明。

所有链接都居中对齐,菜单高度占据可用空间的整个高度,不再有滚动。

我的建议是使用 100vh 作为高度,因为它比应用静态值更好,因为 100vh 是动态值。

https://jsfiddle.net/Sampath_Madhuranga/4uLb6rsw/7/

$(document).ready(() => {
$("#btnMenu").click(() => {
toggleMenu();
});

$(".navbarLink").click(() => {
if ($("#navbarItems").hasClass("activeNavbar")) {
toggleMenu();
}
});
});

function toggleMenu() {
$("#navbarItems").toggleClass("activeNavbar");
toggleMenuBtn();
}

function toggleMenuBtn() {
$("#btnMenu").toggleClass("activeMenuBtn");
}
body {
margin: 0;
}

.link {
text-decoration: none;
}

#navbar {
height: 60px;
top: 0;
padding-left: 200px;
padding-right: 200px;
position: sticky;
background: #1e222a;
}

#navbarItems {
height: 100%;
display: flex;
align-items: center;
}

#logoLink {
display: flex;
align-items: center;
}

#navbarItems .navbarItem:not(:first-child) {
margin-left: 30px;
}

.navbarItem {
background: #1e222a;
}

.navbarLink {
color: #ffffff;
}

.navbarLink:hover {
color: #3abcf3;
}

#btnMenuContainer {
height: 100%;
display: none;
}

#btnMenu {
cursor: pointer;
}

.menuBtnBar {
width: 35px;
height: 5px;
margin: 6px 0;
background-color: #ffffff;
transition: 0.4s;
}

.activeMenuBtn #barTop {
transform: rotate(-45deg) translate(-9px, 6px);
}

.activeMenuBtn #barCenter {
opacity: 0;
}

.activeMenuBtn #barBottom {
transform: rotate(45deg) translate(-8px, -8px);
}

@media(max-width: 1200px) {
#navbar {
padding-left: 150px;
padding-right: 150px;
}
}

@media(max-width: 1100px) {
#navbar {
padding-left: 0;
padding-right: 0;
}
#btnMenuContainer {
display: flex;
align-items: center;
}
#btnMenu {
margin-left: 20px;
}
#navbarItems {
margin-left: 0;
display: none;
}
#navbarItems.activeNavbar {
display: flex;
flex-direction: column;
align-items: stretch;
height: calc( 100vh - 60px);
}
#logoLink {
display: flex;
justify-content: center;
}
.navbarItem {
flex: 1 1 100%;
align-items: center;
justify-content: center;
text-align: center;
}
#navbarItems .navbarItem:not(:first-child) {
margin-left: 0;
}
#navbarItems .navbarItem:not(:last-child) {
border-bottom: 1px solid #676767;
}
.navbarLink {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="navbar">
<div id="btnMenuContainer">
<div id="btnMenu">
<div id="barTop" class="menuBtnBar"></div>
<div id="barCenter" class="menuBtnBar"></div>
<div id="barBottom" class="menuBtnBar"></div>
</div>
</div>

<div id="navbarItems">
<div class="navbarItem">
<a id="logoLink" class="link navbarLink" href="#">
<img class="img" src="https://cdn4.iconfinder.com/data/icons/32x32-free-design-icons/32/Ok.png">
</a>
</div>

<div class="navbarItem">
<a class="link navbarLink" href="#">
Link 2
</a>
</div>

<div class="navbarItem">
<a class="link navbarLink" href="#">
Link 3
</a>
</div>
</div>
</div>

谢谢。

关于javascript - 将拉伸(stretch)上的元素对齐到父 div 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com