The row-cols-#{$breakpoint}-#{$size} bootstrap classes are set on the sds-featureIconBoxList__inner element. By using the row-cols classes, we can retain bootstrap's row/col flexibility inside the module, without having to adapt the col-* classes.
The row class always needs to be set by default. row-xs and row-sm classes can be added as modifiers as well to adapt the gutter width between columns.
<div class="sds-featureIconBoxList">
<ul class="sds-featureIconBoxList__inner list-unstyled row row-cols-1 row-sm row-cols-md-3">
<li class="sds-featureIconBoxList__col col">
<div class="sds-featureIconBox">
<div class="sds-featureIconBox__inner">
<div class="sds-featureIconBox__innerContent">
<div class="sds-featureIconBox__icon sds-brandIconWrapper">
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.4431 7.38786C33.7562 6.42917 32.5247 5.90539 31.268 6.22159L8.26798 12.0087C6.93463 12.3442 6 13.5431 6 14.918V14.9994C6.83566 14.3717 7.87439 13.9998 9 13.9998H35V9.30902L25.2631 11.9645L24.7368 10.035L34.4431 7.38786ZM4 14.918V18.9998V35.9998C4 38.7612 6.23858 40.9998 9 40.9998H37C39.7614 40.9998 42 38.7612 42 35.9998V34.9998H40V35.9998C40 37.6566 38.6569 38.9998 37 38.9998H9C7.34315 38.9998 6 37.6566 6 35.9998V18.9998C6 17.3429 7.34315 15.9998 9 15.9998H37C38.6569 15.9998 40 17.3429 40 18.9998V19.9998H42V18.9998C42 16.2384 39.7614 13.9998 37 13.9998V9.13091C37 5.87492 33.9375 3.48755 30.78 4.28204L7.77996 10.0691C5.55772 10.6283 4 12.6265 4 14.918Z" fill="#003060" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.5 24H36V22H41.5C44.5376 22 47 24.4624 47 27.5C47 30.5376 44.5376 33 41.5 33H36V31H41.5C43.433 31 45 29.433 45 27.5C45 25.567 43.433 24 41.5 24Z" fill="#DE0000" />
</svg>
</div>
<div class="sds-featureIconBox__text sds-stackXs">
<h4 class="h4">Virements</h4>
<p class="sds-featureIconBox__description">Transactions "Eurotransfert" illimitées et sans frais</p>
</div>
</div>
</div>
</div>
</li>
<li class="sds-featureIconBoxList__col col">
<div class="sds-featureIconBox">
<div class="sds-featureIconBox__inner">
<div class="sds-featureIconBox__innerContent">
<div class="sds-featureIconBox__icon sds-brandIconWrapper">
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.4431 7.38786C33.7562 6.42917 32.5247 5.90539 31.268 6.22159L8.26798 12.0087C6.93463 12.3442 6 13.5431 6 14.918V14.9994C6.83566 14.3717 7.87439 13.9998 9 13.9998H35V9.30902L25.2631 11.9645L24.7368 10.035L34.4431 7.38786ZM4 14.918V18.9998V35.9998C4 38.7612 6.23858 40.9998 9 40.9998H37C39.7614 40.9998 42 38.7612 42 35.9998V34.9998H40V35.9998C40 37.6566 38.6569 38.9998 37 38.9998H9C7.34315 38.9998 6 37.6566 6 35.9998V18.9998C6 17.3429 7.34315 15.9998 9 15.9998H37C38.6569 15.9998 40 17.3429 40 18.9998V19.9998H42V18.9998C42 16.2384 39.7614 13.9998 37 13.9998V9.13091C37 5.87492 33.9375 3.48755 30.78 4.28204L7.77996 10.0691C5.55772 10.6283 4 12.6265 4 14.918Z" fill="#003060" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.5 24H36V22H41.5C44.5376 22 47 24.4624 47 27.5C47 30.5376 44.5376 33 41.5 33H36V31H41.5C43.433 31 45 29.433 45 27.5C45 25.567 43.433 24 41.5 24Z" fill="#DE0000" />
</svg>
</div>
<div class="sds-featureIconBox__text sds-stackXs">
<h4 class="h4">Virements</h4>
<p class="sds-featureIconBox__description">Transactions "Eurotransfert" illimitées et sans frais</p>
</div>
</div>
</div>
</div>
</li>
<li class="sds-featureIconBoxList__col col">
<div class="sds-featureIconBox">
<div class="sds-featureIconBox__inner">
<div class="sds-featureIconBox__innerContent">
<div class="sds-featureIconBox__icon sds-brandIconWrapper">
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M34.4431 7.38786C33.7562 6.42917 32.5247 5.90539 31.268 6.22159L8.26798 12.0087C6.93463 12.3442 6 13.5431 6 14.918V14.9994C6.83566 14.3717 7.87439 13.9998 9 13.9998H35V9.30902L25.2631 11.9645L24.7368 10.035L34.4431 7.38786ZM4 14.918V18.9998V35.9998C4 38.7612 6.23858 40.9998 9 40.9998H37C39.7614 40.9998 42 38.7612 42 35.9998V34.9998H40V35.9998C40 37.6566 38.6569 38.9998 37 38.9998H9C7.34315 38.9998 6 37.6566 6 35.9998V18.9998C6 17.3429 7.34315 15.9998 9 15.9998H37C38.6569 15.9998 40 17.3429 40 18.9998V19.9998H42V18.9998C42 16.2384 39.7614 13.9998 37 13.9998V9.13091C37 5.87492 33.9375 3.48755 30.78 4.28204L7.77996 10.0691C5.55772 10.6283 4 12.6265 4 14.918Z" fill="#003060" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M41.5 24H36V22H41.5C44.5376 22 47 24.4624 47 27.5C47 30.5376 44.5376 33 41.5 33H36V31H41.5C43.433 31 45 29.433 45 27.5C45 25.567 43.433 24 41.5 24Z" fill="#DE0000" />
</svg>
</div>
<div class="sds-featureIconBox__text sds-stackXs">
<h4 class="h4">Virements</h4>
<p class="sds-featureIconBox__description">Transactions "Eurotransfert" illimitées et sans frais</p>
</div>
</div>
</div>
</div>
</li>
</ul>
</div>
<div class="{{ namespace }}featureIconBoxList{% for mod in modifiers %} {{ mod }}{% endfor %}{% for mod in classes %} {{ mod }}{% endfor %}">
<ul class="{{ namespace }}featureIconBoxList__inner list-unstyled row row-cols-1{% for mod in rowModifiers %} {{ mod }}{% endfor %}{% for mod in rowClasses %} {{ mod }}{% endfor %}">
<li class="{{ namespace }}featureIconBoxList__col col">
{% render "@spk-feature-icon-box",itemOptions1,true %}
</li>
<li class="{{ namespace }}featureIconBoxList__col col">
{% render "@spk-feature-icon-box",itemOptions2,true %}
</li>
<li class="{{ namespace }}featureIconBoxList__col col">
{% render "@spk-feature-icon-box",itemOptions3,true %}
</li>
</ul>
</div>
/* variables specific to current element */
$element-specific-variables: "";
.#{$namespace}featureIconBoxList {
/* Save root element context for easy access if nesting is needed */
$self: &;
/* properties of current element + media queries */
/* Pseudo Elements */
&::before {
}
&::after {
}
/*
Include elements that are linked to the current element but have to reside at the root level of the stylesheet
(e.g: keyframes)
*/
@at-root {
}
/* children - write selector in full in comments in order to facilitate search */
// featureIconBoxList__childElement
&__col {
// follows same logic as parent
& + & {
&::before {
content: "";
@extend %brandLine;
margin-bottom: inherit;
position: relative;
left: $feature-icon-box-img-dimensions-global + $feature-icon-box-img-spacing-global;
@include media-breakpoint-up(lg) {
left: $feature-icon-box-img-dimensions-lg-global + $feature-icon-box-img-spacing-lg-global;
}
}
}
}
/* modifiers */
// featureIconBoxList -altStyle
&.-altStyle {
// follows same logic as base element
}
/* random parent element */
/*
*
* Syntax : .randomParentElt & {}
*
*/
@each $breakpoint in map-keys(map-remove($grid-breakpoints, "xs")) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
@include media-breakpoint-up($breakpoint, $grid-breakpoints) {
@if $grid-row-columns > 0 {
[class*="row-cols#{$infix}"] {
#{$self}__col {
&::before {
content: none;
}
}
}
}
}
}
/* Pseudo Classes */
&:hover {
@media (hover: hover) {
}
}
&:focus {
}
&:active {
}
&:focus,
&:active {
}
}