J'essaie de réaliser quelque chose de similaire à cette image:
J'ai une image (faisant partie d'un diaporama) encapsulée dans une div, et avec: avant et: après les pseudo-éléments, j'affiche deux commandes pour passer aux images suivantes (>>) ou précédentes (<<) du diaporama. .
Jusqu'à présent, j'ai ceci:
div {
position: relative;
}
div:before {
display:block;
height: 100%;
content: "stuff";
position:absolute;
top: 0; left: 0;
text-align: center;
}
Je ne peux cependant pas centrer le contenu des pseudo-éléments, le texte apparaît comme ceci:
Est-ce possible à réaliser? Sinon, quelle serait la solution de contournement la plus sémantique? Je ne veux pas centrer l'élément lui-même, mais seulement son contenu. Je préférerais que l'élément soit étiré à 100% de la hauteur.
Edit:http://jsfiddle.net/rdy4u/
Edit2: De plus, img est liquide/fluide, la hauteur de div/img est inconnue et la largeur est définie sur 800px et max-width
sur 80%.
En supposant que votre élément ne soit pas un <img>
(car les pseudo-éléments ne sont pas autorisés sur les éléments à fermeture automatique), supposons que ce soit un <div>
, de sorte qu'un moyen pourrait être:
div {
height: 100px ;
line-height: 100px;
}
div:before, div:after {
content: "";
...
display: inline-block;
vertical-align: middle;
height: ...;
line-height: normal;
}
Si vous ne pouvez pas changer la hauteur de ligne de la div, vous pouvez également:
div {
position: relative;
}
div:before, div:after {
position: absolute;
display: block;
top: 50%;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
content: "";
width: ...
}
Sinon, placez les indicateurs comme arrière-plan en position centrale.
Utiliser flex dans les CSS du pseudo-élément est assez simple:
.parent::after {
content: "Pseudo child text";
position: absolute;
top: 0;
right: 0;
width: 30%;
height: 100%;
border: 1px solid red;
display:flex;
flex-direction:row;
align-items: center;
justify-content: center;
}
Vous pouvez le faire sans recourir aux images. (Parfois, vous ne pouvez pas, par exemple, utiliser des icônes de police dans: before ou: after).
div {
position: relative;
overflow:hidden;
}
div:before, div:after {
position: absolute;
display: block;
top: 50%;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
height:20000px;
line-height:20000px;
content: ">>";
}
Il est vrai que l'utilisation de 20000px est un peu effrontée. Si votre div sera un peu plus grand, augmentez simplement le px.
Dans votre cas, vous avez une image à l'intérieur du div, alors frappez cette image avec display: block (les images ne sont pas affichées par défaut: block)
Voici le violon mis à jour pour votre cas particulier. http://jsfiddle.net/rdy4u/56/
Voici un moyen de créer des contrôles suivants et précédents en utilisant: les pseudo-éléments before et: after. Avec astuce de frontière pour créer des triangles pour les boutons précédent/suivant. Cela ne vous donne pas une surface de 100% de hauteur sur laquelle cliquer, mais si vous donnez au triangle (flèches) une taille suffisante, il devrait compenser cela.
div {
position: relative;
width: 800px;
max-width: 80%;
border: 1px solid red;
text-align: center;
margin: 0 auto;
}
div:before, div:after {
opacity: 0.5;
display:block;
content: "";
position:absolute;
width: 0;
height: 0;
}
div:before {
top: 40%; left: 0;
border-top: 25px solid transparent;
border-right: 50px solid blue;
border-bottom: 25px solid transparent;
}
div:after {
top: 40%; right: 0;
border-top: 25px solid transparent;
border-left: 50px solid blue;
border-bottom: 25px solid transparent;
}
Voici le code qui fonctionne: http://jsfiddle.net/fiddleriddler/rPPMf/
Je sais que je suis en retard pour la fête, mais cette solution simple et flexible fonctionnait à merveille au cas où cela aiderait l'un de vous.
.main-div {
display: flex;
align-items: center;
}
.my-div-name:before, .my-div-name:after {
/* This content will be vertically centered with the attributes of the main-div */
}
En utilisant flex box, vous devez d'abord définir une largeur et une hauteur fixes dans le parent.
div::after {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}