@nigelotoole/share-url
Version:
Share a URL with Web Share, copy to clipboard or to social media
327 lines (261 loc) • 5.85 kB
CSS
/* ----- Buttons ----- */
.btn {
--padding-inline: var(--layout-space-sm);
--padding-block: var(--layout-space-xs);
--text-color: #fff;
--bg-color: var(--color-500);
--border-color: var(--color-500);
--border-size: 0px;
--text-color-hover: #fff;
--bg-color-hover: var(--color-700);
--border-color-hover: var(--color-700);
display: inline-flex;
gap: .25em;
justify-content: center;
align-items: center;
padding: var(--padding-block) var(--padding-inline);
border: var(--border-size) solid var(--border-color);
background-color: var(--bg-color);
transition: all .25s;
color: var(--text-color);
font-size: 1rem;
line-height: 1.5;
text-decoration: none;
text-align: center;
cursor: pointer;
position: relative;
overflow: hidden;
> :is(span, .icon) {
position: relative;
z-index: 1;
}
> span {
position: relative;
z-index: 1;
display: inline-flex;
gap: .25em;
justify-content: center;
align-items: center;
}
&::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
background-color: var(--bg-color-hover);
scale: 0 1;
transform-origin: 100% 50%;
transition-property: scale;
transition-duration: inherit;
transition-timing-function: var(--ease-out-cubic);
}
&:is(:hover, :focus, .is-active), a:hover & {
color: var(--text-color-hover);
border-color: var(--border-color-hover);
&::after {
scale: 1;
transform-origin: 0 50%;
}
}
&:is(.disabled, :disabled) {
pointer-events: none;
opacity: .75;
}
& .icon, & svg {
pointer-events: none;
}
&.btn--outline {
--text-color: var(--color-500);
}
}
.btn--white {
--text-color: var(--color-500);
--bg-color: var(--color-50);
--border-color: #fff;
--text-color-hover: var(--color-700);
--bg-color-hover: #fff;
--border-color-hover: #fff;
&.btn--outline {
--text-color: #fff;
}
}
.btn--green {
--bg-color: var(--color-accent-500);
--border-color: var(--color-accent-500);
--bg-color-hover: var(--color-accent-700);
--border-color-hover: var(--color-accent-700);
&.btn--outline {
--text-color: var(--color-accent-700);
}
}
.btn--outline, .btn--ghost {
--bg-color: transparent;
--border-size: 1px;
}
.btn--ghost {
--text-color: #fff;
--text-color-hover: var(--color-700);
--bg-color-hover: #fff;
--border-color-hover: #fff;
}
.btn--icon, .btn--round {
--padding-inline: 1rem;
--padding-block: 1rem;
}
.btn--round {
align-items: center;
justify-content: center;
border-radius: 50%;
aspect-ratio: 1 / 1;
}
.btn--icon-multi {
&:not(.is-active) .icon:last-of-type, &.is-active .icon:first-of-type {
display: none;
}
}
.icon {
display: inline-flex;
justify-content: center;
align-items: center;
width: 1em;
height: 1em;
fill: currentColor;
stroke: currentColor;
transition: inherit;
& use {
transition: inherit;
}
}
a, button {
& .icon {
pointer-events: none;
}
}
/* ----- Header and footer ----- */
.header {
position: sticky;
top: 0;
z-index: 100;
width: 100%;
color: #fff;
background-color: var(--color-500);
border-bottom: 1px solid #fff;
@media (--viewport-md-up) {
min-height: 80px;
}
.container {
display: flex;
gap: var(--layout-space-sm);
flex-wrap: wrap;
align-items: center;
}
a:not(.btn) {
color: #fff;
text-decoration: none;
&:is(:hover, :focus) {
color: var(--color-100);
}
}
}
.logo-text {
flex: 1 0 0%;
margin: 0;
font-family: var(--heading-font-family);
color: #fff;
/* font-size: 2.5rem;
font-size: clamp(2rem, 1.5229rem + 2.0356vw, 2.5rem); */
font-size: 2rem;
font-size: clamp(1.5rem, 1.0229rem + 2.0356vw, 2rem);
}
.header-nav {
margin-inline-start: auto;
&:not(:has(.btn)) {
row-gap: 0;
}
@media (--viewport-sm-down) {
width: 100%;
}
a:not(.btn) {
position: relative;
color: var(--color-100);
text-transform: uppercase;
&::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 2px;
transition: transform .2s ease-in-out;
z-index: -1;
background-color: currentColor;
transform: scaleX(0);
transform-origin: 100% 50%;
transition-timing-function: var(--ease-in-out-cubic);
}
&:is(:hover, :focus, .is-active) {
color: #fff;
&::after {
transform: scaleX(1);
transform-origin: 0 50%;
}
}
}
.btn {
@media (--viewport-sm-down) {
width: calc(50% - (var(--layout-space) / 2));
--padding-block: var(--layout-space-xxs);
}
}
}
.footer {
text-align: center;
.container > * {
&:not(:first-child) {
margin-block-start: var(--layout-space);
}
padding-block-start: var(--layout-space);
border-block-start: 2px solid var(--color-500);
}
.group, .nav {
align-items: center;
justify-content: center;
}
.share-title {
@media (--viewport-sm-down) {
width: 100%;
}
}
}
.footer-nav {
row-gap: var(--layout-space-xs);
font-size: .875rem;
}
/* Page heading */
.page-intro {
display: flex;
gap: var(--layout-space-md);
align-items: center;
}
.page-heading {
flex-grow: 1;
text-wrap: pretty;
}
.page-intro-img {
width: 80px;
height: auto;
border-radius: 50%;
}
.columns-sm-2 {
@media (--viewport-sm-up) {
column-count: 2;
column-gap: var(--layout-space-md);
}
> * {
break-inside: avoid;
text-wrap: pretty;
}
}