【问题标题】:How to create a donut ring with 4 equal segment in css? [duplicate]如何在css中创建一个具有4个相等段的甜甜圈环? [复制]
【发布时间】:2021-05-07 18:07:28
【问题描述】:

我正在尝试将环分成 4 个相等的部分。此甜甜圈环可在该段的所有部分上单击。但是当我试图改变倾斜时,它不能使它们相等,实际上在当前的甜甜圈环中,顶部的左右边界有一条双线。与左右部分相比,顶部和底部部分要大得多。

这段代码 sn-p 是我尝试过的。

<!DOCTYPE html>
<html>
    <head>
        <style>
            .container {
                width: 200px;
                height: 200px;
            }

            .pie {
                position: relative;
                margin: 1em auto;
                border: 4px solid black;
                padding: 0;
                width: 15em;
                height: 15em;
                border-radius: 50%;
                list-style: none;
                overflow: hidden;
            }

            .slice {
                overflow: hidden;
                position: absolute;
                top: 0;
                right: 0;
                width: 50%;
                height: 50%;
                transform-origin: 0% 100%;
                border: 2px solid black;
                box-sizing: border-box;
            
            }

            .slice-contents {
                position: absolute;
                left: -100%;
                width: 200%;
                height: 200%;
                border-radius: 50%;
            }

            .slice:nth-child(1) {
                transform: rotate(-60deg) skewY(30deg) scale(1.2);
            }

            .slice:nth-child(1) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .slice:nth-child(2) {
                transform: rotate(60deg) skewY(30deg) scale(1.2);
            }

            .slice:nth-child(2) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .slice:nth-child(3) {
                transform: rotate(180deg) skewY(30deg) scale(1.2);
            }

            .slice:nth-child(3) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .slice:nth-child(4) {
                transform: rotate(120deg) skewY(30deg) scale(1.2);
            }

            .slice:nth-child(4) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .inner-pie {
                position: absolute;
                width: 7em;
                height: 7em;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                border-radius: 50%;
                border: 4px solid black;
                background: white;
            }

            #top, #bottom, #left, #right, #center { 
                cursor: pointer 
            }
        </style>
    </head>

    <body>
        <div class="container">
            <ul class='pie'>
                <li class='slice'>
                <div id="top" class='slice-contents'>click 1</button>
                </li>
                <li class='slice'>
                <div id="right" class='slice-contents'>click 2</button>
                </li>
                <li class='slice'>
                <div id="left" class='slice-contents'>click 3</button>
                </li>
                <li class='slice'>
                    <div id="bottom" class='slice-contents'>click 4</button>
                </li>
                <li id="center" class='inner-pie'>
                </li>
            <ul>
        </div>    
    </body> 

    <script>
        document.getElementById('top').onclick = function() {
            document.getElementById("top").style.backgroundColor = "red";
        };

        document.getElementById('bottom').onclick = function() {
            document.getElementById("bottom").style.backgroundColor = "red";
        };

        document.getElementById('right').onclick = function() {
            document.getElementById("right").style.backgroundColor = "red";
        };
        document.getElementById('left').onclick = function() {
            document.getElementById("left").style.backgroundColor = "red";
        };

        document.getElementById('center').onclick = function() {
            document.getElementById("center").style.backgroundColor = "red";
        };
    </script>
</html>

【问题讨论】:

  • 老实说,使用 SVG。全面更简单
  • 请检查您的代码是否有正确的结束标签。 ul 未关闭。

标签: html css


【解决方案1】:

您可以通过以下方式实现:
skewY 实际上不需要。

        document.getElementById('top').onclick = function() {
            document.getElementById("top").style.backgroundColor = "red";
        };

        document.getElementById('bottom').onclick = function() {
            document.getElementById("bottom").style.backgroundColor = "red";
        };

        document.getElementById('right').onclick = function() {
            document.getElementById("right").style.backgroundColor = "red";
        };
        document.getElementById('left').onclick = function() {
            document.getElementById("left").style.backgroundColor = "red";
        };

        document.getElementById('center').onclick = function() {
            document.getElementById("center").style.backgroundColor = "red";
        };
            .container {
                width: 200px;
                height: 200px;
            }

            .pie {
                position: relative;
                margin: 1em auto;
                border: 4px solid black;
                padding: 0;
                width: 15em;
                height: 15em;
                border-radius: 50%;
                list-style: none;
                overflow: hidden;
            }

            .slice {
                overflow: hidden;
                position: absolute;
                top: 0;
                right: 0;
                width: 50%;
                height: 50%;
                transform-origin: 0% 100%;
                border: 2px solid black;
                box-sizing: border-box;
            
            }

            .slice-contents {
                position: absolute;
                left: -100%;
                width: 200%;
                height: 200%;
                border-radius: 50%;
            }

            .slice:nth-child(1) {
                transform: rotate(-45deg) scale(1.2);
            }

            .slice:nth-child(1) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .slice:nth-child(2) {
                transform: rotate(45deg) scale(1.2);
            }

            .slice:nth-child(2) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .slice:nth-child(3) {
                transform: rotate(135deg) scale(1.2);
            }

            .slice:nth-child(3) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .slice:nth-child(4) {
                transform: rotate(225deg) scale(1.2);
            }

            .slice:nth-child(4) .slice-contents {
                transform: skewY(-30deg); /* unskew slice contents */
                background: white;
            }

            .inner-pie {
                position: absolute;
                width: 7em;
                height: 7em;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                border-radius: 50%;
                border: 4px solid black;
                background: white;
            }

            #top, #bottom, #left, #right, #center { 
                cursor: pointer 
            }
        
<!DOCTYPE html>
<html>
    <head>
    </head>

    <body>
        <div class="container">
            <ul class='pie'>
                <li class='slice'>
                <div id="top" class='slice-contents'>click 1</button>
                </li>
                <li class='slice'>
                <div id="right" class='slice-contents'>click 2</button>
                </li>
                <li class='slice'>
                <div id="left" class='slice-contents'>click 3</button>
                </li>
                <li class='slice'>
                    <div id="bottom" class='slice-contents'>click 4</button>
                </li>
                <li id="center" class='inner-pie'>
                </li>
            </ul>
        </div>    
    </body> 
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 2016-09-14
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多