Bootstrap col-x-* classes that fall beneath a media query have all css inherited from the col-x-* class removed.
The reason why they default to full width, is not because of a design intention by bootstrap, but is the default behaviour for those divs.
This is counter-intuitive to their documentation which suggests it as a valid method of falling back to mobile.
It is not optional to include the col-xs-12 class if you are using a greater class and wish it to break to full width!
changing the code to
<div class="container">
<div class="row">
<div class="col-xs-12 col-md-6">A</div>
<div class="col-xs-12 col-md-6">B</div>
<div class="col-xs-12 col-lg-6">C</div>
<div class="col-xs-12 col-lg-6">D</div>
</div>
</div>
Will resolve the issue, you do not need to specify col-sm-12 as col-xs-12 will apply.
This is due to bootstrap not applying floats to auto-expanded divs (for whatever reason I'm not sure)
https://github.com/twbs/bootstrap/issues/17998
https://github.com/twbs/bootstrap/issues/17603