J'ai du code comme ça
function switch_tabs(obj)
{
$('.tab-content').hide();
$('.tabs a').removeClass("selected");
var id = obj.attr("rel");
$('#'+id).show();
obj.addClass("selected");
}
La fonction show ajoute display: block. Mais je voudrais ajouter display: inline-block au lieu de block.
Au lieu de show
, essayez d’utiliser CSS pour masquer et afficher le contenu.
function switch_tabs(obj) {
$('.tab-content').css('display', 'none'); // you could still use `.hide()` here
$('.tabs a').removeClass("selected");
var id = obj.attr("rel");
$('#' + id).css('display', 'inline-block');
obj.addClass("selected");
}
La définition de la propriété CSS après avoir utilisé .show()
devrait fonctionner. Peut-être visez-vous le mauvais élément sur votre page HTML.
$('#foo').css('display', 'inline-block');
Mais si vous n'utilisez pas les effets de .show(), .hide()
, pourquoi ne définissez-vous pas ces propriétés CSS manuellement, comme suit:
$('#foo').css('display','none');
$('#foo').css('display','inline-block');
Utilisez css () juste après show () ou fadeIn () comme ceci:
$('div.className').fadeIn().css('display', 'inline-block');
Je l'ai fait
function showPanels() {
$('.panels').show("slow");
$('.panels').css('display','inline-block');
}
fonctionne comme un charme.
La solution de Razz fonctionnerait pour les méthodes .hide()
et .show()
mais ne fonctionnerait pas pour la méthode .toggle()
.
Selon le scénario, avoir une classe css .inline_block { display: inline-block; }
et appeler $(element).toggleClass('inline_block')
résolvent le problème pour moi.
Vous pouvez utiliser animate au lieu de show/hide
Quelque chose comme ça:
function switch_tabs(obj)
{
$('.tab-content').animate({opacity:0},3000);
$('.tabs a').removeClass("selected");
var id = obj.attr("rel");
$('#'+id).animate({opacity:1},3000);
obj.addClass("selected");
}
Je pense que vous voulez à la fois l'animation et définir la propriété display à la fin. Dans ce cas, vous feriez mieux d'utiliser show()
callback comme indiqué ci-dessous
$("#my_obj").show(400,function() {
$("#my_obj").css("display","inline-block")
}) ;
De cette façon, vous obtiendrez les deux résultats.
essaye ça:
$('#foo').show(0).css('display','inline-block');
<style>
.demo-ele{display:inline-block}
</style>
<div class="demo-ele" style="display:none">...</div>
<script>
$(".demo-ele").show(1000);//hide first, show with inline-block
<script>
en fait, jQuery efface simplement la valeur de la propriété 'display' et ne la définit pas sur 'bloquer' (voir la mise en oeuvre interne de jQuery.showHide ()) -
function showHide(elements, show) {
var display, elem, hidden,
...
if (show) {
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
if (!values[index] && display === "none") {
elem.style.display = "";
}
...
if (!show || elem.style.display === "none" || elem.style.display === "") {
elem.style.display = show ? values[index] || "" : "none";
}
}
Veuillez noter que vous pouvez remplacer $ .fn.show ()/$ .fn.hide (); stocker l’affichage original dans l’élément lui-même lors du masquage (par exemple sous forme d’attribut ou dans $ .data ()); et ensuite l'appliquer à nouveau lors de l'affichage.
En outre, l'utilisation de css important! ne fonctionnera probablement pas ici - car la définition d'un style en ligne est généralement plus stricte que toute autre règle.
Le meilleur .let est parent display :inline-block
ou ajoute un parent div
quel CSS n'a que display :inline-block
.