После нажатия на ссылку href, pie.HTC в стиле див не правильно перерисовывается


Мне нужно на моем веб-сайте Скрыть и показать закругленный угол div, который содержит пирог.htc, чтобы округлить его в IE. Но когда я использую display:none; и display:block; , где изначально он не отображается, когда первый дисплей он не отображается правильно.

Я переписал эту небольшую проблему, используя visibility вместо display, но другие проблемы появляются как в отображении, так и в видимости. Если я нажму любую ссылку с href, а затем нажмите, чтобы показать / скрыть div с закругленными углами, он будет отображаться без стиль

Это живой пример

Вы можете нажать "Show Container", затем "Hide Container" несколько раз, и это работает идеально, но если вы нажмете на "Click Here (Just Alert Link)", который является просто ссылкой с предупреждением, а затем нажмите на "Show Container", он будет отображать содержимое div без фона в качестве примера (это как проверено в IE8).

Другой пример, начиная с вкладки Demo на сайте CSS3 Pie

3 3

3 ответа:

Кажется, это больше связано с пирогом.htc и перерисовка, так как насчет того, чтобы не перерисовывать браузеры - просто переместите div с пути, а затем снова вернитесь..

<script type="text/javascript">
$(document).ready (function () {
    $('#show_div').bind ('click', function () {
            // show it by returning it to it's default position
        $('#tab_container_3').css ( {position : 'static'} );
    });
    $('#hide_div').bind ('click', function () {
            // hide it again by making it read the z-index
        $('#tab_container_3').css ( {position: 'relative'} );                       
    });
});
</script>

И измените этот CSS на:

#tab_container_3{
   position: relative;
   top: -9999px;
}

Это просто убирает его с пути, изменяя position на static с помощью jQuery вы переключаете a обратно на его значение по умолчанию, и любой элемент с position из static не принимает z-index, поэтому вам не нужно менять это

Обновлено

Согласно доступность (или нет) информации

Хорошо, чтобы избежать доступности контента, пуленепробиваемый способ-использовать display: block и visibility: hidden вместе, но в соответствии с вышеупомянутыми проблемами, уже отмеченными с ними, я подумал, что было бы хорошей идеей скрыть Родительский <li> сам, а не <a> с поведением, и на этот раз я сделал это, добавив и удалив класс

Это, кажется, работает:

$(document).ready (function () {

    // to make tab hidden and inaccessible onload
    $('#tab_container_3').parent().addClass("element-invisible");

    $('#show_div').bind ('click', function () {
        $('#tab_container_3').parent().removeClass ("element-invisible");       
    });
    $('#hide_div').bind ('click', function () {
          $('#tab_container_3').parent().addClass ("element-invisible");                            
    });
});

С этим классом, добавленным в CSS (#tab_container_3 больше не нуждается в дополнительном CSS)

.element-invisible {
  position: absolute !important;
  clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
  clip: rect(1px, 1px, 1px, 1px);
  visibility: hidden;
  display: none;
}

Теперь это работает для вас, я проверил CTRL+F в FF, и он не находит скрытую вкладку

Примечание я не думаю, что первые 3 правила позиционирования и клипа необходимы с этим методом, я попробовал их на a сначала и не полностью обрезал эффект в IE - поэтому я переместил класс в родительский li.. но я оставлю правила, чтобы показать, что я пытался - просто на случай, если вам интересно, что это такое;)

Третий Раз Повезло

Это когда я попробовал комбинацию, сначала загрузив Родительский li со страницы с отрицательным z-индексом, установив задержку так, чтобы через 0,5 секунды он скрывал и исправлял z-индекс, теория здесь пыталась сделать пирог.htc рисует углы, прежде чем спрятать их, я подумал, что никто не будет искать содержимое в течение 0,5 секунд ;) - это не совсем гладко в IE, но я думаю, что это из-за расположения пирога эффектов.htc использует для рисования углов и теней, но эффект рисует теперь, я попытался сползти вниз, чтобы показать div, поскольку это, кажется, "скрывает" худшее из jaggy reveal IE

$(document).ready (function () {

    // to make tab hidden but accessible onload, accessible at first to allow link to draw, then hide it after 0.5 seconds  
    $('#tab_container_3').parent().css('top','-9999px').delay(500).hide('fast', function() {$(this).css({'top' : '0px'});});

    $('#show_div').bind ('click', function () {
        $('#tab_container_3').parent().slideDown(200);       
    });
    $('#hide_div').bind ('click', function () {
          $('#tab_container_3').parent().hide(100);                            
    });
});

У меня была похожая проблема.

Вот предыстория:

Мы переключаемся между двумя кнопками на странице,когда одна скрыта, другая показана. При нажатии на один из них он скрыт, а другой показан.

Первый раз, когда пользователь нажимает на кнопку, она скрывает ok, но другая кнопка отображается очень странно (фон отображается далеко слева, но текст находится в правильном положении). Это происходит только в первый раз, каждый последующий клик / переход работать отлично.

Решение:

Мы используем переключатель jquery для отображения / скрытия, но я уверен, что он будет работать с другими переходами. el - это элемент(Ы), который/которые показываются .

$(el).toggle(0, function() {       
                     if ($.browser.msie) {
                         $(this).each(function() { $(this).resize(); }); 
                     }
                });

Изменение размера просто вызывает обновление элемента, после чего он рисуется правильно!

На моей странице есть вкладки со скругленными углами, созданные css3pie при просмотре с помощью IE7 или IE8. Затем jquery добавляет текущий класс на выбранную вкладку, что заставляет вкладку менять цвет или выделяться. Однако цвет не меняется при загрузке страницы. Только после наведения курсора на закладку он покажет изменение цвета. Класс и стили существуют с самого начала, но каким-то образом он не обновляет или не обновляет цвет, который является фоновым изображением. Это может быть связано с запуском css3pie перед jquery добавляет новый класс. После добавления класса jquery css3pie забывает отрисовать изменение или обновить фоновое изображение. Каким-то образом мне нужно обновить элемент, чтобы изменение класса вступило в силу.

Это решение сработало для меня.

    //check if the current URL matches the href path of the tab
    if (strURL == baseHrefPath) {
        //remove any previously highlighted tabs
        $(".tabs li.current a").removeClass("current");
        //highlight the matching tab (li)
        $(this).parent().addClass("current");

        //this is a hack for IE7 and IE8 which use css3pie for rounded corners
        //issue: the jquery adds the class after the css3pie runs, thus the change is not displayed
        //the selected tab is not changing color properly in IE7 and IE8
        //solution: add any inline style (i.e. color white) to the element
        //this basically forces the element to refresh so the new styles take effect
        //thus highlighting the current tab
        $(".tabs li.current a").css("color","white"); 
    }

Просто добавьте любой встроенный стиль (например, белый цвет) к элементу, который в основном заставляет элемент обновляться. При этом выбранная вкладка меняет цвет.