Loading { height: 25% display: flex align-items: center justify-content: center whitespace: no-wrap span.info { overflow: hidden white-space: nowrap text-overflow: ellipsis } -inline { height: 16px width: 16px display: inline-block margin: -3px 3px ::before { display: block height: 16px width: 16px } } -small { ::before { height: 30px width: 30px } } -large { height: 25vh ::before { height: 100px width: 100px } ::after { color: #CCC; content: 'Loading...' font-size: 200% } } -search { height: 200px ::before { height: 100px width: 100px } ::after { color: #CCC; content: 'Searching...' font-size: 200% } } ::before { content: ' ' height: 50px width: 50px background-image: svg(waitingIcon) background-repeat: no-repeat background-position: center background-size: contain animation: spin 3s infinite linear } } @svg waitingIcon { width: 30px height: 30px content: "" circle { stroke: #CCC stroke-width: 3px fill: none } } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }