28172 sujets

CSS et mise en forme, CSS3

Bonjour,

J'avoue que je sèche lamentablement sur un petit problème de rendu sur un background. Et j'ai beau chercher, je ne trouve pas de solution me convenant (à moins que ça soit tellement simple que ça me passe sous le nez, parfois, plus c'est gros ...)

Ce que je tente de créer :
Une page HTML contenant un <div> ayant pour id "global" qui comme son nom l'indique, englobe la totalité de ma page.
J'ai fait le choix de faire tenir mon site dans du 1024px de large.
Ce <div> possède un background qui est une image (dégradé de couleur) de dimension 1024x1 px.
Donc pour faire simple :

#global {
   width:1024px;
   height:100%;
   margin:0 auto;
   background:#Couleur2 url(Couleur1VersCouleur2.gif) repeat-y;
}

Tout ça fonctionne très bien et je me retrouve donc avec mon site centré au milieu de la page html, moche à souhait (oui, je suis pas très doué en design mais là n'est pas le problème).

Le problème c'est que de chaque côté de mon site pour les résolutions d'écran supérieures à 1024px, j'ai deux bandeaux blancs à gauche et à droite de mon site.
Et je voudrais que le bandeau de gauche ait la couleur 1 du dégradé, tandis que le bandeau de droite ait la couleur 2 du dégradé, histoire d'avoir une certaine continuité.

Et j'y arrive pas ...

Je n'arrive pas à mettre 2 background-color au <body> qui ne soient pas des images.
Je n'arrive pas à mettre 2 images (carrés de 1x1px des 2 couleurs) pour qu'elles prennent chacune 50% de la largeur du <body>.
J'ai crée 2 <div> (appelées #Gauche et #Droite) de width 50% avec chacune la bonne couleur, avec un float:left et un float:right, et ça fonctionnerait bien si j'avais pas le pb de la hauteur :
- Les <div> ne contiennent pas de texte : pas de hauteur et ne sont pas visibles
- Je spécifie une hauteur : elle est obligatoirement fixe. Je mets 100%, le <div> prend bien 100% à l'écran, mais dès que je scrolle ça s'arrête (alors que mon #Global à une hauteur égale à environ 2 fois la résolution de mon écran). J'arrive bien avec un peu de jquery à fixer la taille de mes div (en faisant un truc du style : #Gauche.height(#Global.height)), mais la hauteur de ma page est dynamique et donc, en fonction des accordéons dépliés ou non, mon <div> #Global dépasse parfois mes <div> latéraux ou au contraire est plus petit.


Donc, je sèche et si quelqu'un a une idée, je prends.
D'avance merci.

Manu

P.S. : J'espère avoir été clair. J'ai tendance à trop parler et avoir du mal à être concis.
Bonjour,

je te donne quelques pistes :

- le background pas sur la div, mais sur le body. pas besoin de donner une dimension.

- pas d'images pour cet effet.

- utiliser la propriété linear-gradient, webkit/moz linear-gradient en css3

- utiliser css3pie pour les versions antérieures IE, sinon il me semble que IE a ses dégradés propriétaires.
Bonjour,

Merci pour la réponse, je ne connaissais pas du tout cette propriété. Mais elle ne répond pas toutefois à mon problème.

Cette propriété va me permettre de me passer de mon image de fond pour gérer le dégradé, ce qui est pas si mal ma foi (et surtout moins lourd à gérer quand il faut faire évoluer le fond, j'en avais marre de re-générer des fichiers images).

Par contre, cela ne répond pas à mon besoin dans le sens où si je passe cette propriété sur le <body> plutôt que sur le <div>, le dégradé généré sera sur l'ensemble de la page html, et non seulement sur la partie correspondant réellement à mon site.

Ce que je veux obtenir, c'est la chose suivante :

|#Gauche| #Global |#Droite |
|Couleur 1|Dégradé couleur 1 vers couleur 2|Couleur 2|

et non
|#Gauche| #Global |#Droite |
| Dégradé couleur 1 vers couleur 2 |

Manu
Modifié par ManuB28 (27 Jul 2012 - 18:31)
Bonsoir,

cette valeur : linear-gradient (avec les prefixes qui faut) est tout a fait adapté.

Elle ne permet pas de passer simplement d'une couleur vers une autre, mais elle permet aussi de definir plusieurs couleur et les zones quelles doivent couvrir.

Tu peut par exemple avec deux couleur faire en sorte que la première couleur couvre une moitié et l'autre , .. l'autre moitié, sans aucun dégradés entre ces deux couleurs.

Tu peux aussi, passer plusieurs valeur en les séparant par une virgule.(comme box-shadow ou text-shadow et background-image/position/size/... Smiley smile )

Transparent est aussi une couleur utilisable.

Test :
1) sans degradé :
background-image:linear-gradient(0, red 0%, red 50%, yellow 50%, yellow 100%;)

2) avec un degradé de 25% a 75%.
background-image:linear-gradient(0, red 0%, red 25%, yellow 75%, yellow 100%;)


pour IE et de memoire, il me semble qu'il faudra se servir des degradés multiple , car on ne peut passer que 2 couleur a la fois. (syntaxe a verifier sur le site de Microsoft) .

++
Oups,

J'étais allé trop vite sur la page que j'ai lu sur la propriété radial-gradient (http://www.alsacreations.com/tuto/lire/813-css3-background-radial-gradient.html), j'avais raté qu'on pouvait préciser la position des couleurs.

Effectivement, avec un 50% à mes 2 couleurs, j'obtiens tout de suite ce que je veux.

Merci encore !