Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URL's added here will be added as <link>s in order, and before the CSS in the editor. If you link to another Pen, it will include the CSS from that Pen. If the preprocessor matches, it will attempt to combine them before processing.

+ add another resource

JavaScript

Babel is required to process package imports. If you need a different preprocessor remove all packages first.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Behavior

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

Format on Save

If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.

Editor Settings

Code Indentation

Want to change your Syntax Highlighting theme, Fonts and more?

Visit your global Editor Settings.

HTML

              
                <!--
https://openclassrooms.com/forum/sujet/centrer-un-texte-a-gauche-et-a-droite-dune-image
-->

<h1>Centrer une image verticalement à gauche et à droite d'un texte</h1>
<div class="exemple">
<p>
<label>Changer la taille du conteneur : <select id="taille">
  <option value="10">10%</option>
  <option value="33" selected>33%</option>
  <option value="50">50%</option>
   <option value="100">100%</option>
  </select></label>
  
  </p>
  <p>
<label>L'image prend 20% de la taille (flexbox seulement): <input type="checkbox" id="taille-pourcentage">
  </p>
</div>
<div class="exemple-0 wdg-taille">
   <h2>Avec positionnement</h2>
  <b class="non-response-text">La taille de l'image ne change pas, c'est la zone de texte qui s'adapte suivant la taille du paragraphe.</b><b class="response-text">La taille de l'image prend 20% de la taille du paragraphe, et la zone de texte.</b><br><br>et affluentior videtur esse vera amicitia nec observare restricte, ne plus reddat quam acceperit; neque enim verendum est, ne quid 
<p class="gauche"><img src="https://www.zonecss.fr/img/exemple/filter-image.jpg" class="mom_image"><strong>Une image de taille 60x60, avec une marge entre le texte et l'image de 10px</strong> <b><br>Cette technique necessite une modification de code HTML &lt;p&gt;&lt;span&gt;IMG&lt;/span&gt;&lt;span&gt;TEXTE&lt;/span&gt;&lt;/p&gt;
 au lieu de &lt;p&gt;&lt;IMG&gt;TEXTE&lt;/p&gt;</b>quae definit amicitiam paribus officiis ac voluntatibus.   quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit ratio acceptorum et datorum. Divitior mihi et affluentior videtur esse vera amicitia nec observare restricte, ne plus reddat.</p>
Altera sententia est, quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit
<p class="droite"><img src="https://www.zonecss.fr/img/exemple/filter-image.jpg" class="mom_image"><strong>Une image de taille 60x60, avec une marge entre le texte et l'image de 10px</strong> <b><br> Cette technique necessite une modification de code HTML &lt;p&gt;&lt;span&gt;TEXTE&lt;/span&gt;&lt;span&gt;IMG&lt;/span&gt;&lt;/p&gt;
 au lieu de &lt;p&gt;&lt;IMG&gt;TEXTE&lt;/p&gt;</b>quae definit amicitiam paribus officiis ac voluntatibus.   quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit ratio acceptorum et datorum. Divitior mihi et affluentior videtur esse vera amicitia nec observare restricte, ne plus reddat.</p>
Altera sententia est, quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit
</div>
 
<div class="exemple-1 wdg-taille">
  <h2>Avec Flexbox</h2>
  <b class="non-response-text">La taille de l'image ne change pas, c'est la zone de texte qui s'adapte suivant la taille du paragraphe.</b><b class="response-text">La taille de l'image prend 20% de la taille du paragraphe, et la zone de texte.</b><br>
Nous oblige à ajouter une balise pour le texte
<p class="gauche"><img src="https://www.zonecss.fr/img/exemple/filter-image.jpg" class="mom_image"><span><strong>Une image de taille 60x60, avec une marge entre le texte et l'image de 10px</strong> quae definit amicitiam paribus officiis ac voluntatibus.   quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit ratio acceptorum et datorum. Divitior mihi et affluentior videtur esse vera amicitia nec observare restricte, ne plus reddat.</span></p>
Altera sententia est, quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit
<p class="droite"><img src="https://www.zonecss.fr/img/exemple/filter-image.jpg" class="mom_image"><span><strong>Une image de taille 60x60, avec une marge entre le texte et l'image de 10px</strong> quae definit amicitiam paribus officiis ac voluntatibus.   quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter ad calculos vocare amicitiam, ut par sit ratio acceptorum et datorum. Divitior mihi et affluentior videtur esse vera amicitia nec observare restricte, ne plus reddat.</span></p>aut ne plus aequo quid in amicitiam congeratur.Altera sententia est, quae definit amicitiam paribus officiis ac voluntatibus. Hoc quidem est nimis exigue et exiliter
  </div>
<hr>
<div class="mise-en-page-lien">
  <div class="bloc-mise-en-page bloc-lien">
    <h2>Autres exemples liés à un tableau</h2>
    <ul>
      <li><a href="https://www.zonecss.fr/faq/les-flexbox-css.html#jKOjmR00000.codepen" target="_blank">Comprendre le flexbox</a></li> 
      <li><a href="https://www.zonecss.fr/proprietes-css/order-css.html#jKOjmR00000.codepen" target="_blank">Propriété Css order</a></li> 
      <li><a href="https://www.zonecss.fr/proprietes-css/align-items-css.html#jKOjmR00000.codepen" target="_blank">Propriété Css align-items</a></li> 
      <li><a href="https://www.zonecss.fr/proprietes-css/display-css.html#jKOjmR00000.codepen" target="_blank">Propriété Css display</a></li> 
      <li><a href="https://www.zonecss.fr/faq/les-tableaux-et-les-css.html#jKOjmR00000.codepen" target="_blank">Créer des éléments de tableau en CSS</a></li> 
      <li><a href="https://www.zonecss.fr/proprietes-css/vertical-align-css.html#jKOjmR00000.codepen" target="_blank">Propriété Css vertical-align</a></li> 
      <li><a href="https://www.zonecss.fr/proprietes-css/position-css.html#jKOjmR00000.codepen" target="_blank">position</a></li> 
      <li><a href="https://www.zonecss.fr/faq/les-elements-positionnes.html#jKOjmR00000.codepen" target="_blank">Les éléments positionnés</a></li> 
      <li><a href="https://www.zonecss.fr/proprietes-css/margin-top-css.html#jKOjmR00000.codepen" target="_blank">Propriété Css margin-top</a></li> 
    </ul>
  </div>
  <div class="bloc-mise-en-page bloc-lien bloc-sites">
    <h2>Sites</h2>
    <ul>
      <li><a href="https://www.zonecss.fr/#jKOjmR00000.codepen" target="_blank" title="Glossaire CSS">Zone CSS</a></li>
      <li><a href="http://www.aliasdmc.fr/#jKOjmR00000.codepen" target="_blank" title="Glossaire HTML/JAVASCRIPT">Zone (X)HTML</a></li>
      <li><a href="https://web-color.aliasdmc.fr/#jKOjmR00000.codepen" target="_blank" title="Couleurs pour le WEb (#,rgb,hsl)">Couleurs Web</a></li>
      <li><a href="https://outils-css.aliasdmc.fr/#jKOjmR00000.codepen" target="_blank">Outils CSS</a></li>
      <li><a href="https://outils-javascript.aliasdmc.fr/#jKOjmR00000.codepen" target="_blank">Outils Javascript</a></li>
    </ul>
  </div>
</div>
              
            
!

CSS

              
                /* //////////////////////////////////////////////
Plus d'informations liées à la solution  : 
//////////////////////////////////////////////
## Comprendre le flexbox
https://www.zonecss.fr/faq/les-flexbox-css.html#jKOjmR00000.codepen
## Propriété Css order
https://www.zonecss.fr/proprietes-css/order-css.html#jKOjmR00000.codepen
## Propriété Css align-items
https://www.zonecss.fr/proprietes-css/align-items-css.html#jKOjmR00000.codepen
## Propriété Css display
https://www.zonecss.fr/proprietes-css/display-css.html#jKOjmR00000.codepen
## Créer des éléments de tableau en CSS
https://www.zonecss.fr/faq/les-tableaux-et-les-css.html#jKOjmR00000.codepen
## Propriété Css vertical-align
https://www.zonecss.fr/proprietes-css/vertical-align-css.html#jKOjmR00000.codepen
## Propriété Css position
https://www.zonecss.fr/proprietes-css/position-css.html#jKOjmR00000.codepen
## Les éléments positionnés
https://www.zonecss.fr/faq/les-elements-positionnes.html#jKOjmR00000.codepen
## Propriété Css margin-top
https://www.zonecss.fr/proprietes-css/margin-top-css.html#jKOjmR00000.codepen
*/
h1{
  text-align:center
}
.exemple,
.exemple-0,.exemple-1,.exemple-2{width:30%;margin:auto;}
p{text-align:justify;}
.mom_image{width:60px;height:60px;}

.imginpourcent .response-text,
.non-response-text{display:inline;}
.imginpourcent .non-response-text,
 .response-text{display:none;} 
 
.exemple-0 .gauche{
  /* img.width + 10px de marge*/
  padding-left:70px;
  position:relative;
}
.exemple-0 .gauche img{
  position:absolute;
  left:0;
  top:50%;
  /* img.height / 2 */
  margin-top:-30px;
}

.exemple-0 .droite{
  /* img.width + 10px de marge*/
  padding-right:70px;
  position:relative;
}
.exemple-0 .droite img{
  position:absolute;
  right:0;
  top:50%;
  /* img.height / 2 */
  margin-top:-30px;
}
/* 
imginpourcent en construction 
*/
.exemple-0 p b{ display:none; color:red}
.imginpourcent.exemple-0 p b{ display:inline}
.imginpourcent.exemple-0 .gauche{ 
  position:relative;
  display:table;
  padding:0;
}
.imginpourcent.exemple-0 .gauche span{
  display:table-cell;
  vertical-align:middle;
  padding-left:10px;
}
.imginpourcent.exemple-0 .gauche span:first-child{
  width:20%;
  line-height:0px; 
  vertical-align:middle;
  padding-left:0px;
}
.imginpourcent.exemple-0 .gauche img{
  width:100%; height:auto;
  margin:0;
  position:relative;
  display:block;
} 


.imginpourcent.exemple-0 .droite{ 
  position:relative;
  display:table;
  padding:0;
}
.imginpourcent.exemple-0 .droite span{
  display:table-cell;
  vertical-align:middle;
  padding-right:10px;
}
.imginpourcent.exemple-0 .droite span:last-child{
  width:20%;
  line-height:0px; 
  vertical-align:middle;
  padding-right:0px; 
}
.imginpourcent.exemple-0 .droite img{
  width:100%; height:auto;
  margin:0;
  position:relative;
  display:block;
} 


/* ////////////////////////////////////
FLEXBOX a compléter par les formes prefix 
pour compatibilité navigateur
https://caniuse.com/#feat=flexbox
//////////////////////////////////// */
.exemple-1 .gauche , .exemple-1 .droite{ 
  text-align:left;
  align-items: center;
  display: flex
}
.exemple-1 span{text-align:justify;}
.exemple-1 img{flex: 0 0 auto;}
.exemple-1 .gauche span{padding-left:10px}
.exemple-1 .droite span{padding-right:10px}
.exemple-1 .droite img{order:1}

.exemple-1.imginpourcent img{
  width:20%;
  height:auto;
}
 
              
            
!

JS

              
                /* //////////////////////////////////////////////
Juste pour changer la taille du conteneur
///////////////////////////////////////////// */
document.addEventListener('DOMContentLoaded',function(oEvent){
  document.getElementById("taille").addEventListener('change',setTaille);
  document.getElementById("taille-pourcentage").addEventListener('change',setTaillePourcent);
});
function setTaille(oEvent){
  var oSelect = oEvent.currentTarget, 
      aBlocks = document.getElementsByClassName("wdg-taille");
  for(var i= 0; i< aBlocks.length ; i++){
    aBlocks[i].style="width:"+oSelect.value+"%";
  }
}
function setTaillePourcent(oEvent){
  var sClass= "imginpourcent",oChekbox = oEvent.currentTarget, 
      aBlocks = document.getElementsByClassName("wdg-taille");
  for(var i= 0; i< aBlocks.length ; i++){
    if(oChekbox.checked==true){
      aBlocks[i].classList.add(sClass);
    }else{
      aBlocks[i].classList.remove(sClass);
    }
  }
  changeCodeHtml(oChekbox.checked);
}
function changeCodeHtml(bResponsive){
  var aExemple = document.getElementsByClassName("exemple-0"),
      aGauche = aExemple[0].getElementsByClassName("gauche"),
      aDroite = aExemple[0].getElementsByClassName("droite");

  if(bResponsive==true){
    var oImg = aGauche[0].childNodes[0].cloneNode(true),
        oSpan =  document.createElement('span');
    aGauche[0].childNodes[0].remove();
    aGauche[0].innerHTML =  "<span>"+aGauche[0].innerHTML+'</span>';
    aGauche[0].insertBefore(oSpan,aGauche[0].childNodes[0]);
    oSpan.appendChild(oImg);
    oImg = aDroite[0].childNodes[0].cloneNode(true);
        oSpan =  document.createElement('span');
    aDroite[0].childNodes[0].remove();
    aDroite[0].innerHTML =  "<span>"+aDroite[0].innerHTML+'</span>';
    aDroite[0].appendChild(oSpan);
    oSpan.appendChild(oImg);
    
  }else{
    var aSpan = aGauche[0].getElementsByTagName("span"),
        sCode = "";
    for(var i = 0; i < aSpan.length; i++){
      sCode+= aSpan[i].innerHTML;
    }
    aGauche[0].innerHTML = sCode;
    aSpan = aDroite[0].getElementsByTagName("span");
    aDroite[0].innerHTML = aSpan[1].innerHTML + aSpan[0].innerHTML;
  }
}
              
            
!
999px

Console