diff --git a/site/theme/static/index.less b/site/theme/static/index.less index 179d41cf31..bac04d6634 100644 --- a/site/theme/static/index.less +++ b/site/theme/static/index.less @@ -19,3 +19,4 @@ @import './motion'; @import './responsive'; @import './theme'; +@import './santa'; diff --git a/site/theme/static/santa.less b/site/theme/static/santa.less new file mode 100644 index 0000000000..fea01abe18 --- /dev/null +++ b/site/theme/static/santa.less @@ -0,0 +1,159 @@ +.santa { + display: inline-block; + vertical-align: middle; + margin-left: 8px; +} + +.santa-body { + font-size: 24px; + color: #f91047; + display: flex; + justify-content: center; + align-items: center; + width: 1em; + height: 1em; + background-color: currentColor; + box-shadow: inset 0 -0.25em rgba(0, 0, 0, 0.1); + border-radius: 50%; + transform-origin: center bottom; + animation: balance alternate infinite 2s ease-in-out; +} + +.santa-head { + font-size: 0.4em; + width: 1em; + height: 1.9em; + background-color: white; + border-radius: 0.5em; + transform: translateY(-1em); + position: relative; +} + +.santa-head::before { + content: ''; + width: 1em; + height: 0.375em; + display: block; + background-color: #ff9876; + position: absolute; + left: 0; + top: 0.65em; +} + +.santa-ear { + background-color: #fc8363; + width: 0.1em; + height: 0.3em; + position: absolute; + top: 0.75em; +} + +.santa-ear:nth-of-type(1) { + border-radius: 0.05em 0 0 0.05em; + left: -0.1em; +} + +.santa-ear:nth-of-type(2) { + border-radius: 0 0.05em 0.05em 0; + right: -0.1em; +} + +.santa-hat { + content: ''; + width: 1em; + height: 0.15em; + position: absolute; + transform: scale(1.1); + top: 0.5em; + left: 0; + background-color: white; +} + +.santa-hat::before { + content: ''; + display: block; + width: 1em; + height: 0.5em; + background: #f91047; + border-radius: 0.5em 0.5em 0 0; + z-index: 2; + position: absolute; + top: -0.5em; +} + +.santa-hat::after { + /* pompom */ + content: ''; + width: 0.25em; + height: 0.25em; + display: block; + background-color: white; + border-radius: 50%; + position: absolute; + z-index: 0; + top: -0.72em; + right: 0; + box-shadow: -0.2em 0.2em 0 0.12em rgba(0, 0, 0, 0.2), -0.2em 0.2em 0 0.12em #f91047; +} + +.santa-eye { + width: 0.12em; + height: 0.12em; + background-color: black; + border-radius: 50%; + position: absolute; + top: 0.76em; + left: 0.2em; +} + +.santa-eye + .santa-eye { + left: auto; + right: 0.2em; +} + +.santa-nose { + width: 0.12em; + height: 0.22em; + background-color: #f24c4c; + border-radius: 0 0 0.12em 0.12em; + position: absolute; + top: 0.84em; + left: 50%; + transform: translateX(-50%); +} + +.santa-mouth { + width: 0.18em; + height: 0.1em; + border-bottom-right-radius: 5vw; + border-bottom-left-radius: 5vw; + margin-top: 0.3em; + background-color: black; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + animation: hohoho 4s linear forwards infinite; +} + +@keyframes hohoho { + 0%, 10%, 20%, 40%, 100% { + /* smiling */ + width: 0.18em; + height: 0.1em; + border-bottom-right-radius: 1vw; + border-bottom-left-radius: 1vw; + } + + 5%, 15%, 25%, 35% { + /* hohoho */ + width: 0.15em; + height: 0.2em; + border-radius: 50%; + } +} + +@keyframes balance { + from { transform: rotate(-2deg); } + to { transform: rotate(2deg); } +} diff --git a/site/theme/template/Layout/Header.jsx b/site/theme/template/Layout/Header.jsx index a3c6483917..23c38f62a3 100644 --- a/site/theme/template/Layout/Header.jsx +++ b/site/theme/template/Layout/Header.jsx @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Link } from 'bisheng/router'; import { FormattedMessage } from 'react-intl'; import classNames from 'classnames'; -import { Select, Menu, Row, Col, Icon, Popover, AutoComplete, Input, Badge, Button } from 'antd'; +import { Select, Menu, Row, Col, Icon, Popover, AutoComplete, Input, Badge, Button, Tooltip } from 'antd'; import * as utils from '../utils'; import { version as antdVersion } from '../../../../package.json'; @@ -235,6 +235,21 @@ export default class Header extends React.Component { logo Ant Design + +
+
+
+
+
+
+
+
+
+
+
+
+
+