Repository navigation
Gutenberg – Icon Block
Henner S edited this page Mar 27, 2023
·
1 revision
Create a block with SVG icon and description.
h-icon-block
-
Integration with FontAwesome FREE. Simply type in the name of the icon and it will get the SVG code.
-
Use the toolbar to change icon position to Left / Center / Right.
-
Option to use Image file instead of SVG.
<div class="wp-block-h-icon has-icon-position-left has-text-align-left has-description"
style="--textColor:#000; --bgColor:#fff; --iconColor:#000;"
>
<figure class="wp-block-h-icon__figure">
<svg> ... </svg>
</figure>
<dl class="wp-block-h-icon__content">
<dt>Title</dt>
<dd>
<p>Insert description here</p>
</dd>
</dl>
</div>Note: Outer div becomes <a> if you set an anchor link using the Toolbar.
This plugin doesn't come with the front-end CSS. If you want a similar style with the admin one, here you go:
$size-xsmall : 480px
$size-small : 768px
$size-medium : 960px
$size-large : 1120px
$below-xs: "max-width:#{ $size-xsmall }"
$above-xs: "min-width:#{ $size-xsmall + 1px }"
$below-s: "max-width:#{ $size-small }"
$above-s: "min-width:#{ $size-small + 1px }"
$below-m: "max-width:#{ $size-medium }"
$above-m: "min-width:#{ $size-medium + 1px }"
$below-l: "max-width:#{ $size-large }"
$above-l: "min-width:#{ $size-large + 1px }"
.wp-block-h-icon
--iconSize: 60px
--iconPadding: 1rem
--iconGap: 1rem
--bgColor: #e5e5e5
--textColor: inherit
display: flex
align-items: flex-start
color: var(--textColor)
border-radius: 4px
&.is-style-boxed
--iconPadding: 0
--iconSize: 28px
padding: 0.5rem
background-color: var(--bgColor)
&.use-image
--iconSize: 60px
&.use-image.is-style-boxed
@media ($above-s) and ($below-m)
--iconSize: 45px
@media ($above-xs) and ($below-s)
--iconSize: 35px
&.has-icon-position-top
flex-wrap: wrap
&.has-text-align-center
justify-content: center
&.has-text-align-right
justify-content: flex-end
&.has-no-description
align-items: center
@media ($below-m)
--iconGap: 0.75rem
// if has link
a.wp-block-h-icon
text-decoration: none
will-change: transform
&:hover
opacity: .9
transform: translateY(-2px)
color: var(--textColor)
dt
text-decoration: underline
&:active
transform: none
transition: none
.wp-block-h-icon__figure
display: flex
align-items: center
justify-content: center
min-width: var(--iconSize)
max-width: var(--iconSize)
width: var(--iconSize)
height: var(--iconSize)
margin: 0
padding: var(--iconPadding)
background-color: var(--bgColor)
border-radius: 50%
.is-style-boxed &
background-color: transparent
.has-icon-position-left &
margin-right: var(--iconGap)
.has-icon-position-right &
order: 1
margin-left: var(--iconGap)
.has-icon-position-top &
margin-bottom: var(--iconGap)
.use-image &
padding: 0
background-color: transparent
path,
rect
fill: var(--iconColor, currentColor)
svg
max-width: 100%
max-height: 100%
.wp-block-h-icon__content
flex: 1
width: 100%
.has-icon-position-top &
flex: auto
dt
font-weight: 700
font-size: 20px
line-height: 1.5rem
.is-style-boxed &
font-weight: 500
font-size: 1.25rem
@media ($below-m)
font-size: 1rem
dd
margin-top: 0.75rem
dd p + p
margin-top: 0.5rem.wp-block-h-icon {
--iconSize: 60px;
--iconPadding: 1rem;
--iconGap: 1rem;
--bgColor: #e5e5e5;
--textColor: inherit;
display: flex;
align-items: flex-start;
color: var(--textColor);
border-radius: 4px;
}
.wp-block-h-icon.is-style-boxed {
--iconPadding: 0;
--iconSize: 28px;
padding: 0.5rem;
background-color: var(--bgColor);
}
.wp-block-h-icon.use-image {
--iconSize: 60px;
}
@media (min-width:769px) and (max-width:960px) {
.wp-block-h-icon.use-image.is-style-boxed {
--iconSize: 45px;
}
}
@media (min-width:481px) and (max-width:768px) {
.wp-block-h-icon.use-image.is-style-boxed {
--iconSize: 35px;
}
}
.wp-block-h-icon.has-icon-position-top {
flex-wrap: wrap;
}
.wp-block-h-icon.has-text-align-center {
justify-content: center;
}
.wp-block-h-icon.has-text-align-right {
justify-content: flex-end;
}
.wp-block-h-icon.has-no-description {
align-items: center;
}
@media (max-width:960px) {
.wp-block-h-icon {
--iconGap: 0.75rem;
}
}
a.wp-block-h-icon {
text-decoration: none;
will-change: transform;
}
a.wp-block-h-icon:hover {
opacity: 0.9;
transform: translateY(-2px);
color: var(--textColor);
}
a.wp-block-h-icon:hover dt {
text-decoration: underline;
}
a.wp-block-h-icon:active {
transform: none;
transition: none;
}
.wp-block-h-icon__figure {
display: flex;
align-items: center;
justify-content: center;
min-width: var(--iconSize);
max-width: var(--iconSize);
width: var(--iconSize);
height: var(--iconSize);
margin: 0;
padding: var(--iconPadding);
background-color: var(--bgColor);
border-radius: 50%;
}
.is-style-boxed .wp-block-h-icon__figure {
background-color: transparent;
}
.has-icon-position-left .wp-block-h-icon__figure {
margin-right: var(--iconGap);
}
.has-icon-position-right .wp-block-h-icon__figure {
order: 1;
margin-left: var(--iconGap);
}
.has-icon-position-top .wp-block-h-icon__figure {
margin-bottom: var(--iconGap);
}
.use-image .wp-block-h-icon__figure {
padding: 0;
background-color: transparent;
}
.wp-block-h-icon__figure path,
.wp-block-h-icon__figure rect {
fill: var(--iconColor, currentColor);
}
.wp-block-h-icon__figure svg {
max-width: 100%;
max-height: 100%;
}
.wp-block-h-icon__content {
flex: 1;
width: 100%;
}
.has-icon-position-top .wp-block-h-icon__content {
flex: auto;
}
.wp-block-h-icon__content dt {
font-weight: 700;
font-size: 20px;
line-height: 1.5rem;
}
.is-style-boxed .wp-block-h-icon__content dt {
font-weight: 500;
font-size: 1.25rem;
}
@media (max-width:960px) {
.is-style-boxed .wp-block-h-icon__content dt {
font-size: 1rem;
}
}
.wp-block-h-icon__content dd {
margin-top: 0.75rem;
}
.wp-block-h-icon__content dd p + p {
margin-top: 0.5rem;
}