Using CSS and HTML5 to create navigation buttons using trapezoids

后端 未结 3 1169
走了就别回头了
走了就别回头了 2020-12-14 16:53

I\'m trying to make a navigation-div with 4 buttons, one to go left, one to go right, another one to go down and yet another one to go up. Plus there needs to be an OK-butto

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-14 17:31

    As others have already pointed out, you should use SVG for this. Below is a CSS alternative that you may use.

    It uses transformed pseudo-elements and transform-origin property. To make it responsive, you need to change the units. As the units are in em in this approach, simply change the font size in the parent, or the body element.

    Fiddle

    body {
        font-size: 12px;
    }
    .left, .right, .top, .bottom, .ok {
        height: 10em;
        width: 10em;
        position: relative;
    }
    .left {
        background-color: #FFBF00;
        margin-top: 10em;
    }
    .right {
        background-color: #FF7E00;
        margin-top: -10em;
        margin-left: 20em;
    }
    .top {
        background-color: #D3212D;
        margin-top: -20em;
        margin-left: 10em;
    }
    .bottom {
        background-color: #318CE7;
        margin-top: 10em;
        margin-left: 10em;
    }
    .ok {
        background-color: #3B444B;
        margin-top: -21.666em;
        margin-left: 8.333em;
        height: 13.33em;
        width: 13.33em;
    }
    .ok span {
        line-height: 6.666em;
        text-align: center;
        width: inherit;
        display: block;
        font-size: 2em;
        font-family: sans-serif;
        color: white;
        font-weight: bold;
    }
    .left:before, .left:after, .right:before, .right:after, .top:before, .top:after, .bottom:before, .bottom:after {
        position: absolute;
        content: "";
        height: inherit;
        width: inherit;
        background-color: inherit;
    }
    .left:before, .right:before {
        -webkit-transform: skewY(45deg);
        -moz-transform: skewY(45deg);
        -ms-transform: skewY(45deg);
        -o-transform: skewY(45deg);
        transform: skewY(45deg);
    }
    .top:before, .bottom:before {
        -webkit-transform: skewX(45deg);
        -moz-transform: skewX(45deg);
        -ms-transform: skewX(45deg);
        -o-transform: skewX(45deg);
        transform: skewX(45deg);
    }
    .left:after, .right:after {
        -webkit-transform: skewY(-45deg);
        -moz-transform: skewY(-45deg);
        -ms-transform: skewY(-45deg);
        -o-transform: skewY(-45deg);
        transform: skewY(-45deg);
    }
    .top:after, .bottom:after {
        -webkit-transform: skewX(-45deg);
        -moz-transform: skewX(-45deg);
        -ms-transform: skewX(-45deg);
        -o-transform: skewX(-45deg);
        transform: skewX(-45deg);
    }
    .left:before, .left:after, .bottom:before, .bottom:after {
        -webkit-transform-origin: 100% 0%;
        -moz-transform-origin: 100% 0%;
        -ms-transform-origin: 100% 0%;
        -o-transform-origin: 100% 0%;
        transform-origin: 100% 0%;
    }
    .right:before, .right:after, .top:before, .top:after {
        -webkit-transform-origin: 0% 100%;
        -moz-transform-origin: 0% 100%;
        -ms-transform-origin: 0% 100%;
        -o-transform-origin: 0% 100%;
        transform-origin: 0% 100%;
    }
    /*HOVER STYLES*/
    .top:hover, .right:hover, .bottom:hover, .left:hover, .ok:hover {background: #F7E7CE; transition: 0.3s ease;}
    .ok:hover span {color: #222;}
    OK

    Screenshot (gif)

    enter image description here


    Browser support: IE 9+, GC 4+, FF 3.5+, Safari 3.1+, Opera 11.5+

提交回复
热议问题