Wie kann man mit CSS etwas "ausblenden"?


19.12.2023, 11:10

(ist in meiner Antwort, weil es hier sonst auch zu lang ist)

1 Antwort

HTML:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <div class="ctxmenu">
    <div class="submenu left up">
        <div class="entry label">Einfügen</div>
        <div class="entries">
            <div class="submenu left up">
                <div class="entry label">Darüber</div>
                <div class="entries">
                    <div class="entry">String</div>
                    <div class="entry">Number</div>
                    <div class="entry">Boolean</div>
                    <div class="entry">Array</div>
                    <div class="entry">Object</div>
                    <div class="entry">Null</div>
                </div>
            </div>
            <div class="submenu left up">
                <div class="entry label">Darunter</div>
                <div class="entries">
                    <div class="entry">String</div>
                    <div class="entry">Number</div>
                    <div class="entry">Boolean</div>
                    <div class="entry">Array</div>
                    <div class="entry">Object</div>
                    <div class="entry">Null</div>
                </div>
            </div>
        </div>
    </div>
    <div class="submenu left up">
        <div class="entry label">Verschieben</div>
        <div class="entries">
            <div class="entry">Nach oben</div>
            <div class="entry">Zeile hoch</div>
            <div class="entry">Zeile runter</div>
            <div class="entry">Nach unten</div>
        </div>
    </div>
    <div class="entry">Löschen</div>
    <div class="submenu left up">
        <div class="entry label">Typ ändern</div>
        <div class="entries">
            <div class="entry">String</div>
            <div class="entry">Number</div>
            <div class="entry">Boolean</div>
            <div class="entry">Array</div>
            <div class="entry">Object</div>
            <div class="entry">Null</div>
        </div>
    </div>
    <div class="entry">Aufklappen</div>
    <div class="entry">Zuklappen</div>
    <div class="entry">Alle aufklappen</div>
    <div class="entry">Alle zuklappen</div>
  </div>
</body>
</html>

CSS:

body
{
   background: #222;
   color: #DDD;
   border-color: #AAA;
   font-family: Arial;
}

.ctxmenu
{
   position: fixed;
   z-index: 999;
   background: inherit;
   top: 200px;
   left: 300px;
}

.ctxmenu *
{
   background: inherit;
   position: relative;
}

.ctxmenu > *, .entries > *
{
   padding: 5px 10px;
   white-space: nowrap;
   cursor: default;
}

.ctxmenu .entry
{
   transition: all linear 200ms;
}

/* Fallback für Firefox < 121 */
.ctxmenu .entry:hover
{
   background: #111;
   transition: all linear 200ms;
}

.ctxmenu .entry:hover, .ctxmenu .submenu > :first-child:has(+ :hover)
{
   background: #111;
   transition: all linear 200ms;
}

.ctxmenu .submenu
{
   padding: 0;
}

.ctxmenu .submenu:hover
{
   z-index: 100;
}

.ctxmenu .submenu > :not(.entries)
{
   padding: 5px 10px;
}

.ctxmenu .submenu > .entries
{
   position: absolute;
   top: 0;
   right: 0;
   translate: 0%;
   opacity: 0;
   transition: all linear 300ms;
   /*display: none;*/
}

.ctxmenu .submenu:hover > .entries
{
   translate: 100%;
   opacity: 1;
   transition: all linear 300ms;
}

.ctxmenu .submenu.right > .entry.label::after,
.ctxmenu .submenu:not(.left) .entry.label::after
{
   content: ">";
   float: right;
   padding-left: 10px;
}

.ctxmenu .submenu.left > .entry.label::after
{
   content: "<";
   float: left;
   padding-right: 10px;
}

.ctxmenu .submenu.right > .entries
{
   right: 0;
   translate: 100%;
}

.ctxmenu .submenu.left > .entries
{
   left: 0;
   translate: -100%;
}

.ctxmenu .submenu.up > .entries
{
   top: 100%;
   transform: translateY(-100%);
}

.ctxmenu .submenu.down > .entries
{
   top: 0;
   transform: translateY(0);
}

.ctxmenu, .ctxmenu .submenu:hover > .entries
{
   display: block;
   border: solid 2px #AAA;
   border-radius: 5px;
}