gpt4 book ai didi

javascript - 修复列表绝对定位(li 隐藏在前两个后面)

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:25 25 4
gpt4 key购买 nike

问题是,当用户悬停一个 li 时,它会使 li 的宽度达到屏幕的 100%,因此 li 需要绝对定位才能越过同一行上的另一个 li,但在这个列表中我想要 6 个或更多的 child ,当我添加其他李,它崩溃了。帮助。

它必须看起来像这样(全屏 50% 宽度 li's)http://i.imgur.com/dRb92rK.gif

JSFIDDLE:

https://jsfiddle.net/shotamickaia/pp658v6j/

$(function(){

$('.leftchild').hover(function(){
$('.left').css("z-index", "2");
$('.left').css("width", "100%");
},function(){
$('.left').css("z-index", "0");
$('.left').css("width", "50%");
});

$('.rightchild').hover(function(){
$('.right').css("z-index", "2");
$('.right').css("width", "100%");
},function(){
$('.right').css("z-index", "0");
$('.right').css("width", "50%");
});
function getCurrentScroll() {
return window.pageYOffset;
}
});

$(document).ready(function() {
function setSettings() {
windowWidth = $(window).width();
windowHeight = $(window).height();
width = (((50 * windowWidth) / 100)*50) / 100;
marginleft = ((((50 * windowWidth) / 100)*50) / 100) / 2;
margintop = (((50 * windowHeight) / 100)*50) / 100;
numitems = $(".slides li").length;
var myheight = (numitems * 75);

$('.leftchild').css('width', width);
$('.leftchild').css('marginLeft',marginleft);
$('.leftchild').css('marginTop',margintop);
$('.rightchild').css('width', width);
$('.rightchild').css('marginRight',marginleft);
$('.rightchild').css('marginTop',margintop);
};
setSettings();

$(window).resize(function() {
setSettings();
});
});
body,html {
margin:0;
padding:0;
height:100%;
background: white;
}

#reasons {
width: 100%;
float: left;
margin: 0;
height: auto;
padding: 0;
background: #f7f2ee;
}
.slides {
list-style-type: none;
padding: 0;
width: 100%;
height: 100%;
position: relative;
margin: 0;
}
.slides li {
height: 100vh;
width: 50%;
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
position: relative;
float: left;
transition: all .4s linear;
position: absolute;
width: 100%;
z-index: 0;
}
.slides li:nth-child(even) {
z-index: 1;
background-attachment: cover;
width: 50%;
right: 0;
}
.slides li:nth-child(even) summary {
width: 300px;
margin-right: 200px;
color: white;
text-align: center;
float: right;
}
.slides li:nth-child(3) {
margin-top: 50%;
}
.slides li summary {
color: white;
float: left;
text-align: center;
cursor: default;
}
.slides li summary h2 {
font-family: 'Proxima Nova Bold';
font-size: 48px;
text-transform: uppercase;
letter-spacing: 20px;
margin: 10% 0;
}
.slides li summary p {
width: 100%;
font-size: 16px;
text-align: center;
font-family: 'Andada';
font-weight: normal;
font-style: italic;
opacity: 0.95;
padding: 0;
margin: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section id="reasons">
<div class="slider">

<ul class="slides">
<li class="left" style="background-image: url(content/test1.jpg); background-color:black;">
<summary class="leftchild">
<h2>Test 1</h2>
<p>Test description</p>
</summary>
</li>
<li class="right" style="background-image: url(content/test2.jpg); background-color:red;">
<summary class="rightchild">
<h2>TEST 2</h2>
<p>Test description</p>
</summary>
</li>

<li class="left" style="background-image: url(content/test3.jpg); background-color:black;">
<summary class="leftchild">
<h2>Test 3</h2>
<p>Test description</p>
</summary>
</li>
<li class="right" style="background-image: url(content/test4.jpg); background-color:red;">
<summary class="rightchild">
<h2>TEST 4</h2>
<p>Test description</p>
</summary>
</li>

<li class="left" style="background-image: url(content/test5.jpg); background-color:black;">
<summary class="leftchild">
<h2>Test 5</h2>
<p>Test description</p>
</summary>
</li>
<li class="right" style="background-image: url(content/test6.jpg); background-color:red;">
<summary class="rightchild">
<h2>TEST 6</h2>
<p>Test description</p>
</summary>
</li>

<li class="left" style="background-image: url(content/test7.jpg); background-color:black;">
<summary class="leftchild">
<h2>Test 7</h2>
<p>Test description</p>
</summary>
</li>
<li class="right" style="background-image: url(content/test8.jpg); background-color:red;">
<summary class="rightchild">
<h2>TEST 8</h2>
<p>Test description</p>
</summary>
</li>

<li class="left" style="background-image: url(content/test9.jpg); background-color:black;">
<summary class="leftchild">
<h2>Test 9</h2>
<p>Test description</p>
</summary>
</li>
<li class="right" style="background-image: url(content/test10.jpg); background-color:red;">
<summary class="rightchild">
<h2>TEST 10</h2>
<p>Test description</p>
</summary>
</li>

</ul>




</div>
</section>

最佳答案

我用纯 css/html 解决了这个问题!!唯一烦人的一点是,您需要为每个列表项进行 css 声明,以便设置其初始宽度。

我使用了 css leftright 属性而不是 width,因为我发现这让事情变得简单多了。

查看:https://jsfiddle.net/gershy/k16mcgkb/2/

想法是所有 li 元素都绝对定位,占据所有垂直空间和一部分水平空间。当 li 悬停时,它的 leftright 都设置为 0(一直延伸到其父级)。

还有一个巧妙的效果,您会注意到,悬停元素两侧的 li 元素都被压缩了。这很重要,因为它有助于避免任何 z-index 困难。

这是处理此问题的 css(这是最复杂的部分):

ul:hover > li {
left: 0; right: 100%;
}

ul > li:hover {
left: 0; right: 0;
z-index: 2;
}

ul > li:hover ~ li {
left: 100%; right: 0;
}

第一条规则说当 ul 悬停时,所有 li 元素都需要挤到左侧 (left: 0;right: 100%; 告诉元素在其父元素的左侧具有 0 宽度)。

第二条规则说,被悬停的特定 li 应该延伸到它的父级(并获得比它的 sibling 更高的 z-index ,以防万一)

第三条规则是很酷的部分,它使用了一个我几乎不必使用的 css 特性; ~ 是“通用兄弟选择器”,它选择某个元素之后的所有元素。此规则仅告诉悬停元素右侧的所有 li 元素挤压到右侧而不是左侧,覆盖第一条规则的效果。

希望您不要介意“压缩”效果,我知道您没有要求。

编辑:它一直是可堆叠的,这里是几件元素叠放在一起。唯一真正添加的是悬停调整规则的 !important 修饰符,以确保无论以前的样式规则多么具体,悬停时都会修改大小。

https://jsfiddle.net/gershy/s3668f8h/

关于javascript - 修复列表绝对定位(li 隐藏在前两个后面),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29351531/

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