Ответ 1
Функция show()
добавляет display:block
по умолчанию для div
. Вы можете изменить display
на flex
с помощью jQuery css()
:
$('#myFlexbox').css('display', 'flex');
У меня есть элемент с flexbox
<ul id="myFlexbox">
div#myFlexbox{
display:flex;
}
после того, как спрятать это и показать это, это запутано.
$('#myFlexbox').show();
теперь элемент отображает блок вместо flex.
<ul id="myFlexbox" style="display: block;">
Как я могу использовать .hide и .show с flexbox?
Функция show()
добавляет display:block
по умолчанию для div
. Вы можете изменить display
на flex
с помощью jQuery css()
:
$('#myFlexbox').css('display', 'flex');
JQuery .show()
не знает о вашем display: flex;
(не flexbox). Вместо этого попробуйте добавить и удалить скрытый класс.
CSS:
#myFlexbox{
display: flex;
}
.hide{
display: none !important;
}
JS:
$('#myFlexbox').addClass('hide');
$('#myFlexbox').removeClass('hide');
https://jsfiddle.net/p2msLqtt/
В противном случае вы должны выполнить свой JS после того, как CSS полностью загружен и DOM готов, я думаю, - например, как:
<html>
<head>
<!-- CSS -->
</head>
<body>
<!-- BODY PART -->
<!-- SCRIPT TO HIDE AND SHOW -->
</body>
</html>
Обновил скрипку и установил исполнение Javascript на domready - это работает:
Поскольку в других ответах не учитывалась возможность использования аргумента duration
...
Короткий ответ: Используйте . Hide для скрытия значения, и этого не должно быть.
Небольшое объяснение:
Соответствующие элементы будут немедленно скрыты без анимации. Это примерно эквивалентно вызову .css( "display", "none" ), , за исключением того, что значение свойства отображения сохраняется в кеше данных jQuery, чтобы впоследствии изображение можно было восстановить до его начального значения, Если элемент имеет отображаемое значение flex и скрыт, а затем отображается, он снова будет отображаться как flex.
Из документации, Изменен 'inline' до 'flex', чтобы соответствовать contenxt!
Итак, jQuery знает, что скрываешься! Если вы скрыли его, используя . Hide, который есть, И он знает, как показать его снова с правильным отображаемым значением.
просто используйте
.class{display: none}
.class[style*='display: block']{
display: flex !important;
}
когда будет добавлен jquery add styl attribit css, отлично работает на Chrome и Mozilla
Вы должны обернуть содержимое display: flex
элементом.
<div id="flexWrapper">
<ul id="myFlexbox"></ul>
</div>
свяжите ваш javascript show/hide с '#flexWrapper'
Решение class
работает, да.
Вот другой подход, который я придумал:
function showFlex(element) {
var flexContainer = document.getElementById(element);
flexContainer.setAttribute("style", "display: -webkit-box; display: -ms-flexbox; display: -webkit-flex; display: flex;");
}
showFlex( "yourIDhere" );
Обратите внимание, что при вызове функции идентификатор не требуется #.
Я знаю, что уже слишком поздно (3 года), но мне удалось это сделать.
Я создал правило в css для моего div, например #myDiv, которое выглядит следующим образом
#myDiv[style*='block'] {
display: inline-flex !important;
}
Он использует преимущества того, что jQuery делает с DOM, он применяет 'display: block'. Я использовал inline-flex, потому что мне это было нужно для того, что я делаю, но это может быть что угодно. Таким образом, правило применяется быстрее, без мерцания.
Идея состоит в том, чтобы создать пользовательскую функцию showFlex()
похожую на jQuery show()
и вызвать ее с элементом, который должен иметь display:flex;
имущество.
Решение jQuery
$.fn.showFlex = function() {
this.css('display','flex');
}
$('#myFlexbox').showFlex();
Решение JavaScript
Object.prototype.showFlex = function() {
this.style.display = 'flex';
}
document.getElementById('myFlexbox').showFlex();
Надеюсь это поможет.
Решение JQuery должно быть
$.fn.showFlex = function(){
this.css({'display':'flex'});
}