First, I would like to mention that applying overflow: hidden to an element with floating child elements clears the floats in the same way as including the clearfix mixin you are talking about.
For readability and performance, this is probably a clear winner. I have no evidence that overflow: hidden actually displays faster than clearfix , but I won’t be surprised if this happens. However, this is much less CSS, so it is definitely a winner in terms of uploaded data.
It is not always possible to use overflow: hidden , although there may be some relative positioning in your layout. In such cases, the best execution method is to create a global class for .clearfix and apply it to all the elements that should clean their children. Although this does not seem like it is easily maintained, I would say that it is easier to maintain, including this mix in your CSS, since you don’t have to flush the cached CSS every time you make changes.
My recommendation is to use overflow: hidden and .clearfix . Scrap @include clearfix .
The reason is that you cannot always leave in only one way (sometimes you can use the after element after something else, sometimes you might want the content to stretch outside their containers), so having both available makes sense anyway.
With both available methods, you can adapt to any scenario. Just remember that you could bind overflow: hidden to the class name to save it as DRY as .clearfix .
My 2 ¢.
Edit:
Alternatively, but perhaps not ideally, you can use @extend to generate the output as follows:
.element-1, .element-2, .element-3, .element-4, .element-5 {
Thus, clearfix is defined in one place, and not several times through a document. Personally, I'm not a big fan of this, but maybe this makes sense to you.