42 votes

Vous utilisez une marge en pourcentage en CSS mais souhaitez une marge minimale en pixels ?

J'ai fixé un margin: 0 33% 0 0; mais je voudrais aussi m'assurer que la marge est au moins un certain px montant. Je sais qu'il n'y a pas min-margin en CSS, alors je me demandais si j'avais le choix ?

0 votes

Peut-être en utilisant une division vide à droite de celle pour laquelle vous définissez une marge ? et en définissant width : 33% ; min-width : npx ; pour cette deuxième division ? Les deux éléments sont inclus dans un conteneur div et flottés... Je ne suis pas sûr que cela fonctionne... c'est juste une idée.

36voto

Clarus Dignus Points 1983

La véritable solution consiste à utiliser un point d'arrêt de media query pour déterminer quand 33 % ne vous convient plus et doit être remplacé par la marge minimale en pixels.

/*Margin by percentage:*/
div{
    margin: 0 33% 0 0;
}

/*Margin by pixel:*/
@media screen and ( max-width: 200px ){
    div{
        margin: 0 15px 0 0;
    }
}

Dans le code ci-dessus, changez le max-width à n'importe quelle largeur d'écran, la marge de droite de 33 % ne vous convient plus.

20voto

Jevgeni Bogatyrjov Points 2831

Placez un div avec un pourcentage width et un min-width à droite de votre élément.

<div style="position:relative; float:left; margin:0">
<div style="position:relative; float:left; width:33%; min-width:200px">

4 votes

Cette approche évite l'utilisation d'autres éléments flottants et de clear à l'intérieur des divisions parentes, car cela aurait pour effet de pousser la mise en page à des positions non souhaitées. Une solution consiste à définir overflow:hidden sur les divs parents ci-dessus, mais ce n'est pas vraiment un scénario souhaitable et cela limitera l'utilisation d'éléments tels que les infobulles HTML, qui risquent d'être coupées par le cadre de délimitation des divs non débordantes.

0 votes

Vouliez-vous utiliser float:right pour le deuxième div ?

19voto

Ever Points 1084

Vous pouvez essayer ceci

.mm:before {
    content: "";
    display: inline-block;
    width: 33%;
    min-width: 200px;
}

6voto

user3009269 Points 402

Je sais que c'est un peu tard, mais avez-vous essayé ça ?

margin: 0 max(33%, 20px) 0 0

20px es tout ce que vous voulez doit être au moins un certain nombre de pixels . Ainsi, la marge restera fluide, mais ne tombera jamais en dessous de la limite. 20px .

J'espère que cela vous aidera !

0 votes

Pourquoi est-ce que max() valeur pour margin ne fonctionne que si je l'ajoute dans les outils de débogage mais pas si je l'utilise dans le fichier de style source ? Mon navigateur est firefox et j'utilise react-sass.

0 votes

@Sapinder Je ne suis pas familier avec SASS ou react-sass, mais d'après ce que j'ai googlé, il semble qu'ils ne prennent pas encore en charge la fonction CSS max. L'une des solutions de contournement consiste à envelopper la fonction max avec calc(). J'ai créé ce CodePen comme POC. codepen.io/ella301/pen/oNbMjvB J'espère que cela vous aidera !

4voto

Andre Duarte Points 49

Carl Papworth, dans ce cas, vous pouvez utiliser ceci :

body {margin-left: 60px; margin-right: 60px; width:calc(100%-120px); }
div#container {width:33%;}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X