• CSS 多按钮根据半圆弧度排列


    需求

    多个按钮根据弧度,延边均匀排列。

    实现

    HTML

    • 分两级;
    • 第一级,外层定义按钮的 compose-container 宽度;
    • 第二级,按钮集合,使用方法 styleBtn(index),根据索引计算;
    <div class="compose-container flex-style-01">
        <div class="btn" v-for="(item, index) in btnNum" :key="index" :style="styleBtn(index)">
        	{{ index }}
        div>
    div>
    

    CSS

    • compose-container:容器样式,使用 flex 布局,且设置 width
    • btn:按钮样式,无需设置 display
    .compose-container {
        display: flex;
        width: 600px;
        height: 80px;
        margin: 50px 0;
        background: #409eff;
        .btn {
            width: 50px;
            height: 50px;
            line-height: 50px;
            background: #aec0d1;
            border-radius: 50%;
            text-align: center;
            vertical-align: middle;
        }
    }
    

    JavaScript

    • 如下方法是计算按钮 translateY 值;
    • 代码第 2 行,传参是按钮的索引值,从 0 开始;
    • 代码第 4 行,按钮的总个数;
    • 代码第 6 行,按钮垂直高度间隔,单位 px
    • 代码第 8 行,整体抬高,也可不设置;
    • 代码第 12 - 27 行,区分偶数和奇数,中心点计算;
    • 代码第 29 行,设置属性 translateY
    // 按钮弧度高度
    function styleBtn(index) {
        // 总个数
        const totalNum = 8;
        // 间隔高度,单位 px
        const gap = 8;
        // 整体抬高
        const raiseHeight = 28;
    
        let translateY = ''
    
        if(totalNum%2 === 0) { // 偶数
            const centerIdx = totalNum / 2;
            const n = centerIdx - index;
            // > 0 左侧,<= 右侧
            translateY = (n > 0) ? n * gap : (Math.abs(n)+1) * gap;
        }
        else { // 奇数
            const centerIdx = Math.floor(totalNum / 2);
            const n = centerIdx - index;
            if(centerIdx === index) {// 中心点
                translateY = gap;
            }
            else {
                translateY = (Math.abs(n)+1) * gap;
            }
        }
        
        return { transform: `translateY(${(translateY - raiseHeight)}px)` }
    }
    

    效果

    偶数

    • 按钮个数为偶数,中间两个按钮在同一条水平线上;
    • 样式一,justify-content: center,根据按钮的 margin 属性设置间隔;
    • 样式二:justify-content: space-between,两端对齐,按钮之间的空间平均分配;
    • 样式三:justify-content: space-around,按钮两侧空间相等,但首尾按钮与容器边缘的空间是按钮之间空间的一半;
    • 样式四:justify-content: space-evenly,所有间距(包括首尾按钮与容器边缘的间距)都相等;

    在这里插入图片描述

    奇数

    • 按钮个数为奇数,中间一个按钮最高,其它左右两侧在同一条水平线上;
    • justify-content 设置同上;

    在这里插入图片描述

    完整代码

    
    
    
    
    
    
  • 相关阅读:
    leetcode 2520 统计能整除数字的位数
    闲聊vue版本差异和开发中不太容易注意的点(基础篇)
    软件的开发模型
    【零基础入门SpringMVC】第一期——开篇导论
    面渣逆袭:MySQL六十六问,两万字+五十图详解!
    Chain-Of-Note:解决噪声数据、不相关文档和域外场景来改进RAG的表现
    《从程序员到架构师》:从现在开始培养架构思维,一点都不晚
    Python中将列表拆分为大小为N的块
    Arthas入门使用
    电容的频率特性
  • 原文地址:https://blog.csdn.net/sinat_31213021/article/details/141023122