【问题标题】:How do I stack a child on top of another parent?如何将孩子堆叠在另一个父母之上?
【发布时间】:2015-03-20 12:35:40
【问题描述】:

我有一个图形标签列表,每个标签都有一个弹出的 figcaption。 每个图中都有一个可点击的 div,它将 figcaption 转换为可见。我在页面上有很多图形标签,当 figcaption 可见时,它只会堆叠在它所属的图形上,而不是其他图形上。有没有办法将可见的 figcaption 堆叠在所有父母之上?

我设置了一个代码来尝试让它工作,我终于做到了,但是当我将它转移到我的网站时,它仍然没有工作。我设置了 IE11 和 Chrome,但它们都无法正常工作。

http://jsfiddle.net/carlsc3/nxocs121/

HTML:

<div class=TransInfo>
    <figure class=FRM>
        <div class="CB"></div>
        <a href="http://www.example.com/">Link 1</a>
        <figcaption>Description of the Link that is in the figure a href blah blah blah blah blah blah blah blah thingie</figcaption>
    </figure>
    <figure class=FRM>
        <div class="CB"></div>
        <a href="http://www.example.com/">Link 2</a>
        <figcaption>Description of the Link that is in the figure a href blah blah blah blah blah blah blah blah thingie</figcaption>
    </figure>
</div>

CSS:

div.TransInfo {
    background-color: #E4F1FB;
    height: 100%;
    margin: 0 auto;
    list-style: none;
    overflow: auto;
    text-align: center;
    min-height: 300px;
}
figure {
    width: 300px;
    display: inline-block;
    position: relative;
    margin: 25px 25px 25px 25px;
    background: #FFFFFF;
    box-shadow: 2px 2px 2px #B8B8B8;
    overflow: visible;
}
figure a {
    padding: 5px;
    border: 1px solid #4E5052;
    text-decoration: none;
    display: block;
    color: #000000;
}
figcaption {
    padding: 5px;
    margin: -15px 0 0 15px;
    position: absolute;
    display: inline-block;
    width: 200px;
    color: #000000;
    background-color: red;
    border: 2px solid black;
    box-shadow: 4px 4px 4px #B8B8B8;
    opacity: 0;
    text-align: center;
    vertical-align: central;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    z-index: 1;
}
.CBclick {
    -webkit-animation: fighov 0.3s ease-out 0s;
    -webkit-animation-fill-mode: forwards;
    -moz-animation: fighov 0.3s ease-out 0s;
    -moz-animation-fill-mode: forwards;
    animation: fighov 0.3s ease-out 0s;
    animation-fill-mode: forwards;
}
@keyframes fighov {
    0% {
        opacity: 0;
        backface-visibility: hidden;
        z-index: 1;
    }
    100% {
        opacity: 1;
        backface-visibility: visible;
        z-index: 10;
    }
}
@-webkit-keyframes fighov {
    0% {
        opacity: 0;
        -webkit-backface-visibility: hidden;
        z-index: 1;
    }
    100% {
        opacity: 1;
        -webkit-backface-visibility: visible;
        z-index: 10;
    }
}
@-moz-keyframes fighov {
    0% {div.TransInfo {
    background-color: #E4F1FB;
    height: 100%;
    margin: 0 auto;
    list-style: none;
    overflow: auto;
    text-align: center;
    min-height: 300px;
}
figure {
    width: 300px;
    display: inline-block;
    position: relative;
    margin: 25px 25px 25px 25px;
    background: #FFFFFF;
    box-shadow: 2px 2px 2px #B8B8B8;
    overflow: visible;
}
figure a {
    padding: 5px;
    border: 1px solid #4E5052;
    text-decoration: none;
    display: block;
    color: #000000;
}
figcaption {
    padding: 5px;
    margin: -15px 0 0 15px;
    position: absolute;
    display: inline-block;
    width: 200px;
    color: #000000;
    background-color: red;
    border: 2px solid black;
    box-shadow: 4px 4px 4px #B8B8B8;
    opacity: 0;
    text-align: center;
    vertical-align: central;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    z-index: 1;
}
.CBclick {
    -webkit-animation: fighov 0.3s ease-out 0s;
    -webkit-animation-fill-mode: forwards;
    -moz-animation: fighov 0.3s ease-out 0s;
    -moz-animation-fill-mode: forwards;
    animation: fighov 0.3s ease-out 0s;
    animation-fill-mode: forwards;
}
@keyframes fighov {
    0% {
        opacity: 0;
        backface-visibility: hidden;
        z-index: 1;
    }
    100% {
        opacity: 1;
        backface-visibility: visible;
        z-index: 10;
    }
}
@-webkit-keyframes fighov {
    0% {
        opacity: 0;
        -webkit-backface-visibility: hidden;
        z-index: 1;
    }
    100% {
        opacity: 1;
        -webkit-backface-visibility: visible;
        z-index: 10;
    }
}
@-moz-keyframes fighov {
    0% {
        opacity: 0;
        -moz-backface-visibility: hidden;
        z-index: 1;
    }
    100% {
        opacity: 1;
        -moz-backface-visibility: visible;
        z-index: 10;
    }
}
.CB {
    cursor: help;
    position: absolute;
    width: 0;
    height: 0;
    top: 0;
    left: 0;
    border-top: 15px solid #4E5052;
    border-right: 15px solid transparent;
    z-index: 1;
}
        opacity: 0;
        -moz-backface-visibility: hidden;
        z-index: 1;
    }
    100% {
        opacity: 1;
        -moz-backface-visibility: visible;
        z-index: 10;
    }
}
.CB {
    cursor: help;
    position: absolute;
    width: 0;
    height: 0;
    top: 0;
    left: 0;
    border-top: 15px solid #4E5052;
    border-right: 15px solid transparent;
    z-index: 1;
}

JS:

$("div.CB").click(function () {
    var thisTime = this;
    $(thisTime).siblings('figcaption').addClass('CBclick');
    setTimeout(function () {
        $(thisTime).siblings('figcaption').removeClass('CBclick');
    }, 5000);
});

编辑:

.prepend() 解决了我遇到的主要问题。

添加 prepend 语句后,figcaption 将悬停在任何父母身上。

为了使 figcaption 悬停在其原始图形下方,而不是左上角,我使用 .offset() 语句来更改前置 figcaption 相对于其初始父图形的位置。

为了使所有内容都重置,以便用户在查看另一个 figcaption 后可以查看另一个 figcaption,我使用了 clone() 语句,这样我就可以 remove() figcaption,它不会影响将来的使用,而无需重新加载页面。

在下面查看我更改的 jquery

$("div.CB").click(function () {                                 /* Bind click event to the top corner triangle */
    $("div.TransInfo").children('figcaption').remove();
    var thisTime = this;                                        /* 'this' keyword does not work within the setTimeout function */
    var FigPos = $(thisTime).parent('figure');                  /* Set variable to parent figure */
    var top = FigPos.offset().top;                              /* Set variable to position from top of div*/
    var left = FigPos.offset().left;                            /* Set variable to position from left of div */
    $(thisTime).siblings('figcaption').clone().prependTo("div.TransInfo");                   /* Attach the figcaption to the TransInfo div */
    $("div.TransInfo").children('figcaption').addClass('CBclick');     /* Toggle the tool tip visibility */
    $("div.TransInfo").children('figcaption').css({ "top": top + 20, "left": left - 25 }); /* Set position of figcaption to just under parent figure */
    setTimeout(function () {
        $("div.TransInfo").children('figcaption').css({ "top": "", "left": "" });
        $("div.TransInfo").children('figcaption').removeClass('CBclick');
        $("div.TransInfo").children('figcaption').remove();
    }, 5000);
});

【问题讨论】:

    标签: jquery html css


    【解决方案1】:

    使用prepend()函数

    例子:

    $( ".parentClass" ).prepend( ".childClass" );
    

    【讨论】:

    • 感谢您为我指明了正确的方向,这是一个巨大的帮助
    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 2018-02-07
    • 2022-11-15
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多