【前端demo】CSS border-radius可视化 原生实现

这篇具有很好参考价值的文章主要介绍了【前端demo】CSS border-radius可视化 原生实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端demo系列目录:https://blog.csdn.net/karshey/article/details/132585901

效果

效果预览:https://codepen.io/karshey/pen/zYyBPBR

【前端demo】CSS border-radius可视化 原生实现,前端demo,前端,css

参考:

Fancy Border Radius Generator (9elements.github.io)

https://border-radius.com/

CSS border-radius 新玩法(含可视化生成工具) - 鬼小妞 - 博客园 (cnblogs.com)

GitHub - florinpop17/app-ideas: A Collection of application ideas which can be used to improve your coding skills.

原理

border-radius的值为百分号:

<!DOCTYPE html>
<html>
<head>
<style> 
div
{
	border:2px solid;
	padding:10px;
	width:300px;
	height:300px;
	border-top-left-radius: 25% 50%;
	border-bottom-right-radius: 25% 50%;
}
</style>
</head>
<body>

<div></div>

</body>
</html>

其中有css代码:

border-top-left-radius: 25% 50%;
border-bottom-right-radius: 25% 50%;

因此:

  • top在左边25%的地方开始有弧度
  • left在上面50%的地方有弧度
  • bottom在右边25%的地方有弧度
  • right在下面50%的地方有弧度
    【前端demo】CSS border-radius可视化 原生实现,前端demo,前端,css

值为px同理。

代码

  • 此代码的单位为px
  • 若想要为%的,将r[num] = event.target.value + 'px'改为r[num] = event.target.value + '%'
  • class中的one、two等数字是写样式(位置)用的
  • 每个input表单的data-index属性,可以用来得知是哪个子元素发生了onchange事件(事件委托在父元素),通过event.target.attributes[2].value获取data-index属性

不知道在哪的话可以输出event看看

class对应位置:

【前端demo】CSS border-radius可视化 原生实现,前端demo,前端,css
注意:文章来源地址https://www.toymoban.com/news/detail-685606.html

  • borderTopLeftRadius :是上和左,即1和8
  • borderTopRightRadius :是上和右,即2和3
  • borderBottomRightRadius :是下和右,即5和4(注意顺序!)
  • borderBottomLeftRadius :是下和左,即6和7
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS border-radius</title>
    <style>
        .box {
            height: 400px;
            width: 400px;
            margin: 100px auto;
            position: relative;
            border: 1px solid #9E9E9E;
            background: linear-gradient(45deg, #00bcd4, #d135ec);
        }


        .item {
            width: 40px;
            height: 25px;
            background-color: #d1d0d0;
            border: 1px solid #9e9e9e;
            position: absolute;
        }

        .one {
            top: -35px;
        }

        .two {
            top: -35px;
            right: 0;
        }

        .there {
            right: -55px;
        }

        .four {
            right: -55px;
            bottom: 0;
        }

        .five {
            bottom: -35px;
            right: 0;
        }

        .six {
            bottom: -35px;
        }

        .seven {
            left: -55px;
            bottom: 0;
        }

        .eight {
            left: -55px;
        }
    </style>
</head>

<body>
    <div class="box" id="box" onchange="Onchange(event)">
        <input type="text" class="item one" data-index="1">
        <input type="text" class="item two" data-index="2">
        <input type="text" class="item there" data-index="3">
        <input type="text" class="item four" data-index="4">
        <input type="text" class="item five" data-index="5">
        <input type="text" class="item six" data-index="6">
        <input type="text" class="item seven" data-index="7">
        <input type="text" class="item eight" data-index="8">
    </div>
</body>

</html>

<script>
    // 左上18
    // 右上23
    // 下右54
    // 左下67
    let r = new Array(9).fill(0);

    function Onchange(event) {
        // 事件委托 获取子元素的data-index:event.target.attributes[2].value
        let num = event.target.attributes[2].value
        r[num] = event.target.value + 'px'
        console.log(r)

        borderRadiusChange()
    }

    function borderRadiusChange() {
        let box = document.getElementById('box')
        let rr = new Array()
        rr.push(r[1], r[8])
        box.style.borderTopLeftRadius = rr.join(' ')
        box.style.borderTopRightRadius = r.slice(2, 4).join(' ')
        // 清空数组
        rr.length = 0
        rr.push(r[5], r[4])
        box.style.borderBottomRightRadius = rr.join(' ')
        box.style.borderBottomLeftRadius = r.slice(6, 8).join(' ')
    }

</script>

到了这里,关于【前端demo】CSS border-radius可视化 原生实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端可视化】前端大屏适配方案

    动态设置 html 根字体的大小和 body 字体大小(使用 lib_flexible.js) 将设计稿的宽(1920)平均分成 24 等份,每一份 80px; html 根字体大小就设置为 80px,即 1rem = 80px,24rem = 1920px(移动端推荐分为 10 份); 将 body 字体大小设置为 16px; 最后需要使用插件或者其他方式将 px 转为 rem 单位:

    2024年02月11日
    浏览(47)
  • 大数据前端可视化大屏--前端开发之路

    从2016年开始接触可视化方向,一直想写一篇文章回顾一下这几年踩过的坑,接下来的这段时间里我会不定时的给大家分享一些可视化方面的经验和感悟,发出来跟大家一块分享一下、一起讨论讨论、共同学习进步。 这篇文章作为开端,之后会不定时的发出一系列的采坑记录

    2023年04月09日
    浏览(52)
  • 前端可视化数据大屏(1)

    效果图 技术架构:datav,vue2,echarts 我们一步一步的来实现一个简单的可视化数据大屏,开始吧!!         太简单了,百度上可以搜索,我这里就不多说了,把router装好就行         2.1在控制台上输入命令下载datav         2.2 将datav的组件注册为全局组件              

    2024年02月06日
    浏览(54)
  • HTML5+CSS3+JS小实例:音频可视化

    实例:音频可视化 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 【CSS】

    2024年01月18日
    浏览(46)
  • 基于HTML+CSS+Echarts大屏数据可视化集合共99套

    基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求可视化集合。 Java+Swing实现学生选课管理系统 Java+Swing实现学校教务管理系统 Java+Swing+sqlserver学生成绩管理系统 Java+Swing用户信息管理系统 Java+Swing实现的五子棋游戏 基于JavaSwing 银行管理系统

    2024年02月12日
    浏览(44)
  • html+css+js本地音乐播放器,实现可视化音频频谱

    html+css+js本地音乐播放器,实现可视化音频频谱 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面样式和功能方面,比swing写的好看、完善多了。 导入音乐(已完成) 展示列表(已完成) 列表双击

    2024年02月09日
    浏览(54)
  • Echarts前端可视化库使用教程

    ECharts是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。 官网:https://echarts.apache.org/zh/inde

    2024年02月10日
    浏览(51)
  • 前端数据可视化:D3.js的实践

    数据可视化是指将数据以图形、图表、图片的形式呈现给用户,以帮助用户更好地理解数据。随着数据的增长,数据可视化也越来越重要。前端数据可视化是指在网页上使用HTML、CSS、JavaScript等技术来呈现数据,以帮助用户更好地理解数据。D3.js是一个用于创建动态、交互式数

    2024年04月13日
    浏览(48)
  • 前端大屏可视化适配方案(通用模板,快速上手)

    在日常前端开发中,大屏项目是每个前端开发者必备技能,但是目前设备尺寸大小和分辨率都不相同,所以大屏适配成了一个头疼的问题。看到网上的实现方案有rem,flexible,zoom,百分比,总感觉没那么完美,于是自己研究了一下也借鉴了网上大神的方法,实现了一下这三种

    2024年02月12日
    浏览(58)
  • ChatGPT 与前端技术实现制作大屏可视化

    像这样的综合案例实分析,我们可以提供案例,维度与指标数据,让ChatGPT与AIGC 帮写出完整代码,并进行一个2行2列的布局设置。 数据与指令如下: 商品名称    销量    目标    完成率 可乐    479    600    79.83% 雪碧    324    600    54.00% 红茶    379    600  

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包