<h1>
CSS Multi-Column: break-before, break-after and break-inside
</h1>

<form>
  <fieldset>
    <label class="active">
      <input type="radio" name="class" value="container--one" checked="checked" class="radio">
      <code>auto</code>
    </label>
    <label>
      <input type="radio" name="class" value="container--two" class="radio">
      <code>break-before: column</code>
    </label>
    <label>
      <input type="radio" name="class" value="container--three"  class="radio">
      <code>break-inside: avoid  </code>
    </label>    
  </fieldset>  
</form>

<div class="container container--one" id="container">
  <h2>
    The heading is really long, really long
    <br>
    <small>(and also has a subheading)</small>
  </h2>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error laudantium dicta maiores voluptatibus corporis aliquid placeat porro fugit? Voluptatibus impedit dolor nesciunt, corrupti reiciendis molestias minima amet itaque rem! Ipsam?
  </p>
  <p>
    Donec ligula ligula, egestas non dignissim at, consequat ac purus. Mauris tempus tempor magna in congue. In congue sed massa sed fringilla. Nunc interdum metus sed eleifend finibus. Pellentesque mi magna, pharetra quis accumsan et, varius nec dolor.
  </p>
  <h2>
    The another heading is even longer, even longer
    <br>
    <small>(and also has a subheading)</small>    
  </h2>  
  <p>
    Sed tempus faucibus ante quis consequat. Nunc in dolor pretium, gravida lectus eu, ornare orci. Vestibulum lobortis pellentesque nibh in sagittis. Praesent eget rhoncus diam, id finibus ante. Nunc vulputate dolor quis felis ullamcorper, a maximus elit tempor.
  </p>
  <p>
    Curabitur nec lacinia ipsum. Duis tortor nisl, imperdiet id nunc eget, gravida pretium erat. Quisque id neque fringilla, molestie ante nec, vulputate augue. 
  </p>
  <p>
    Vestibulum sed finibus ligula, et cursus sem. Vestibulum quis laoreet tellus. Vivamus interdum varius ultrices. Nullam accumsan eget dolor eget commodo. Praesent nec venenatis turpis, quis ultrices tortor. 
  </p>
  
</div>
.container--one h2 {
  break-before: auto;
  break-after: auto;
  break-inside: auto;
}

.container--two h2 {
  break-before: column; 
}

.container--three h2 {
  break-inside: avoid; 
}

/* ETC (Formatting only): */

body {
  margin: 1.5em;
  font-size: 130%;
  font-family: sans-serif;
  background: #F2F0EC;
  color: #2E2C08;
}

.container { 
  border: 10px solid #2E2C08;
  background: white;  
  padding: 1rem;
}

.box {
  margin: 0.25rem;
  padding: 0.5em;
  text-align: center;
  background: #e5e3de;
}

fieldset {
  border: #abab9d 1px solid;
  padding: 0;
  margin-bottom: 2em; 
}

label {
  display: inline-block;
  padding: 0.5em;
  cursor: pointer;
}

.active {
  background: #abab9d;
}

.container {
  padding: 1rem;
  columns: 20em 3;
}

h2 {
  margin-top: 0;
}

h2 small {
  color: grey;
}

var radios = document.querySelectorAll('.radio');
var container = document.getElementById('container');
radios.forEach(function(i){
    i.addEventListener('click', function(el){
        var clicked = el.currentTarget;
        var active = clicked.parentElement.parentElement.querySelector('.active');
        active && active.classList.remove('active');
        clicked.parentElement.classList.add('active');     
        container.className = 'container '+clicked.value;
    });
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.