• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Радиальное меню

14 Сен 2020
85
-75
82
Радиальное меню

rd.gif


HTML:
<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>Кругового меню</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/open-iconic/1.1.1/font/css/open-iconic.min.css'><link rel="stylesheet" href="./style.css">

</head>
<body>

<div class="radial-menu">
  <ul class="radial-menu__menu-list">
    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="bold" title="Bold" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Bold
          </h6>
          <p class="radial-menu__menu-content-description">
            Make text bold
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="italic" title="Italic" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Italic
          </h6>
          <p class="radial-menu__menu-content-description">
            Make text italic
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="underline" title="Underline" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Underline
          </h6>
          <p class="radial-menu__menu-content-description">
            Underline text
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="align-left" title="Align left" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Text Alignment
          </h6>
          <p class="radial-menu__menu-content-description">
            Set text alignment
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="list-rich" title="Bulleted List" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Bulleted List
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a bulleted list
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="list" title="Numbered List" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Numbered List
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a numbered list
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="header" title="Heading" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Heading
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a heading
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="double-quote-serif-right" title="Blockquote" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Blockquote
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a blockquote
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="link-intact" title="Hyperlink" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Hyperlink
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a link to something
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="image" title="Image" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Image
          </h6>
          <p class="radial-menu__menu-content-description">
            Add an image
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="paperclip" title="Attach File" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Attach File
          </h6>
          <p class="radial-menu__menu-content-description">
            Attach a file
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="code" title="Code" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Code
          </h6>
          <p class="radial-menu__menu-content-description">
            Add some HTML
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="eyedropper" title="Font Color" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Font Color
          </h6>
          <p class="radial-menu__menu-content-description">
            Set font color
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="droplet" title="Highlight Color" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Highlight Color
          </h6>
          <p class="radial-menu__menu-content-description">
            Set font color
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="ellipses" title="More" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            More
          </h6>
          <p class="radial-menu__menu-content-description">
            Add more things
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>
  </ul>
  <div class="radial-menu__label">
    меню
  </div>
</div>



<div class="right-click-prompt">
  <p class="right-click-prompt__label">

  </p>
</div>

  <script  src="./script.js"></script>

</body>
</html>



JavaScript:
var container = document.querySelector('.radial-menu');

var menuDimensions = container.offsetWidth;

var menuItems = container.querySelectorAll('.radial-menu__menu-item');

var menuItemsCount = countMenuItems( menuItems );




function countMenuItems( elems ) {


  var elemsCount = elems.length;


  var elemCounter = 0;

  for (var i = 0; i < elemsCount; i++) {

    var elem = elems[i];


    var elemDisplay = elem.currentStyle ? elem.currentStyle.display : getComputedStyle(elem, null).display;


    if ( elemDisplay !== 'none' ) {


      elemCounter++;
    }
  }

  return elemCounter;
}




var links = document.querySelectorAll('.radial-menu__menu-link');

setupLinks( links );
setupLinkHovers( links );




var linkBGs = document.querySelectorAll('.radial-menu__menu-link-bg');

setupLinks( linkBGs );




function setupLinks( elems ) {


  var elemsCount = elems.length;


  var menuItems = container.querySelectorAll('.radial-menu__menu-item');


  var menuItemsCount = countMenuItems( menuItems );



  var degreeInterval = 360 / menuItemsCount;


  for (var i = 0; i < elemsCount; i++) {
  
    var elem = elems[i];

    var parentMenuItem = elem.parentElement;


    var parentMenuItemDisplay = parentMenuItem.currentStyle ? parentMenuItem.currentStyle.display : getComputedStyle(parentMenuItem, null).display;

    if ( parentMenuItemDisplay !== 'none' ) {
      var phase = i / menuItemsCount; 
    

      var theta = phase * 2 * Math.PI;

    
      var cssTransform = 'translateY(-50%) translateZ(0) rotateZ(' + degreeInterval*i  + 'deg) perspective(' + menuDimensions/1.5 + 'px)';

      var transformString = getLinkTransforms( menuItemsCount );
    

      cssTransform += transformString;
    

    
      elem.style.transform = cssTransform;
    }
  }
}




function setupLinkHovers( elems ) {


  var elemsCount = elems.length;


  for (var i = 0; i < elemsCount; i++) {
  
    var elem = elems[i];
    var parentMenuItem  = elem.parentElement;


    var parentMenuItemDisplay = elem.currentStyle ? elem.currentStyle.display : getComputedStyle(elem, null).display;


    if ( parentMenuItemDisplay !== 'none' ) {
      elem.addEventListener('mouseenter', function( event ) {
        var parentMenuItem = this.parentElement;
        parentMenuItem.classList.add('hovered');
        container.classList.add('item-is-hovered');
      });

      elem.addEventListener('mouseleave', function( event ) {
        var parentMenuItem = this.parentElement;
        parentMenuItem.classList.remove('hovered');
        container.classList.remove('item-is-hovered');
      });
    }
  }
}



function getLinkTransforms( count ) {

  var transformString;

  switch (count) {
    case 3:
      transformString = 'rotateY(-88.012deg) scaleX(1.45)';
      break;

    case 4:
      transformString = 'rotateY(-86.45deg) scaleX(1.425)';
      break;

    case 5:
      transformString = 'rotateY(-85.025deg) scaleX(1.39)';
      break;

    case 6:
      transformString = 'rotateY(-83.65deg) scaleX(1.36)';
      break;

    case 7:
      transformString = 'rotateY(-82.1deg) scaleX(1.325)';
      break;

    case 8:
      transformString = 'rotateY(-80.8deg) scaleX(1.3)';
      break;

    case 9:
      transformString = 'rotateY(-79deg) scaleX(1.265)';
      break;

    case 10:
      transformString = 'rotateY(-77.3deg) scaleX(1.23)';
      break;

    case 11:
      transformString = 'rotateY(-76deg) scaleX(1.21)';
      break;

    case 12:
      transformString = 'rotateY(-74.75deg) scaleX(1.185)';
      break;

    case 13:
      transformString = 'rotateY(-72.1deg) scaleX(1.14)';
      break;

    case 14:
      transformString = 'rotateY(-69.8deg) scaleX(1.11)';
      break;

    case 15:
      transformString = 'rotateY(-67.7deg) scaleX(1.086)';
      break;
  }

  return transformString;
}




var icons = document.querySelectorAll('.radial-menu__menu-icon');
var iconDistance = 95;

positionIcons( icons, iconDistance );

function positionIcons( icons, iconDistance ) {

  var menuItems = container.querySelectorAll('.radial-menu__menu-item');


  var menuItemsCount = countMenuItems( menuItems );


  var iconsCount = icons.length;
  var iconOffset = 1.575;


  for (var i = 0; i < iconsCount; i++) {
    var icon = icons[i];

    var parentMenuItem = icon.parentElement;

  
    var parentMenuItemDisplay = parentMenuItem.currentStyle ? parentMenuItem.currentStyle.display : getComputedStyle(parentMenuItem, null).display;


    if ( parentMenuItemDisplay !== 'none' ) {

      var phase = i / menuItemsCount;


      var theta = phase * 2 * Math.PI;
      theta = theta + iconOffset;


      icon.style.top = (-iconDistance * Math.cos(theta)).toFixed(1) + 'px';
      icon.style.left = (iconDistance * Math.sin(theta)).toFixed(1) + 'px';
    }
  }
}




document.addEventListener('contextmenu', function(e) {
  e.preventDefault();
  var mousePosX = e.clientX;
  var mousePosY = e.clientY;


  container.classList.remove('is-hidden');
  container.classList.add('is-active');

  container.style.top = mousePosY + 'px';
  container.style.left = mousePosX + 'px';

  mouseMoveListener( mousePosX, mousePosY );

  return false;
}, false);




document.addEventListener('mouseup', function(e) {

  var mouseButton = e.button;


  if ( mouseButton == 2 ) {


    container.classList.add('is-hidden');
    container.classList.remove('is-active');
  }
});




function mouseMoveListener(x, y) {
  document.addEventListener('mousemove', function(e) {


    if ( container.classList.contains('is-active') ) {

      var newX = e.clientX;
      var newY = e.clientY;

      var scale = Math.round(Math.sqrt(Math.pow(y - newY, 2) + Math.pow(x - newX, 2)));



      scale = scale * 0.01;
    
    }
  });
}




onMenuItemsDropdownChange();

function onMenuItemsDropdownChange() {


  var menuItemsSelect = document.getElementById('menu-items-to-show');


  menuItemsSelect.addEventListener('change', function(e){


    var optionValue = this.value;


    updateMenuItemDisplayValues( optionValue );
  });
}




function updateMenuItemDisplayValues( itemsToShow ) {

  var menuItems = container.querySelectorAll('.radial-menu__menu-item');

  for (var i = 0; i < menuItems.length; i++) {
    if ( i < itemsToShow ) {
      menuItems[i].style.display = 'block';
    } else {
      menuItems[i].style.display = 'none';
    }
  }


  var links = document.querySelectorAll('.radial-menu__menu-link');
  setupLinks( links );
  setupLinkHovers( links );


  var linkBGs = document.querySelectorAll('.radial-menu__menu-link-bg');
  setupLinks( linkBGs );


  var icons = document.querySelectorAll('.radial-menu__menu-icon');
  var iconDistance = 95;

  positionIcons( icons, iconDistance );
}

CSS:
*, *:before, *:after {
  box-sizing: border-box;
}

html,
body {
  font-family: sans-serif;
  height: 100%;
  width: 100%;
}

.radial-menu {
  background: #c1ced9;
  border: 0 solid transparent;
  border-radius: 50%;
  box-shadow: 0 25px 50px rgba(0, 0, 0, 0.05);
  height: 300px;
  left: 50%;
  opacity: 1;
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%) scale(1);
  transition: opacity 0.1s ease, background 0.1s ease;
  width: 300px;
}
.radial-menu.is-hidden {
  -webkit-animation-name: scale-down;
          animation-name: scale-down;
  -webkit-animation-duration: 0.2s;
          animation-duration: 0.2s;
  -webkit-animation-delay: 0;
          animation-delay: 0;
  -webkit-animation-iteration-count: 1;
          animation-iteration-count: 1;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
  /* this prevents the animation from restarting! */
  -webkit-animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
          animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
  transform: translate(-50%, -50%) scale(0) !important;
  opacity: 0;
}
.radial-menu.is-active {
  -webkit-animation-name: scale-up;
          animation-name: scale-up;
  -webkit-animation-duration: 0.2s;
          animation-duration: 0.2s;
  -webkit-animation-delay: 0;
          animation-delay: 0;
  -webkit-animation-iteration-count: 1;
          animation-iteration-count: 1;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
  /* this prevents the animation from restarting! */
  -webkit-animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
          animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
  opacity: 1;
  transform: translate(-50%, -50%) scale(1);
}
.radial-menu.item-is-hovered {
  background-color: #6d9bc5;
  border-color: transparent;
  border-width: 0;
}

@-webkit-keyframes scale-up {
  0% {
    transform: translate(-50%, -50%) scale(0);
  }
  100% {
    transform: translateX(-50%, -50%) scale(1);
  }
}

@keyframes scale-up {
  0% {
    transform: translate(-50%, -50%) scale(0);
  }
  100% {
    transform: translateX(-50%, -50%) scale(1);
  }
}
@-webkit-keyframes scale-down {
  0% {
    transform: translate(-50%, -50%) scale(1);
  }
  100% {
    transform: translateX(-50%, -50%) scale(0);
  }
}
@keyframes scale-down {
  0% {
    transform: translate(-50%, -50%) scale(1);
  }
  100% {
    transform: translateX(-50%, -50%) scale(0);
  }
}
.radial-menu__label {
  background-color: #e7ecf1;
  border: 3px solid #ced8e1;
  border-radius: 50%;
  color: #c1ced9;
  cursor: default;
  font-size: 12px;
  font-weight: bold;
  height: 80px;
  left: 50%;
  letter-spacing: 0.1em;
  line-height: 74px;
  position: absolute;
  text-align: center;
  text-transform: uppercase;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 80px;
  z-index: 4;
}

.radial-menu__menu-content {
  background-color: #e7ecf1;
  border: 3px solid #ced8e1;
  border-radius: 50%;
  height: 80px;
  left: 50%;
  position: absolute;
  text-align: center;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 80px;
  z-index: 1;
}

.radial-menu__menu-item.hovered .radial-menu__menu-content {
  background-color: #578cbc;
  border-color: #578cbc;
  transform: translate(-50%, -50%);
  z-index: 4;
}

.radial-menu__menu-content-wrapper {
  padding-left: 10px;
  padding-right: 10px;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 100%;
}

.radial-menu__menu-content-title {
  color: #fff;
  font-size: 0.7em;
  font-weight: bold;
  line-height: 1.3;
}

.radial-menu__menu-content-description {
  color: rgba(255, 255, 255, 0.5);
  display: none;
  font-size: 0.4em;
  font-weight: normal;
  letter-spacing: 0.1em;
  line-height: 1.3;
  text-transform: uppercase;
}

.radial-menu__menu-icon {
  background-color: transparent;
  height: 25px;
  left: 0;
  position: absolute;
  text-align: center;
  top: 0;
  transform: translateY(-50%) translateX(-50%);
  width: 25px;
  z-index: 2;
}
.radial-menu__menu-icon .oi {
  color: #8ea6bb;
  font-size: 16px;
  line-height: 25px;
  transition: font-size 0.3s cubic-bezier(0.25, 0.25, 0.25, 1.5), color 0.1s ease;
}

.radial-menu.item-is-hovered .radial-menu__menu-icon {
  background-color: transparent;
}
.radial-menu.item-is-hovered .radial-menu__menu-icon .oi {
  color: #a8baca;
}

.radial-menu.item-is-hovered .radial-menu__menu-item.hovered .radial-menu__menu-icon {
  background-color: transparent;
  height: 50px;
  width: 50px;
}
.radial-menu.item-is-hovered .radial-menu__menu-item.hovered .radial-menu__menu-icon .oi {
  color: #fff;
  font-size: 21px;
  line-height: 50px;
}

.radial-menu__menu-list {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

.radial-menu__menu-item {
  display: block;
  left: 50%;
  position: absolute;
  top: 50%;
  z-index: 1;
}
.radial-menu__menu-item.hovered {
  z-index: 10;
}

.radial-menu__menu-link,
.radial-menu__menu-link-bg {
  height: 22px;
  padding: 5px 20px;
  position: absolute;
  transform: translateY(-50%) perspective(200px) rotateY(-77.5deg) scaleX(1.25);
  transform-origin: 0;
  transform-style: preserve-3d;
  width: 125px;
}

.radial-menu__menu-link {
  border-bottom: 1px solid transparent;
  border-top: 1px solid transparent;
  display: block;
  z-index: 3;
}

.radial-menu__menu-link-bg {
  background-color: #dae2e9;
  border-bottom: 1px solid #d4dde5;
  border-top: 1px solid #d4dde5;
  font-size: 12px;
  text-decoration: none;
  text-transform: uppercase;
  transition: background 0.1s ease;
  z-index: 1;
}
.radial-menu__menu-link-bg:after {
  background: #c1ced9;
  content: "";
  display: none;
  height: 106%;
  right: -1px;
  position: absolute;
  top: 0;
  transition: all 0.1s ease;
  transform: translateY(-3%);
  width: 2px;
}

.radial-menu__menu-item.hovered .radial-menu__menu-link-bg {
  background-color: #6d9bc5;
  border: 0;
}
.radial-menu__menu-item.hovered .radial-menu__menu-link-bg:after {
  background: #6d9bc5;
  height: 106%;
  transform: translateY(-3%);
  width: 0;
}

.menu-items-select {
  bottom: 0;
  right: 0;
  margin: 0 auto;
  padding: 40px;
  position: absolute;
}

.menu-items-select__label {
  color: #c1ced9;
  display: block;
  font-size: 0.7em;
  font-weight: bold;
  letter-spacing: 0.05em;
  margin-bottom: 10px;
  text-transform: uppercase;
}

.menu-items-select__select {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  background-color: #e7ecf1;
  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjYmU2ZGJmMC0zMWRkLTQyN2EtYjIyYi02YjExMGU5ZDVmODciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REM2MzE0REVCNjkzMTFFNkIxODVBOTBFNDM1NDFDOEUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REM2MzE0RERCNjkzMTFFNkIxODVBOTBFNDM1NDFDOEUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmI4YTU2Zjg5LTM0MzAtNDcxNS1iOGQyLWQ5NWM4NzdmYmIyOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjYmU2ZGJmMC0zMWRkLTQyN2EtYjIyYi02YjExMGU5ZDVmODciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4RdGokAAAAf0lEQVR42mL8//8/AzUBEwOVwaiBlAMWbIKMjIxEG4CeSujq5fkgB+DBC3E6GR1DARcQX8Zh2HUg5samH5+BIKABxF/QDPsKxLq4HETIQBCIQTMwFZ8PiTEQBGZBDVtKKMiINZATiFcCMS8hAxmxGUBJOmQhRtFo4UBfAwECDADAD7B6p+ae7AAAAABJRU5ErkJggg==");
  background-position: 97.5% 50%;
  background-repeat: no-repeat;
  border: 2px solid #d4dde5;
  border-radius: 0;
  display: block;
  font-family: sans-serif;
  font-size: 0.9em;
  font-weight: bold;
  height: 40px;
  padding: 5px 10px;
  width: 100px;
}

.right-click-prompt {
  bottom: 0;
  color: #c1ced9;
  font-size: 0.7em;
  font-weight: bold;
  left: 50%;
  letter-spacing: 0.05em;
  padding: 40px;
  position: absolute;
  text-transform: uppercase;
  transform: translateX(-50%);
}

@media (max-height: 430px) {
  .right-click-prompt {
    left: 0;
    transform: translateX(0);
  }
}

взято с сайта codepen.io автор: Glenn McComb
 

Вложения

  • rd.gif
    rd.gif
    897.1 KB · Просмотры: 30
Реакции: Dmitry_V и NΞITHΞR#0001

NΞITHΞR#0001

Начинающий специалист
2 Сен 2021
264
66
92
Радиальное меню



HTML:
<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>Кругового меню</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/open-iconic/1.1.1/font/css/open-iconic.min.css'><link rel="stylesheet" href="./style.css">

</head>
<body>

<div class="radial-menu">
  <ul class="radial-menu__menu-list">
    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="bold" title="Bold" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Bold
          </h6>
          <p class="radial-menu__menu-content-description">
            Make text bold
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="italic" title="Italic" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Italic
          </h6>
          <p class="radial-menu__menu-content-description">
            Make text italic
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="underline" title="Underline" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Underline
          </h6>
          <p class="radial-menu__menu-content-description">
            Underline text
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="align-left" title="Align left" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Text Alignment
          </h6>
          <p class="radial-menu__menu-content-description">
            Set text alignment
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="list-rich" title="Bulleted List" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Bulleted List
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a bulleted list
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="list" title="Numbered List" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Numbered List
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a numbered list
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="header" title="Heading" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Heading
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a heading
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="double-quote-serif-right" title="Blockquote" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Blockquote
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a blockquote
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="link-intact" title="Hyperlink" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Hyperlink
          </h6>
          <p class="radial-menu__menu-content-description">
            Add a link to something
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="image" title="Image" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Image
          </h6>
          <p class="radial-menu__menu-content-description">
            Add an image
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="paperclip" title="Attach File" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Attach File
          </h6>
          <p class="radial-menu__menu-content-description">
            Attach a file
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="code" title="Code" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Code
          </h6>
          <p class="radial-menu__menu-content-description">
            Add some HTML
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="eyedropper" title="Font Color" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Font Color
          </h6>
          <p class="radial-menu__menu-content-description">
            Set font color
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="droplet" title="Highlight Color" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            Highlight Color
          </h6>
          <p class="radial-menu__menu-content-description">
            Set font color
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>

    <li class="radial-menu__menu-item" style="display: none;">
      <div class="radial-menu__menu-link-bg"></div>
      <div class="radial-menu__menu-icon">
        <span class="oi" data-glyph="ellipses" title="More" aria-hidden="true"></span>
      </div>
      <div class="radial-menu__menu-content">
        <div class="radial-menu__menu-content-wrapper">
          <h6 class="radial-menu__menu-content-title">
            More
          </h6>
          <p class="radial-menu__menu-content-description">
            Add more things
          </p>
        </div>
      </div>
      <a href="javascript:void(0);" class="radial-menu__menu-link"></a>
    </li>
  </ul>
  <div class="radial-menu__label">
    меню
  </div>
</div>



<div class="right-click-prompt">
  <p class="right-click-prompt__label">

  </p>
</div>

  <script  src="./script.js"></script>

</body>
</html>



JavaScript:
var container = document.querySelector('.radial-menu');

var menuDimensions = container.offsetWidth;

var menuItems = container.querySelectorAll('.radial-menu__menu-item');

var menuItemsCount = countMenuItems( menuItems );




function countMenuItems( elems ) {


  var elemsCount = elems.length;


  var elemCounter = 0;

  for (var i = 0; i < elemsCount; i++) {

    var elem = elems[i];


    var elemDisplay = elem.currentStyle ? elem.currentStyle.display : getComputedStyle(elem, null).display;


    if ( elemDisplay !== 'none' ) {


      elemCounter++;
    }
  }

  return elemCounter;
}




var links = document.querySelectorAll('.radial-menu__menu-link');

setupLinks( links );
setupLinkHovers( links );




var linkBGs = document.querySelectorAll('.radial-menu__menu-link-bg');

setupLinks( linkBGs );




function setupLinks( elems ) {


  var elemsCount = elems.length;


  var menuItems = container.querySelectorAll('.radial-menu__menu-item');


  var menuItemsCount = countMenuItems( menuItems );



  var degreeInterval = 360 / menuItemsCount;


  for (var i = 0; i < elemsCount; i++) {
  
    var elem = elems[i];

    var parentMenuItem = elem.parentElement;


    var parentMenuItemDisplay = parentMenuItem.currentStyle ? parentMenuItem.currentStyle.display : getComputedStyle(parentMenuItem, null).display;

    if ( parentMenuItemDisplay !== 'none' ) {
      var phase = i / menuItemsCount; 
    

      var theta = phase * 2 * Math.PI;

    
      var cssTransform = 'translateY(-50%) translateZ(0) rotateZ(' + degreeInterval*i  + 'deg) perspective(' + menuDimensions/1.5 + 'px)';

      var transformString = getLinkTransforms( menuItemsCount );
    

      cssTransform += transformString;
    

    
      elem.style.transform = cssTransform;
    }
  }
}




function setupLinkHovers( elems ) {


  var elemsCount = elems.length;


  for (var i = 0; i < elemsCount; i++) {
  
    var elem = elems[i];
    var parentMenuItem  = elem.parentElement;


    var parentMenuItemDisplay = elem.currentStyle ? elem.currentStyle.display : getComputedStyle(elem, null).display;


    if ( parentMenuItemDisplay !== 'none' ) {
      elem.addEventListener('mouseenter', function( event ) {
        var parentMenuItem = this.parentElement;
        parentMenuItem.classList.add('hovered');
        container.classList.add('item-is-hovered');
      });

      elem.addEventListener('mouseleave', function( event ) {
        var parentMenuItem = this.parentElement;
        parentMenuItem.classList.remove('hovered');
        container.classList.remove('item-is-hovered');
      });
    }
  }
}



function getLinkTransforms( count ) {

  var transformString;

  switch (count) {
    case 3:
      transformString = 'rotateY(-88.012deg) scaleX(1.45)';
      break;

    case 4:
      transformString = 'rotateY(-86.45deg) scaleX(1.425)';
      break;

    case 5:
      transformString = 'rotateY(-85.025deg) scaleX(1.39)';
      break;

    case 6:
      transformString = 'rotateY(-83.65deg) scaleX(1.36)';
      break;

    case 7:
      transformString = 'rotateY(-82.1deg) scaleX(1.325)';
      break;

    case 8:
      transformString = 'rotateY(-80.8deg) scaleX(1.3)';
      break;

    case 9:
      transformString = 'rotateY(-79deg) scaleX(1.265)';
      break;

    case 10:
      transformString = 'rotateY(-77.3deg) scaleX(1.23)';
      break;

    case 11:
      transformString = 'rotateY(-76deg) scaleX(1.21)';
      break;

    case 12:
      transformString = 'rotateY(-74.75deg) scaleX(1.185)';
      break;

    case 13:
      transformString = 'rotateY(-72.1deg) scaleX(1.14)';
      break;

    case 14:
      transformString = 'rotateY(-69.8deg) scaleX(1.11)';
      break;

    case 15:
      transformString = 'rotateY(-67.7deg) scaleX(1.086)';
      break;
  }

  return transformString;
}




var icons = document.querySelectorAll('.radial-menu__menu-icon');
var iconDistance = 95;

positionIcons( icons, iconDistance );

function positionIcons( icons, iconDistance ) {

  var menuItems = container.querySelectorAll('.radial-menu__menu-item');


  var menuItemsCount = countMenuItems( menuItems );


  var iconsCount = icons.length;
  var iconOffset = 1.575;


  for (var i = 0; i < iconsCount; i++) {
    var icon = icons[i];

    var parentMenuItem = icon.parentElement;

  
    var parentMenuItemDisplay = parentMenuItem.currentStyle ? parentMenuItem.currentStyle.display : getComputedStyle(parentMenuItem, null).display;


    if ( parentMenuItemDisplay !== 'none' ) {

      var phase = i / menuItemsCount;


      var theta = phase * 2 * Math.PI;
      theta = theta + iconOffset;


      icon.style.top = (-iconDistance * Math.cos(theta)).toFixed(1) + 'px';
      icon.style.left = (iconDistance * Math.sin(theta)).toFixed(1) + 'px';
    }
  }
}




document.addEventListener('contextmenu', function(e) {
  e.preventDefault();
  var mousePosX = e.clientX;
  var mousePosY = e.clientY;


  container.classList.remove('is-hidden');
  container.classList.add('is-active');

  container.style.top = mousePosY + 'px';
  container.style.left = mousePosX + 'px';

  mouseMoveListener( mousePosX, mousePosY );

  return false;
}, false);




document.addEventListener('mouseup', function(e) {

  var mouseButton = e.button;


  if ( mouseButton == 2 ) {


    container.classList.add('is-hidden');
    container.classList.remove('is-active');
  }
});




function mouseMoveListener(x, y) {
  document.addEventListener('mousemove', function(e) {


    if ( container.classList.contains('is-active') ) {

      var newX = e.clientX;
      var newY = e.clientY;

      var scale = Math.round(Math.sqrt(Math.pow(y - newY, 2) + Math.pow(x - newX, 2)));



      scale = scale * 0.01;
    
    }
  });
}




onMenuItemsDropdownChange();

function onMenuItemsDropdownChange() {


  var menuItemsSelect = document.getElementById('menu-items-to-show');


  menuItemsSelect.addEventListener('change', function(e){


    var optionValue = this.value;


    updateMenuItemDisplayValues( optionValue );
  });
}




function updateMenuItemDisplayValues( itemsToShow ) {

  var menuItems = container.querySelectorAll('.radial-menu__menu-item');

  for (var i = 0; i < menuItems.length; i++) {
    if ( i < itemsToShow ) {
      menuItems[i].style.display = 'block';
    } else {
      menuItems[i].style.display = 'none';
    }
  }


  var links = document.querySelectorAll('.radial-menu__menu-link');
  setupLinks( links );
  setupLinkHovers( links );


  var linkBGs = document.querySelectorAll('.radial-menu__menu-link-bg');
  setupLinks( linkBGs );


  var icons = document.querySelectorAll('.radial-menu__menu-icon');
  var iconDistance = 95;

  positionIcons( icons, iconDistance );
}

CSS:
*, *:before, *:after {
  box-sizing: border-box;
}

html,
body {
  font-family: sans-serif;
  height: 100%;
  width: 100%;
}

.radial-menu {
  background: #c1ced9;
  border: 0 solid transparent;
  border-radius: 50%;
  box-shadow: 0 25px 50px rgba(0, 0, 0, 0.05);
  height: 300px;
  left: 50%;
  opacity: 1;
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%) scale(1);
  transition: opacity 0.1s ease, background 0.1s ease;
  width: 300px;
}
.radial-menu.is-hidden {
  -webkit-animation-name: scale-down;
          animation-name: scale-down;
  -webkit-animation-duration: 0.2s;
          animation-duration: 0.2s;
  -webkit-animation-delay: 0;
          animation-delay: 0;
  -webkit-animation-iteration-count: 1;
          animation-iteration-count: 1;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
  /* this prevents the animation from restarting! */
  -webkit-animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
          animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
  transform: translate(-50%, -50%) scale(0) !important;
  opacity: 0;
}
.radial-menu.is-active {
  -webkit-animation-name: scale-up;
          animation-name: scale-up;
  -webkit-animation-duration: 0.2s;
          animation-duration: 0.2s;
  -webkit-animation-delay: 0;
          animation-delay: 0;
  -webkit-animation-iteration-count: 1;
          animation-iteration-count: 1;
  -webkit-animation-fill-mode: forwards;
          animation-fill-mode: forwards;
  /* this prevents the animation from restarting! */
  -webkit-animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
          animation-timing-function: cubic-bezier(0.25, 0.25, 0.25, 1.25);
  opacity: 1;
  transform: translate(-50%, -50%) scale(1);
}
.radial-menu.item-is-hovered {
  background-color: #6d9bc5;
  border-color: transparent;
  border-width: 0;
}

@-webkit-keyframes scale-up {
  0% {
    transform: translate(-50%, -50%) scale(0);
  }
  100% {
    transform: translateX(-50%, -50%) scale(1);
  }
}

@keyframes scale-up {
  0% {
    transform: translate(-50%, -50%) scale(0);
  }
  100% {
    transform: translateX(-50%, -50%) scale(1);
  }
}
@-webkit-keyframes scale-down {
  0% {
    transform: translate(-50%, -50%) scale(1);
  }
  100% {
    transform: translateX(-50%, -50%) scale(0);
  }
}
@keyframes scale-down {
  0% {
    transform: translate(-50%, -50%) scale(1);
  }
  100% {
    transform: translateX(-50%, -50%) scale(0);
  }
}
.radial-menu__label {
  background-color: #e7ecf1;
  border: 3px solid #ced8e1;
  border-radius: 50%;
  color: #c1ced9;
  cursor: default;
  font-size: 12px;
  font-weight: bold;
  height: 80px;
  left: 50%;
  letter-spacing: 0.1em;
  line-height: 74px;
  position: absolute;
  text-align: center;
  text-transform: uppercase;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 80px;
  z-index: 4;
}

.radial-menu__menu-content {
  background-color: #e7ecf1;
  border: 3px solid #ced8e1;
  border-radius: 50%;
  height: 80px;
  left: 50%;
  position: absolute;
  text-align: center;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 80px;
  z-index: 1;
}

.radial-menu__menu-item.hovered .radial-menu__menu-content {
  background-color: #578cbc;
  border-color: #578cbc;
  transform: translate(-50%, -50%);
  z-index: 4;
}

.radial-menu__menu-content-wrapper {
  padding-left: 10px;
  padding-right: 10px;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 100%;
}

.radial-menu__menu-content-title {
  color: #fff;
  font-size: 0.7em;
  font-weight: bold;
  line-height: 1.3;
}

.radial-menu__menu-content-description {
  color: rgba(255, 255, 255, 0.5);
  display: none;
  font-size: 0.4em;
  font-weight: normal;
  letter-spacing: 0.1em;
  line-height: 1.3;
  text-transform: uppercase;
}

.radial-menu__menu-icon {
  background-color: transparent;
  height: 25px;
  left: 0;
  position: absolute;
  text-align: center;
  top: 0;
  transform: translateY(-50%) translateX(-50%);
  width: 25px;
  z-index: 2;
}
.radial-menu__menu-icon .oi {
  color: #8ea6bb;
  font-size: 16px;
  line-height: 25px;
  transition: font-size 0.3s cubic-bezier(0.25, 0.25, 0.25, 1.5), color 0.1s ease;
}

.radial-menu.item-is-hovered .radial-menu__menu-icon {
  background-color: transparent;
}
.radial-menu.item-is-hovered .radial-menu__menu-icon .oi {
  color: #a8baca;
}

.radial-menu.item-is-hovered .radial-menu__menu-item.hovered .radial-menu__menu-icon {
  background-color: transparent;
  height: 50px;
  width: 50px;
}
.radial-menu.item-is-hovered .radial-menu__menu-item.hovered .radial-menu__menu-icon .oi {
  color: #fff;
  font-size: 21px;
  line-height: 50px;
}

.radial-menu__menu-list {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

.radial-menu__menu-item {
  display: block;
  left: 50%;
  position: absolute;
  top: 50%;
  z-index: 1;
}
.radial-menu__menu-item.hovered {
  z-index: 10;
}

.radial-menu__menu-link,
.radial-menu__menu-link-bg {
  height: 22px;
  padding: 5px 20px;
  position: absolute;
  transform: translateY(-50%) perspective(200px) rotateY(-77.5deg) scaleX(1.25);
  transform-origin: 0;
  transform-style: preserve-3d;
  width: 125px;
}

.radial-menu__menu-link {
  border-bottom: 1px solid transparent;
  border-top: 1px solid transparent;
  display: block;
  z-index: 3;
}

.radial-menu__menu-link-bg {
  background-color: #dae2e9;
  border-bottom: 1px solid #d4dde5;
  border-top: 1px solid #d4dde5;
  font-size: 12px;
  text-decoration: none;
  text-transform: uppercase;
  transition: background 0.1s ease;
  z-index: 1;
}
.radial-menu__menu-link-bg:after {
  background: #c1ced9;
  content: "";
  display: none;
  height: 106%;
  right: -1px;
  position: absolute;
  top: 0;
  transition: all 0.1s ease;
  transform: translateY(-3%);
  width: 2px;
}

.radial-menu__menu-item.hovered .radial-menu__menu-link-bg {
  background-color: #6d9bc5;
  border: 0;
}
.radial-menu__menu-item.hovered .radial-menu__menu-link-bg:after {
  background: #6d9bc5;
  height: 106%;
  transform: translateY(-3%);
  width: 0;
}

.menu-items-select {
  bottom: 0;
  right: 0;
  margin: 0 auto;
  padding: 40px;
  position: absolute;
}

.menu-items-select__label {
  color: #c1ced9;
  display: block;
  font-size: 0.7em;
  font-weight: bold;
  letter-spacing: 0.05em;
  margin-bottom: 10px;
  text-transform: uppercase;
}

.menu-items-select__select {
  -webkit-appearance: none;
     -moz-appearance: none;
          appearance: none;
  background-color: #e7ecf1;
  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjYmU2ZGJmMC0zMWRkLTQyN2EtYjIyYi02YjExMGU5ZDVmODciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REM2MzE0REVCNjkzMTFFNkIxODVBOTBFNDM1NDFDOEUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REM2MzE0RERCNjkzMTFFNkIxODVBOTBFNDM1NDFDOEUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoTWFjaW50b3NoKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmI4YTU2Zjg5LTM0MzAtNDcxNS1iOGQyLWQ5NWM4NzdmYmIyOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpjYmU2ZGJmMC0zMWRkLTQyN2EtYjIyYi02YjExMGU5ZDVmODciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4RdGokAAAAf0lEQVR42mL8//8/AzUBEwOVwaiBlAMWbIKMjIxEG4CeSujq5fkgB+DBC3E6GR1DARcQX8Zh2HUg5samH5+BIKABxF/QDPsKxLq4HETIQBCIQTMwFZ8PiTEQBGZBDVtKKMiINZATiFcCMS8hAxmxGUBJOmQhRtFo4UBfAwECDADAD7B6p+ae7AAAAABJRU5ErkJggg==");
  background-position: 97.5% 50%;
  background-repeat: no-repeat;
  border: 2px solid #d4dde5;
  border-radius: 0;
  display: block;
  font-family: sans-serif;
  font-size: 0.9em;
  font-weight: bold;
  height: 40px;
  padding: 5px 10px;
  width: 100px;
}

.right-click-prompt {
  bottom: 0;
  color: #c1ced9;
  font-size: 0.7em;
  font-weight: bold;
  left: 50%;
  letter-spacing: 0.05em;
  padding: 40px;
  position: absolute;
  text-transform: uppercase;
  transform: translateX(-50%);
}

@media (max-height: 430px) {
  .right-click-prompt {
    left: 0;
    transform: translateX(0);
  }
}
[/SPOILER]

взято с сайта codepen.io автор: Glenn McComb
Зачем эти темы? Для тех кому нужно будут, они и так пойдут на codepen где миллионы примеров любого кода
 
14 Сен 2020
85
-75
82
Реакции: enotit

Mi-Zaft

Гений
VIP
9 Окт 2020
1,509
384
175

enotit

Гений
high coder
13 Ноя 2020
1,189
357
187
21
14 Сен 2020
85
-75
82
Сам хоть понял, что написал?
Я думаю да, он использует этот форум как «избранное» в тг. авось по пути по головке погладят
Иди гуляй дятел!! Спамер!! Только и знаешь что засерать форум своими гениально тупыми постами. БИБА И БОБА!!:ROFLMAO::ROFLMAO:
 
14 Сен 2020
85
-75
82
Неприемлемый контент

Dmitry_V

Старожил
23 Июн 2023
1,430
248
128
27
Ешё один форумный червь залез. Ты это давай побольше там дизлайкос ставь не стесняйся. Кусок Тупова мяса.
За отсутствие грамотности еще один поставлю.
 
Реакции: nettkom

fivepkost

Активный участник
25 Мар 2023
226
30
65
чувствую что после таких вот действий администрация ресурса пересмотрит правила использования новой системы репутации и примет меры, просто хаос творится о.О
 
Реакции: nettkom
14 Сен 2020
85
-75
82

DeAAmoN

Гуру
18 Мар 2022
529
135
114
Нет, ну наверное это прикольно, типо кодир
Только ты когда комментарии нейронки удалял, забыл удалить и пробелы
Хотя зачем ты их вообще удалял? Они же помогают быстрее разобраться в написанном. Типо без палева?
 

fivepkost

Активный участник
25 Мар 2023
226
30
65
Нет, ну наверное это прикольно, типо кодир
Только ты когда комментарии нейронки удалял, забыл удалить и пробелы
Хотя зачем ты их вообще удалял? Они же помогают быстрее разобраться в написанном. Типо без палева?
он не учел одного, что это по дефолту из учебника) на древнекодерском
 
14 Сен 2020
85
-75
82
Система репутаций такая ерунда. Халлан такой ваше вася зачем его поставил. Любой пройтись по постам твоим по форуму. И просто накидать дизлайкой нет не ограничений нечего
 

fivepkost

Активный участник
25 Мар 2023
226
30
65
Система репутаций такая ерунда. Халлан такой ваше вася зачем его поставил. Любой пройтись по постам твоим по форуму. И просто накидать дизлайкой нет не ограничений нечего
не система ерунда, а пользователи которые ЗЛОупотребляют данной системой
 
Реакции: m0v1l3 и nettkom
14 Сен 2020
85
-75
82
Нет, ну наверное это прикольно, типо кодир
Только ты когда комментарии нейронки удалял, забыл удалить и пробелы
Хотя зачем ты их вообще удалял? Они же помогают быстрее разобраться в написанном. Типо без палева?
Где тут нейронка. Это ты видел нее ( взято с сайта codepen.io автор: Glenn McComb ? ) Потому-то что фаил много весит. Пробелы не чистил
 
14 Сен 2020
85
-75
82
14 Сен 2020
85
-75
82
Ну так это было до обновления.