2014-11-25 2 views
4

У меня есть DIV, который прикрепляется к верхней части страницы при прокрутке. Для этого объект фиксирован. Проблема в том, что у меня также есть div внутри этого контейнера, который относительно позиционируется. Относительно позиционированный DIV показал тонкий, но абсолютно позиционированные элементы внутри него этого не сделали. Теперь, после того, как пользователь прокручивает и родительский DIV становится фиксированным, содержимое внутри относительного погружения (т. Е. Абсолютное вещество) исчезает за фиксированным div. Я пробовал некоторые вещи z-index, но это, казалось, не имело никакого эффекта. Вот JSFiddle: http://jsfiddle.net/c2vqd5fw/ А вот код:Абсолютный DIV внутри относительного DIV внутри фиксированного Div исчезает при прокрутке

$(document).ready(function() { 
 
    $(window).scroll(function(){ 
 
\t \t var docViewTop = $(window).scrollTop(); 
 
\t \t var offset = 0; 
 
\t \t 
 
\t \t /** 
 
\t \t * Always-On-Top Scroll expects HTML in the format: 
 
\t \t * <div class="scroll-wrapper"> 
 
\t \t *  <div class="scroll-aot">...</div> 
 
\t \t * </div> 
 
\t \t **/ 
 
\t \t $('.scroll-wrapper').each(function(){ \t \t \t 
 
\t \t \t if($(this).hasClass('scroll-xs-disabled') && $(window).width() <= 767) {} 
 
\t \t \t else if($(this).hasClass('scroll-sm-disabled') && $(window).width() <= 991) {} 
 
\t \t \t else if($(this).hasClass('scroll-md-disabled') && $(window).width() > 991) {} 
 
\t \t \t else { 
 
\t \t \t \t var wrapperTop = $(this).offset().top; 
 
\t \t \t \t var scrollAot = $(this).find('.scroll-aot')[0]; \t \t \t \t \t 
 
\t \t \t \t if(docViewTop >= wrapperTop && !$(scrollAot).hasClass('floating')){ 
 
\t \t \t \t \t $(scrollAot).width($(this).width()); 
 
\t \t \t \t \t $(scrollAot).css("top", offset); 
 
\t \t \t \t \t $(scrollAot).toggleClass('floating'); 
 
\t \t \t \t \t $(this).height($(scrollAot).outerHeight()); 
 
\t \t \t \t } else if (docViewTop < wrapperTop && $(scrollAot).hasClass('floating')){ \t 
 
\t \t \t \t \t $(scrollAot).removeAttr('style'); // oh no it has no style! 
 
\t \t \t \t \t $(this).removeAttr('style'); 
 
\t \t \t \t \t $(scrollAot).toggleClass('floating'); 
 
\t \t \t \t } 
 
\t \t \t \t 
 
\t \t \t \t offset = offset + $(scrollAot).height(); 
 
\t \t \t \t docViewTop = docViewTop + $(scrollAot).height(); 
 
\t \t \t } 
 
\t \t }); \t \t \t \t 
 
\t }); 
 
    $('.toggle-switch').click(function(){ 
 
\t \t $(this).children().toggleClass('off'); 
 
\t }); 
 
});
.stuff-above{ 
 
    width:100%; 
 
    height:100px; 
 
    background-color:grey; 
 
} 
 
.stuff-below{ 
 
    width:100%; 
 
    height:1000px; 
 
    background-color:grey; 
 
} 
 
.scroll-wrapper{ 
 
\t width: \t 100%; 
 
} 
 
.scroll-wrapper.small{ 
 
\t width: \t 50%; 
 
} 
 
.scroll-wrapper.floating{ 
 
\t position: \t relative; \t \t \t \t 
 
} 
 
.scroll-aot{ 
 
\t width: \t 100%; 
 
    background-color:green; 
 
} 
 
.scroll-aot.floating{ 
 
\t position: \t fixed; 
 
\t z-index: \t 1000; 
 
} 
 
.toggle-switch{ 
 
\t z-index:2000; 
 
    display: inline-block; 
 
\t position:relative; 
 
\t overflow: hidden; 
 
\t cursor:pointer;  
 
\t box-sizing:content-box; 
 
\t -moz-box-sizing:content-box; 
 
\t -webkit-box-sizing:content-box; 
 
\t width:64px; 
 
\t height:32px; 
 
\t padding:0px; 
 
\t border:2px solid #999999; 
 
\t border-radius:2px; 
 
\t -moz-border-radius:5px; 
 
\t -webkit-border-radius:5px; 
 
} 
 
.toggle-switch .content{ 
 
    position:absolute; 
 
\t z-index:2000; 
 
    top:0px; 
 
\t left:0px; 
 
\t width:200%; 
 
\t height:32px; 
 
\t transition: left 0.4s ease-in 0s; 
 
\t -moz-transition: left 0.4s ease-in 0s; 
 
\t -webkit-transition: left 0.4s ease-in 0s; 
 
\t -o-transition: left 0.4s ease-in 0s; 
 
} 
 
.toggle-switch .content.off{ 
 
\t left:-64px; 
 
\t transition: left 0.4s ease-in 0s; 
 
\t -moz-transition: left 0.4s ease-in 0s; 
 
\t -webkit-transition: left 0.4s ease-in 0s; 
 
\t -o-transition: left 0.4s ease-in 0s; 
 
} 
 
.toggle-switch .content #on{ 
 
\t background-color: #2FCCFF; 
 
\t color: #FFFFFF; 
 
} 
 
.toggle-switch .content #off{ 
 
\t background-color: #EEEEEE; 
 
\t color: #999999; 
 
\t text-align: right; 
 
} 
 
.toggle-switch .content .option{ 
 
\t display: block; 
 
\t float: left; 
 
\t width: 50%; 
 
\t height: 32px; 
 
\t padding: 0px 7px; 
 
\t line-height: 32px; 
 
\t font-size: 14px; 
 
\t font-weight: bold; 
 
\t box-sizing: border-box; 
 
\t -moz-box-sizing: border-box; 
 
\t -webkit-box-sizing: border-box; 
 
} 
 
.toggle-switch .slider{ 
 
\t z-index:2000; 
 
    background-color:#bbbbbb; 
 
\t display: inline-block; 
 
\t width:34px; 
 
\t height:32px; 
 
\t border-left:1px solid #999999; 
 
\t border-right:1px solid #999999; 
 
\t position: absolute; 
 
\t right:-1px;  
 
\t transition: right 0.3s ease-in 0s; 
 
\t -moz-transition: right 0.3s ease-in 0s; 
 
\t -webkit-transition: right 0.3s ease-in 0s; 
 
\t -o-transition: right 0.3s ease-in 0s; 
 
} 
 
.toggle-switch .slider.off{ 
 
\t right: 32px; 
 
\t transition: right 0.3s ease-in 0s; 
 
\t -moz-transition: right 0.3s ease-in 0s; 
 
\t -webkit-transition: right 0.3s ease-in 0s; 
 
\t -o-transition: right 0.3s ease-in 0s; 
 
} 
 
.toggle-switch .slider img{ 
 
    max-width:32px; 
 
\t max-height:32px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
 
<div class="stuff-above"></div> 
 
<div class="scroll-wrapper"> 
 
    <div class="scroll-aot"> 
 
     <div class="onOffColumn" title="Friends from LinkedIn"> 
 
      <div class="toggleSliderCntnr"> 
 
       <div id="liGroup" class="toggle-switch"> 
 
        <div class="content"> 
 
         <div id="on" class="option">On</div> 
 
         <div id="off" class="option">Off</div> 
 
        </div> 
 
        <div class="slider"> 
 
         <img class="toggleImg" src="" alt="Linkedin"/> 
 
        </div> \t \t \t \t 
 
       </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div> 
 
<div class="stuff-below"></div>

Самое странное в том, что если вы взаимодействуете с пустой коробкой (когда синий скрыт) абсолютно позиционируется вещи появляется снова. Мысли?

+0

изменение разметки HTML или позиции все три с абсолютной –

+0

Проблема заключается в 'переполнения: скрытый;' атрибут для класса '.toggle-switch'. Если вы удалите его, ваша проблема с прокруткой исчезнет. К сожалению, я не знаю, почему это так. Если бы я это сделал, я бы ответил скорее ответом, а не комментарием. Вот [обновленная скрипка] (http://jsfiddle.net/xf3bhwr4/), чтобы показать эту работу. Я несколько исправил стиль переключателя, не используя переполнение, но здесь требуется еще немного TLC. – esvendsen

+0

Он отлично работает в моем тесте в IE11. –

ответ

0

UPDATE: Я не совсем понял это, но я переписал переключатель, чтобы он не использовал абсолютное позиционирование или относительное позиционирование вообще, и теперь он работает чисто. Для тех, кто хочет проверить это, вот это: http://jsfiddle.net/c2vqd5fw/

.toggle-switch .content{ 
 
\t width:150%; 
 
\t height:32px; 
 
\t transition: margin-left 0.4s ease-in 0s; 
 
\t -moz-transition: margin-left 0.4s ease-in 0s; 
 
\t -webkit-transition: margin-left 0.4s ease-in 0s; 
 
\t -o-transition: margin-left 0.4s ease-in 0s; 
 
} 
 
.toggle-switch .content.off{ 
 
\t margin-left:-32px; 
 
\t transition: margin-left 0.4s ease-in 0s; 
 
\t -moz-transition: margin-left 0.4s ease-in 0s; 
 
\t -webkit-transition: margin-left 0.4s ease-in 0s; 
 
\t -o-transition: margin-left 0.4s ease-in 0s; 
 
} 
 
.toggle-switch .content #on{ 
 
\t background-color: #2FCCFF; 
 
\t color: #FFFFFF; 
 
} 
 
.toggle-switch .content #off{ 
 
\t background-color: #EEEEEE; 
 
\t color: #999999; 
 
\t text-align: center; 
 
} 
 
.toggle-switch .content .option{ 
 
\t display: inline-block; 
 
\t float: left; 
 
\t width: 31px; 
 
\t height: 32px; 
 
\t padding: 0px 7px; 
 
\t line-height: 32px; 
 
\t font-size: 14px; 
 
\t font-weight: bold; 
 
\t box-sizing: border-box; 
 
\t -moz-box-sizing: border-box; 
 
\t -webkit-box-sizing: border-box; 
 
} 
 
.toggle-switch .slider{ 
 
    background-color:#bbbbbb; 
 
\t display: inline-block; 
 
\t float:left; 
 
\t border-left:1px solid #999999; 
 
\t border-right:1px solid #999999; 
 
    
 
} 
 
.toggle-switch .slider img{ 
 
    max-width:32px; 
 
\t max-height:32px; 
 
    min-width:32px; 
 
\t min-height:32px; 
 
}
<div id="liGroup" class="toggle-switch"> 
 
    <div class="content"> 
 
    <div id="on" class="option">On</div> 
 
    <div class="slider"> 
 
     <img class="toggleImg" src="" alt="Linkedin"/> 
 
    </div> 
 
    <div id="off" class="option">Off</div> 
 
    </div> \t \t \t \t 
 
</div>

Смежные вопросы