initial commit
This commit is contained in:
commit
559ede34bf
|
@ -0,0 +1,18 @@
|
||||||
|
# This file is for unifying the coding style for different editors and IDEs
|
||||||
|
# editorconfig.org
|
||||||
|
|
||||||
|
# WordPress Coding Standards
|
||||||
|
# https://make.wordpress.org/core/handbook/coding-standards/
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
[*.{yml,yaml}]
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
|
@ -0,0 +1,30 @@
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Output of `npm pack`
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Output of `wp-scripts plugin-zip`
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"name": "red-orbital",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "Red Orbital Block",
|
||||||
|
"author": "Ray Elliott",
|
||||||
|
"license": "GPL-2.0-or-later",
|
||||||
|
"homepage": "rayelliott.dev",
|
||||||
|
"main": "build/index.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": "wp-scripts build",
|
||||||
|
"format": "wp-scripts format",
|
||||||
|
"lint:css": "wp-scripts lint-style",
|
||||||
|
"lint:js": "wp-scripts lint-js",
|
||||||
|
"packages-update": "wp-scripts packages-update",
|
||||||
|
"plugin-zip": "wp-scripts plugin-zip",
|
||||||
|
"start": "wp-scripts start"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@wordpress/scripts": "^23.5.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
=== Orbital ===
|
||||||
|
Contributors: Ray Elliott
|
||||||
|
Tags: block
|
||||||
|
Tested up to: 6.0
|
||||||
|
Stable tag: 0.1.0
|
||||||
|
License: GPL-2.0-or-later
|
||||||
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
|
Red Orbital Block
|
||||||
|
|
||||||
|
== Description ==
|
||||||
|
|
||||||
|
This is the long description. No limit, and you can use Markdown (as well as in the following sections).
|
||||||
|
|
||||||
|
For backwards compatibility, if this section is missing, the full length of the short description will be used, and
|
||||||
|
Markdown parsed.
|
||||||
|
|
||||||
|
== Installation ==
|
||||||
|
|
||||||
|
This section describes how to install the plugin and get it working.
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
|
||||||
|
1. Upload the plugin files to the `/wp-content/plugins/red-orbital` directory, or install the plugin through the WordPress plugins screen directly.
|
||||||
|
1. Activate the plugin through the 'Plugins' screen in WordPress
|
||||||
|
|
||||||
|
|
||||||
|
== Frequently Asked Questions ==
|
||||||
|
|
||||||
|
= A question that someone might have =
|
||||||
|
|
||||||
|
An answer to that question.
|
||||||
|
|
||||||
|
= What about foo bar? =
|
||||||
|
|
||||||
|
Answer to foo bar dilemma.
|
||||||
|
|
||||||
|
== Screenshots ==
|
||||||
|
|
||||||
|
1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from
|
||||||
|
the /assets directory or the directory that contains the stable readme.txt (tags or trunk). Screenshots in the /assets
|
||||||
|
directory take precedence. For example, `/assets/screenshot-1.png` would win over `/tags/4.3/screenshot-1.png`
|
||||||
|
(or jpg, jpeg, gif).
|
||||||
|
2. This is the second screen shot
|
||||||
|
|
||||||
|
== Changelog ==
|
||||||
|
|
||||||
|
= 0.1.0 =
|
||||||
|
* Release
|
||||||
|
|
||||||
|
== Arbitrary section ==
|
||||||
|
|
||||||
|
You may provide arbitrary sections, in the same format as the ones above. This may be of use for extremely complicated
|
||||||
|
plugins where more information needs to be conveyed that doesn't fit into the categories of "description" or
|
||||||
|
"installation." Arbitrary sections will be shown below the built-in sections outlined above.
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Plugin Name: Orbital
|
||||||
|
* Plugin URI: rayelliott.dev
|
||||||
|
* Description: Red Orbital Block
|
||||||
|
* Requires at least: 5.9
|
||||||
|
* Requires PHP: 7.0
|
||||||
|
* Version: 0.1.0
|
||||||
|
* Author: Ray Elliott
|
||||||
|
* License: GPL-2.0-or-later
|
||||||
|
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
* Text Domain: red-orbital
|
||||||
|
*
|
||||||
|
* @package red-block
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers the block using the metadata loaded from the `block.json` file.
|
||||||
|
* Behind the scenes, it registers also all assets so they can be enqueued
|
||||||
|
* through the block editor in the corresponding context.
|
||||||
|
*
|
||||||
|
* @see https://developer.wordpress.org/reference/functions/register_block_type/
|
||||||
|
*/
|
||||||
|
function red_block_red_orbital_block_init() {
|
||||||
|
register_block_type( __DIR__ . '/build' );
|
||||||
|
}
|
||||||
|
add_action( 'init', 'red_block_red_orbital_block_init' );
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://schemas.wp.org/trunk/block.json",
|
||||||
|
"apiVersion": 2,
|
||||||
|
"name": "red-block/red-orbital",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"title": "Orbital",
|
||||||
|
"category": "widgets",
|
||||||
|
"icon": "smiley",
|
||||||
|
"description": "Red Orbital Block",
|
||||||
|
"supports": {
|
||||||
|
"html": false
|
||||||
|
},
|
||||||
|
"textdomain": "red-orbital",
|
||||||
|
"editorScript": "file:./index.js",
|
||||||
|
"editorStyle": "file:./index.css",
|
||||||
|
"style": "file:./style-index.css",
|
||||||
|
"attributes": {
|
||||||
|
"primaries": {
|
||||||
|
"type": "array",
|
||||||
|
"source": "query",
|
||||||
|
"selector": ".orbitals img",
|
||||||
|
"query": {
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"source": "attribute",
|
||||||
|
"attribute": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default": [
|
||||||
|
{ "url": "https://via.placeholder.com/64x64"},
|
||||||
|
{ "url": "https://via.placeholder.com/66x66"},
|
||||||
|
{ "url": "https://via.placeholder.com/68x68"},
|
||||||
|
{ "url": "https://via.placeholder.com/88x88"}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
import {useState} from "@wordpress/element";
|
||||||
|
import { __ } from "@wordpress/i18n";
|
||||||
|
import { useBlockProps, InspectorControls } from "@wordpress/block-editor";
|
||||||
|
import { __experimentalNumberControl as NumberControl } from '@wordpress/components';
|
||||||
|
|
||||||
|
import Orbital from "./orbital.js";
|
||||||
|
|
||||||
|
import "./editor.scss";
|
||||||
|
|
||||||
|
export default function Edit( { attributes, setAttributes }) {
|
||||||
|
const [discardedPrimaries, setDiscardedPrimaries] = useState([]);
|
||||||
|
const [count, setCount] = useState(attributes.primaries.length);
|
||||||
|
|
||||||
|
const onCountChange = (value) => {
|
||||||
|
if (value > attributes.primaries.length) {
|
||||||
|
const newPrimary = discardedPrimaries.length < 1 ?
|
||||||
|
{ url: "https://via.placeholder.com/64x64" } :
|
||||||
|
discardedPrimaries.pop();
|
||||||
|
const newPrimaries = attributes.primaries.concat([newPrimary]);
|
||||||
|
setAttributes({ primaries: newPrimaries });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value < attributes.primaries.length) {
|
||||||
|
const newPrimaries = attributes.primaries;
|
||||||
|
setDiscardedPrimaries(discardedPrimaries.concat([newPrimaries.pop()]));
|
||||||
|
setAttributes({ primaries: newPrimaries });
|
||||||
|
}
|
||||||
|
|
||||||
|
setCount(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
const primaryList = attributes.primaries.map((primary) => {
|
||||||
|
return (
|
||||||
|
<Orbital img={primary.url} />
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<InspectorControls>
|
||||||
|
<div>
|
||||||
|
<NumberControl
|
||||||
|
value={ count }
|
||||||
|
min={1}
|
||||||
|
onChange={ onCountChange }
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</InspectorControls>
|
||||||
|
<div {...useBlockProps()}>
|
||||||
|
|
||||||
|
<ul className="orbitals clockwise">
|
||||||
|
{primaryList}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div className="inner-content">
|
||||||
|
<div className="image-hover">
|
||||||
|
<img
|
||||||
|
className="img"
|
||||||
|
src="https://via.placeholder.com/256x256/999/333"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
className="img"
|
||||||
|
src="https://via.placeholder.com/256x256/666/ccc"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
/**
|
||||||
|
* The following styles get applied inside the editor only.
|
||||||
|
*
|
||||||
|
* Replace them with your own styles or remove the file completely.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.wp-block-red-block-red-orbital {
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* Registers a new block provided a unique name and an object defining its behavior.
|
||||||
|
*
|
||||||
|
* @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/
|
||||||
|
*/
|
||||||
|
import { registerBlockType } from '@wordpress/blocks';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
|
||||||
|
* All files containing `style` keyword are bundled together. The code used
|
||||||
|
* gets applied both to the front of your site and to the editor.
|
||||||
|
*
|
||||||
|
* @see https://www.npmjs.com/package/@wordpress/scripts#using-css
|
||||||
|
*/
|
||||||
|
import './style.scss';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal dependencies
|
||||||
|
*/
|
||||||
|
import Edit from './edit';
|
||||||
|
import save from './save';
|
||||||
|
import metadata from './block.json';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Every block starts by registering a new block type definition.
|
||||||
|
*
|
||||||
|
* @see https://developer.wordpress.org/block-editor/reference-guides/block-api/block-registration/
|
||||||
|
*/
|
||||||
|
registerBlockType( metadata.name, {
|
||||||
|
/**
|
||||||
|
* @see ./edit.js
|
||||||
|
*/
|
||||||
|
edit: Edit,
|
||||||
|
/**
|
||||||
|
* @see ./save.js
|
||||||
|
*/
|
||||||
|
save,
|
||||||
|
} );
|
|
@ -0,0 +1,16 @@
|
||||||
|
export default function Orbital({ img }) {
|
||||||
|
return (
|
||||||
|
<li className="orbital bg bg--red pulse">
|
||||||
|
<div className="orbital-content content-center anti-clockwise">
|
||||||
|
<div className="feature">
|
||||||
|
<div className="feature-item primary">
|
||||||
|
<img className="img" src={img} />
|
||||||
|
</div>
|
||||||
|
<div className="feature-item secondary">
|
||||||
|
<p>Hallo!</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/**
|
||||||
|
* Retrieves the translation of text.
|
||||||
|
*
|
||||||
|
* @see https://developer.wordpress.org/block-editor/packages/packages-i18n/
|
||||||
|
*/
|
||||||
|
import { __ } from "@wordpress/i18n";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* React hook that is used to mark the block wrapper element.
|
||||||
|
* It provides all the necessary props like the class name.
|
||||||
|
*
|
||||||
|
* @see https://developer.wordpress.org/block-editor/packages/packages-block-editor/#useBlockProps
|
||||||
|
*/
|
||||||
|
import { useBlockProps } from "@wordpress/block-editor";
|
||||||
|
import Orbital from "./orbital.js";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The save function defines the way in which the different attributes should
|
||||||
|
* be combined into the final markup, which is then serialized by the block
|
||||||
|
* editor into `post_content`.
|
||||||
|
*
|
||||||
|
* @see https://developer.wordpress.org/block-editor/developers/block-api/block-edit-save/#save
|
||||||
|
*
|
||||||
|
* @return {WPElement} Element to render.
|
||||||
|
*/
|
||||||
|
export default function save( {attributes} ) {
|
||||||
|
const blockProps = useBlockProps.save();
|
||||||
|
|
||||||
|
const primaryList = attributes.primaries.map((primary) => {
|
||||||
|
return (
|
||||||
|
<Orbital img={primary.url} />
|
||||||
|
)
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div {...blockProps}>
|
||||||
|
|
||||||
|
<ul className="orbitals clockwise">
|
||||||
|
{primaryList}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div className="inner-content">
|
||||||
|
<div className="image-hover">
|
||||||
|
<img
|
||||||
|
className="img"
|
||||||
|
src="https://via.placeholder.com/256x256/999/333"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
className="img"
|
||||||
|
src="https://via.placeholder.com/256x256/666/ccc"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,393 @@
|
||||||
|
/**
|
||||||
|
* The following styles get applied both on the front of your site
|
||||||
|
* and in the editor.
|
||||||
|
*
|
||||||
|
* Replace them with your own styles or remove the file completely.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.wp-block-red-block-red-orbital {
|
||||||
|
--count__orbitals: 8;
|
||||||
|
|
||||||
|
--width__inner-content: 11em;
|
||||||
|
--width__orbital: 7.5em;
|
||||||
|
|
||||||
|
--radius: 14em;
|
||||||
|
|
||||||
|
--duration__rotation: 50s;
|
||||||
|
--duration__pulse: 1.5s;
|
||||||
|
--duration__image-hover: 0.3s;
|
||||||
|
--duration__feature-hover: 0.3s;
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
width: 80vw;
|
||||||
|
height: 80vh;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
font-size: 1rem;
|
||||||
|
|
||||||
|
background-color: white;
|
||||||
|
|
||||||
|
background-color: #21759b;
|
||||||
|
|
||||||
|
ul,
|
||||||
|
li {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.orbitals {
|
||||||
|
position: relative;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.orbital {
|
||||||
|
position: absolute;
|
||||||
|
width: var(--width__orbital);
|
||||||
|
height: var(--width__orbital);
|
||||||
|
border-radius: 50%;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(
|
||||||
|
calc(-50% + var(--x-offset)),
|
||||||
|
calc(-50% - var(--y-offset))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
.orbital {
|
||||||
|
/* --angle must be in radians so multiply by 2 * pi */
|
||||||
|
--angle: calc(6.2831853036 * var(--index) / var(--count__orbitals));
|
||||||
|
|
||||||
|
/* thanks to https://gist.github.com/stereokai/7666bfe93929b14c2dced148c79e0e97 */
|
||||||
|
--sin-term1: var(--angle);
|
||||||
|
--sin-term2: calc((var(--angle) * var(--angle) * var(--angle)) / 6);
|
||||||
|
--sin-term3: calc(
|
||||||
|
(var(--angle) * var(--angle) * var(--angle) * var(--angle) * var(--angle)) /
|
||||||
|
120
|
||||||
|
);
|
||||||
|
--sin-term4: calc(
|
||||||
|
(
|
||||||
|
var(--angle) * var(--angle) * var(--angle) * var(--angle) *
|
||||||
|
var(--angle) * var(--angle) * var(--angle)
|
||||||
|
) / 5040
|
||||||
|
);
|
||||||
|
--sin-term5: calc(
|
||||||
|
(
|
||||||
|
var(--angle) * var(--angle) * var(--angle) * var(--angle) *
|
||||||
|
var(--angle) * var(--angle) * var(--angle) * var(--angle) *
|
||||||
|
var(--angle)
|
||||||
|
) / 362880
|
||||||
|
);
|
||||||
|
--sin: calc(
|
||||||
|
var(--sin-term1) - var(--sin-term2) + var(--sin-term3) - var(--sin-term4) +
|
||||||
|
var(--sin-term5)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* thanks to https://gist.github.com/stereokai/7666bfe93929b14c2dced148c79e0e97 */
|
||||||
|
--cos-term1: 1;
|
||||||
|
--cos-term2: calc((var(--angle) * var(--angle)) / 2);
|
||||||
|
--cos-term3: calc(
|
||||||
|
(var(--angle) * var(--angle) * var(--angle) * var(--angle)) / 24
|
||||||
|
);
|
||||||
|
--cos-term4: calc(
|
||||||
|
(
|
||||||
|
var(--angle) * var(--angle) * var(--angle) * var(--angle) *
|
||||||
|
var(--angle) * var(--angle)
|
||||||
|
) / 720
|
||||||
|
);
|
||||||
|
--cos-term5: calc(
|
||||||
|
(
|
||||||
|
var(--angle) * var(--angle) * var(--angle) * var(--angle) *
|
||||||
|
var(--angle) * var(--angle) * var(--angle) * var(--angle)
|
||||||
|
) / 40320
|
||||||
|
);
|
||||||
|
--cos: calc(
|
||||||
|
var(--cos-term1) - var(--cos-term2) + var(--cos-term3) - var(--cos-term4) +
|
||||||
|
var(--cos-term5)
|
||||||
|
);
|
||||||
|
|
||||||
|
--x-offset: calc(var(--radius) * var(--cos));
|
||||||
|
--y-offset: calc(var(--radius) * var(--sin));
|
||||||
|
|
||||||
|
&:nth-child(1) {
|
||||||
|
--index: 0;
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
--index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3) {
|
||||||
|
--index: -1;
|
||||||
|
}
|
||||||
|
&:nth-child(4) {
|
||||||
|
--index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(5) {
|
||||||
|
--index: -2;
|
||||||
|
}
|
||||||
|
&:nth-child(6) {
|
||||||
|
--index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(7) {
|
||||||
|
--index: -3;
|
||||||
|
}
|
||||||
|
&:nth-child(8) {
|
||||||
|
--index: 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(9) {
|
||||||
|
--index: -4;
|
||||||
|
}
|
||||||
|
&:nth-child(10) {
|
||||||
|
--index: 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(11) {
|
||||||
|
--index: -5;
|
||||||
|
}
|
||||||
|
&:nth-child(12) {
|
||||||
|
--index: 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.orbital-content {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.inner-content {
|
||||||
|
position: absolute;
|
||||||
|
width: var(--width__inner-content);
|
||||||
|
height: var(--width__inner-content);
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
|
||||||
|
border-radius: 3em;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-hover {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
& > .img {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
inset: 0;
|
||||||
|
object-fit: cover;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
transition: opacity var(--duration__image-hover);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover > .img {
|
||||||
|
&:last-child {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-center {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg {
|
||||||
|
&::before {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
border-radius: 50%;
|
||||||
|
|
||||||
|
transition: background-color var(--duration__feature-hover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg--red {
|
||||||
|
&::before {
|
||||||
|
background-color: rgba(255, 200, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover::before {
|
||||||
|
background-color: rgba(255, 150, 150);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg--green {
|
||||||
|
&::before {
|
||||||
|
background-color: rgba(200, 255, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover::before {
|
||||||
|
background-color: rgba(150, 255, 150);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg--blue {
|
||||||
|
&::before {
|
||||||
|
background-color: rgba(200, 200, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover::before {
|
||||||
|
background-color: rgba(150, 150, 255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
& > .feature-item {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
transition: opacity var(--duration__feature-hover);
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
& > .feature-item {
|
||||||
|
&:first-child {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.orbitals:hover {
|
||||||
|
&.clockwise,
|
||||||
|
& .anti-clockwise {
|
||||||
|
animation-play-state: paused;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.orbital.pulse:hover {
|
||||||
|
&::before {
|
||||||
|
animation-play-state: paused;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.clockwise {
|
||||||
|
animation: rotate var(--duration__rotation) linear infinite running;
|
||||||
|
}
|
||||||
|
|
||||||
|
.anti-clockwise {
|
||||||
|
animation: rotate var(--duration__rotation) reverse linear infinite running;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pulse {
|
||||||
|
&::before {
|
||||||
|
animation: pulse var(--duration__pulse) alternate ease-in-out infinite
|
||||||
|
running;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(2) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 2s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 0.4s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(4) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 1.5s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(5) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 0.7s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(6) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 0.2s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(7) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 1.1s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(8) {
|
||||||
|
&::before {
|
||||||
|
animation-delay: 0.4s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes rotate {
|
||||||
|
from {
|
||||||
|
transform: rotate(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
from {
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: scale(1.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body.wp-admin .wp-block-red-block-red-orbital {
|
||||||
|
.clockwise {
|
||||||
|
animation-play-state: paused;
|
||||||
|
}
|
||||||
|
|
||||||
|
.anti-clockwise {
|
||||||
|
animation-play-state: paused;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pulse {
|
||||||
|
&::before {
|
||||||
|
animation: rotate var(--duration__rotation) reverse linear infinite
|
||||||
|
running;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue