28172 sujets

CSS et mise en forme, CSS3

Pages :
Bonsoir à tous
Petit problème avec le fichier de test suivant http://paralletes.free.fr/tests/test-tile.htm
La présentation que j'obtiens avec FireFox (image du haut) me convient tout à fait, mais elle se dégrade avec Chrome ou Safari (image du bas)
http://paralletes.free.fr/tests/Tuile.jpg
Quelqu'un aurait il une idée des raisons de cette situation?

Merci de votre aide

Les parties correspondantes du fichier CSS:

.majorItem,
.indexTable h2,
.indexTable figure,
.indexTitle,
.indexes figure{
	border:1px solid #990000;
	border-radius:5px;
	border-radius:0.5rem;
	background-color:#f4e8d0;
	padding:1.0em;
	margin:1.0rem auto;
}
.....
.majorItem,
h1, h2,
.indexTable figure {
	width:96%;
}
......
.majorItem h2{
	margin:-0.5em auto 0;
}
.majorItem figure {
	width:100%;
	display:table;
	margin:0 1%;
}
.majorItem figure {
	vertical-align:middle;
}
.majorItem figure figcaption {
	max-width: 75%;
	margin: 0;
}

.majorItem figure figcaption {
	display:table-cell;
	vertical-align:middle;
}
.majorItem figure img {
	/* max-width:90%; */
	display:table-cell;
	vertical-align:middle;
	
}
.majorItem figure figcaption {
	width:100%;
}
......
.majorItem h3 {
	text-align:left;
	color:#990000;
}



Modifié par PapyJP (30 Sep 2015 - 19:52)
En ajoutant un padding-right à ton élément ".majorItem figure img" ça règle le problème sous Chrome et il n'est pas pris en compte dans Firefox
Modérateur
juliesunset a écrit :
En ajoutant un padding-right à ton élément ".majorItem figure img" ça règle le problème sous Chrome et il n'est pas pris en compte dans Firefox


margin-right Smiley cligne (border-radius sur l'image)
Merci à tous les deux.
Il y a plusieurs choses que je ne comprends pas:
1) pourquoi les deux navigateurs fonctionnent ils de facon si différente sur les mêmes données? Que je sache il ne s'agit pas d'Internet Explorer Smiley cligne
2) ajouter un padding-right rend inopérant mon border-radius pour les deux coins de droite, ce qui se comprend aisément. Mais mettre un margin-right n'est pas possible car on ne met pas de marge à une cellule. Si j'ai mis un display:table-cell, c'est pour pouvoir avoir un vertical-aligner:middle entre l'image et le figcaption....
J'ai l'impression que dire à ces f... navigateurs qu'on veut une chose aussi simple qu'une image avec des bords arrondis et un texte à côté alignés par le centre relève de la haute technologie.
J'espère que je me trompe et que vous allez m'expliquer comment faire ça de façon simple et compréhensible....
Bonjour,
la différence semble venir de la propriété max-width donnée à ton "figcaption" qui s'applique sur firefox et pas sur chrome.
loicbcn a écrit :
Bonjour,
la différence semble venir de la propriété max-width donnée à ton "figcaption" qui s'applique sur firefox et pas sur chrome.

Merci de ta réponse, mais est il "normal" que ces deux navigateurs interprètent cela de façon différente?

S'ils tiennent tant à être antagonistes, ce n'est pas dans ce genre de domaine qu'ils doivent se battre, mais sur des fonctions qui convaincront les UTILISATEURS de leur donner la préférence.
En jouant à être incompatibles, ils ne font que compliquer le travail des gestionnaires de site sans aucun avantage compétitif pour eux mêmes.
Ce genre de politique a causé la perte de IE, Microsoft essaie maintenant de combler péniblement son retard.
A propos, je constate que Edge agit comme Chrome et Safari, c'est à dire que c'est sans doute FireFox qui n'interprète pas la norme, mais ça nous fait une belle jambe!

Je n'ai toujours pas trouvé de réponse à mon problème: comment mettre côte à côte simplement une image et un texte alignés verticalement par le milieu?
Je suppose qu'un expert doit savoir faire ça les doigts dans le nez, mais ce qui est agaçant c'est qu’il faut un expert pour faire une chose apparemment aussi triviale.
Administrateur
PapyJP a écrit :

Je n'ai toujours pas trouvé de réponse à mon problème: comment mettre côte à côte simplement une image et un texte alignés verticalement par le milieu?

Il va falloir donner plus de détails parce que sinon c'est effectivement très simple : inline-block et vertical-align: middle par exemple

http://codepen.io/raphaelgoetter/pen/yYgGKN?editors=110
Bé voui et on peut le faire aussi avec du display:table-cell + vertical-align:middle, choix que PapyJP a vraisemblablement pris.

Cependant le vertical-align d'un table-cell s'applique à son contenu. Or dans cet exemple le display:table-cell a été déclaré sur l'img elle-même. Il faudrait créer un parent à cette image, déclaré en table-cell afin de permettre à son contenu (l'image) de s'aligner verticalement.

Pour le problème initial, c'est la propriété max-width qui n'a pas l'air d'être comprise par Chrome dans le cadre d'un table-cell, comme l'a décrit loicbcn. Je conseillerais plutôt d'enlever le max-width du figcaption et d'appliquer un padding-right sur le conteneur (à ajouter) de l'image.

http://codepen.io/anon/pen/GprzMK
Modifié par Nigel (01 Oct 2015 - 14:08)
PapyJP a écrit :

1) pourquoi les deux navigateurs fonctionnent ils de facon si différente sur les mêmes données? Que je sache il ne s'agit pas d'Internet Explorer Smiley cligne
Tout simplement parce que Firefox utilise Gecko comme moteur de rendu et que Chrome, Safari et Opera, eux, utilisent WebKit. Les 2 n'ont pas le même algorithme, ni le même degré de compatibilité. Et donc pas la même façon d'interprété les différent éléments.
Modifié par juliesunset (01 Oct 2015 - 16:22)
Bonsoir à tous et merci de vos réponses

@Raphael
La raison pour laquelle j'ai utilisé des display:table-* c'est que cette discussion est la suite de http://forum.alsacreations.com/topic-4-76770-1-RnsoluEncoreunproblnmedalignementvertical.html pour laquelle vous m'avez vous même recommandé cette approche.
On a vraiment l'impression que l'alignement vertical relève du marginal et de l'excentrique.
Tout ce qui concerne l'utilisation de vertical-align, à quoi ça s'applique, ce que ça fait dans tel et tel contexte est complètement flou dans mon esprit. Suivre des "recettes" en croyant avoir compris les principes alors de ce n'est pas le cas ne fait pas progresser, au contraire.
Je suis tout à fait d'accord pour supprimer ces "table" mais il va sans doute y avoir d'autres effets de bord.
Il ne reste plus qu'à travailler par essais et erreurs, ce qui est un bon moyen d'obtenir des résultats sans comprendre pourquoi ça marche et de retomber par la suite dans d’autres chausses trappes.

Nigel a écrit :
BIl faudrait créer un parent à cette image, déclaré en table-cell afin de permettre à son contenu (l'image) de s'aligner verticalement.

Bien compris, mais c'est ce que je voulais éviter.
En théorie, le but du CSS est de mettre la présentation en dehors du HTML.
Ajouter des balises HTML pour faire de la présentation, c'est justement ce que les tenant du CSS3 prétendaient éviter, et qu'ils reprochaient aux tenants des tables imbriquées.
Il me semble "sémantiquement" cohérent de définir un "objet" contenant une image et du texte par

<figure class="">
    <img .../>
    <figcaption>
      ..............................
    </figcaption>
</figure>

et de définir la présentation de ces objets par du CSS attaché à la classe.

juliesunset a écrit :
Tout simplement parce que Firefox utilise Gecko comme moteur de rendu et que Chrome, Safari et Opera, eux, utilisent WebKit. Les 2 n'ont pas le même algorithme, ni le même degré de compatibilité. Et donc pas la même façon d'interprété les différent éléments.

En d'autres termes, le groupe de travail CSS a pondu une spécification tellement peu précise que selon l'implémentation qu'on en fait on a des résultats très différents.
Ou bien l'une des deux implémentations et incorrecte, et elle doit être corrigée, ou bien la spécification est mal faite, et je crains fort que ce soit le cas.
Dans tous les cas on fait reposer sur les développeurs de sites web la responsabilité de rendre compatibles entre navigateurs des choses qui devraient l'être sans problèmes.
Modifié par PapyJP (01 Oct 2015 - 23:15)
PapyJP a écrit :
Bien compris, mais c'est ce que je voulais éviter.
En théorie, le but du CSS est de mettre la présentation en dehors du HTML.
Ajouter des balises HTML pour faire de la présentation, c'est justement ce que les tenant du CSS3 prétendaient éviter, et qu'ils reprochaient aux tenants des tables imbriquées.
Il me semble "sémantiquement" cohérent de définir un "objet" contenant une image et du texte par

<figure class="">
    <img .../>
    <figcaption>
      ..............................
    </figcaption>
</figure>
et de définir la présentation de ces objets par du CSS attaché à la classe.

Ce qui était reproché aux tables imbriquées c'est qu'elles étaient utiliser de façon détourné de leur véritable vocation. Une table ne devrait être utilisé que pour afficher des données tabulaires, pas pour faire la mise en page d'un site.
Oui, on prône l'utilisation de balise sémantique le plus possible, mais il arrive qu'on ait à ajouté une balise non-sémantique pour aidé à la mise en page. Dans ces cas précis, il existe des balise html neutre, sans valeur sémantique, tel que la div pour aider ce cas de figure. Le truc c'est de ne pas en abuser.
Donc tu peux ajouté une div autour de ta balise "figure" sans problème, elle n’influencera en rien la sémantique et aidera ta mise en page.
juliesunset a écrit :
Donc tu peux ajouter une div autour de ta balise "figure" sans problème, elle n’influencera en rien la sémantique et aidera ta mise en page.

Dans le cas précis, ce n'est pas autour de la balise figure, mais à l'intérieur, autour de la balise img.

Certainement, pour des cas complexes, je conçois qu'on puisse avoir besoin de faire ce genre de choses, mais avant de faire ce que je considère comme une bidouille, je préfère demander l'avis de personnes plus expérimentées que moi dans ce domaine pour voir s'il n'y a pas quelque chose qui devrait être évident et devrait me sauter aux yeux mais que je n'ai pas vu. C'est de cette façon que j'ai appris pas mal de choses, que ce soit dans la vie professionnelle ou fans la vie tout court.

En ce qui concerne le problème précis de l'alignement vertical, dans l'état actuel de la discussion, je suis près de penser que c'est le genre de chose dont la plupart des gens se moquent éperdument, sinon les solutions seraient amplement documentées.
Modifié par PapyJP (01 Oct 2015 - 23:19)
juliesunset a écrit :

Ce qui était reproché aux tables imbriquées c'est qu'elles étaient utiliser de façon détourné de leur véritable vocation. Une table ne devrait être utilisé que pour afficher des données tabulaires, pas pour faire la mise en page d'un site.

Cela ressemble à des discussions sur le sexes des anges...

Pourquoi ne dit on pas la même chose de CSS avec display-table?

Franchement, on pourrait aussi bien dire que la balise table et ses enfants servent à faire de l'alignement, et que l'utilisation pour représenter des données tabulaires n'est qu'un cas particulier d'utilisation de cette famille de balises, parce qu'il est assez naturel d'utiliser de l'alignement pour ce type de données. Il y a d'ailleurs une présentation de Raphaël sur ce sujet dont je recommande la lecture: http://www.google.fr/url?q=https://speakerdeck.com/goetter/vive-les-tableaux-de-mise-en-page
Tu remarqueras que ce slide date de 2011... depuis il y a flex qui a apparu... as-tu envisagé cette possibilité?
juliesunset a écrit :
Tu remarqueras que ce slide date de 2011... depuis il y a flex qui a apparu... as-tu envisagé cette possibilité?

Flex est encore moins bien supporté que le reste.
Avant d'être en retraite, je n'avais à me préoccuper que des deux versions de navigateurs autorisés dans mon entreprise. Pour faire un du HTML il suffisait de se débrouiller avec l'intersection des fonctionnalités de ces deux versions stables et anciennes.
Dans ce projet, le site est accédé par des milliers de personnes venant du monde entier. Grâce à Google Analytics je sais quel pourcentage des utilisateurs utilisent quelle version de quel navigateur.
Si déjà des choses simples ne fonctionnent pas de la même façon sur les dernières versions de Firefox, Safari et Chrome, je ne vais pas me lancer à mettre du flex dans les pages.
Compte tenu de mon âge, il est fort vraisemblable que je n'aurais jamais à utiliser cette technique. C'est du reste dommage, car -- au moins sur le papier -- c'est la chose dont on aurait eu besoin dès le début, dans les années 1995-2000.
Modifié par PapyJP (01 Oct 2015 - 23:13)
Tu as deux solutions utilisables à l'heure actuelle et clairement identifiées pour aligner verticalement deux éléments l'un par rapport à l'autre :

- Deux éléments frêres de type inline (display:inline, display:inline-block, etc), sur lesquels nous appliquons un vertical-align:middle. ils s'alignent alors directement l'un par rapport à l'autre.

- Du contenu présent à l'intérieur de cellules dont l'alignement est vertical. L'alignement se fait alors par rapport à la hauteur factuelle (et donc identique) des cellules de "tableau".

Les deux cas imposent donc une structure différente, car contexte différent.


a écrit :
Ajouter des balises HTML pour faire de la présentation, c'est justement ce que les tenant du CSS3 prétendaient éviter, et qu'ils reprochaient aux tenants des tables imbriquées.

C'est très idéaliste, et malheureusement peu réaliste, ne serait-ce que pour des questions de maintenabilité et de méthodo. Il est généralement préférable d'ajouter quelques conteneurs afin de dissocier le contenant du contenu et de gérer proprement la structure.

a écrit :
mais avant de faire ce que je considère comme une bidouille

Ce qui me parait être une jolie bidouille, c'est de considérer une image comme cellule de tableau, pour le coup. Smiley murf

Honnêtement, ajouter un élément contenant en tant que frêre d'un autre élément contenant, afin de gérer plus efficacement leur contenu respectif, ça me parait être de l'ordre de la bonne pratique. Tout ceci à condition bien sur de ne pas tendre vers la divite aigüe.

Hoy.
Modifié par Nigel (02 Oct 2015 - 11:28)
Administrateur
PapyJP a écrit :
En ce qui concerne le problème précis de l'alignement vertical, dans l'état actuel de la discussion, je suis près de penser que c'est le genre de chose dont la plupart des gens se moquent éperdument, sinon les solutions seraient amplement documentées.


C'est un peu plus compliqué que cela. Je dirais presque le contraire : le centrage vertical est certainement la fonctionnalité la plus souhaitée en CSS depuis que CSS existe.

Tout le monde en est conscient, le W3C, les constructeurs de navigateurs, ... mais il s'avère que c'est "historiquement" compliqué.

En effet, dans les jeunes années de CSS (donc vers 1996), l'alignement vertical et la notion de hauteur ou de "page" sur un écran d'ordinateur était complexe à appréhender pour un navigateur, c'est pourquoi le modèle de boîte classique, initial, celui qu'on connaît tous, a prévu un alignement horizontal très simple (avec margin/left-right: auto qui fonctionne), mais a tout simplement laissé tomber l'alignement vertical simple (avec margin/top-bottom: auto ne fonctionne pas, et c'est pas prévu).

Les seuls alignements verticaux prévus dans le modèle de boîte initial sont :
- vertical-align sur des éléments de texte ou d'images (ou un inline / inline-block)
- vertical-align pour des données tabulaires (dans des td ou des display:table-cell)
- margin/top-bottom: auto dans le modèle de position absolute (si si ça marche)

Depuis lors, le problème est universel : c'est compliqué de centrer verticalement !

Mais comme les specs sont ce qu'elles sont, c'est à dire qu'une fois recommandation on ne peut plus revenir dessus, le W3C ne peut que faire avancer les choses en proposant de nouvelles specs, par exemple :
- le nouveau modèle d'alignement "CSS3" : http://www.w3.org/TR/css3-align/ (tous les alignements deviendront enfantins avec ce module)
- Flexbox : http://www.w3.org/TR/css-flexbox-1/
- Grid Layout : http://www.w3.org/TR/css-grid-1/
- etc.

En conclusion :
- Oui cela reste compliqué de centrer verticalement sur les anciens navigateurs
- Oui l'avenir (et le présent) nous offre de belles perspectives.

Bonne journée Smiley smile
Merci à tous pour vos réponses, et particulièrement à Raphaël pour la clarté de sa mise au point sur le sujet de l'alignement vertical
Ça va bientôt faire 30 ans que je fais du HTML et que je me débrouille comme je peux à faire avec les moyens du bord.
J'étais resté sur mes acquis durant ces dernières annees, la fréquentation de ce forum m'a donné envie de voir comment les choses avaient évolué. Si j'ai bien compris, la réponse à cette question est "avec lenteur".
Reste tout de même la question préoccupante de la compatibilité des implémentations. Tout cet effort de standardisation pour ça...
Administrateur
PapyJP a écrit :
Reste tout de même la question préoccupante de la compatibilité des implémentations. Tout cet effort de standardisation pour ça...

Tu poses mal le problème selon moi.

Aujourd'hui, tous les navigateurs (et depuis plusieurs générations) respectent au-moins à 90% les spécifications finalisées.

S'il y a un problème de compatibilité, c'est quasi-systématiquement sur des spécifications non finalisées, et c'est rarement la faute du navigateur.

L'exemple le plus flagrant est : le cas Internet Explorer.
Aujourd'hui, IE est l'un des meilleurs navigateurs du monde, et ce n'est pas la faute de Microsoft si les certains usagers ont bloqué leur version à IE8.

Bref, ne rejetons pas la faute à Microsoft, Google, Opera etc. car ils avancent tous très vite pour supporter les standards.
La faute est plutôt du côté des administrateurs système, des vieux parcs informatiques, des banques obligées de conserver du ActiveX, etc. (car du côté des particuliers, il reste moins de 0.5% de gens sur IE8).

Ce sont les seuls à nous bloquer aujourd'hui...
Modifié par Raphael (02 Oct 2015 - 14:27)
@Raphael

C'est sûr que les entreprises sont extrêmement frileuses à changer de système, mais il est vrai que depuis des années toute leur gestion se fait par l'intranet de l'entreprise et que changer la version des navigateurs des ordinateurs de l'entreprise, c'est prendre le risque de ne plus faire marcher la gestion.

Mais en ce qui concerne mon problème, j'ai pris les dernières versions disponibles des navigateurs (pas de miracle, mon PC a planté au passage vers W10 et j'ai du en acheter un nouveau). Le problème est bien que FireFox et les autres ne réagissent pas de la même manière.
S'il y a un bug de CSS, -- ce qui est possible, mais quel bug? -- je comprends très bien que les navigateurs ne réagissent pas de la même manière et donnent des résultats différents. Mais si ce n'est pas un bug, c'est beaucoup plus inquiétant.

Moyennant quoi j'ai changé de CSS dans la "vraie page" pour masquer le problème, mais je ne suis pas rassuré pour autant. D'habitude je fais des essais sous FireFox, et quand ça marche ça va généralement très bien sur les autres navigateurs. Je pense que maintenant je vais prévoir une séance de tests sous Chrome dans mon plan de tests.
Modifié par PapyJP (02 Oct 2015 - 17:57)
Pages :