当前位置: 首页 > news >正文

[前端CSS高频面试题]如何画0.5px的边框线(详解)

往期css3文章

详解 CSS3中最好用的布局方式——flex弹性布局(看完就会)
CSS3基础属性大全
CSS3动画属性 animation详解(看完就会)
CSS3 transform 2D转换之移动 旋转 缩放(详细讲解看完就会)
CSS3 Z—Index 详解
CSS3 positon定位详解(通俗易懂)

目录

思路

            box-shadow阴影实现的思路

             ::after定位伪类实现的思路

            transform 缩放实现的思路

            border-image: linear-gradient 边框线性渐变的思路

答案

            box-shadow阴影实现的答案

           ::after定位伪类实现的答案

            transform 缩放实现的答案

            border-image: linear-gradient 边框线性渐变的答案    

理解

            box-shadow阴影实现的理解

             ::after定位伪类实现的理解

            transform 缩放实现的理解

            border-image: linear-gradient 边框线性渐变的理解    

总结


思路

                首先  直接这样设置

  border: 0.5px solid red;

                0.5px的边框,肯定是不对的,边框大小会向上取整。

            box-shadow阴影实现的思路

                      既然border不能设置小数的边框,那我们能不能找一个属性有相似的效果来替代它呢,当然可以,我们可以用box-shadow属性用阴影达到0.5px的边框效果,box-shadow阴影属性是允许小数值的,我们可以用它达到单条边框和四条边框。

             ::after定位伪类实现的思路

                直接设置伪类元素,设置指定的高度,通过定位来控制位置。

            transform 缩放实现的思路

                        我们可以设置任意大小的边框,改变中心点,通过缩放效果(找好倍率)来达成想要的结果。

            border-image: linear-gradient 边框线性渐变的思路

                         同样设置任意大小的边框,通过渐变属性改变一部分边框的颜色效果,比如将一部分边框融入背景,这样就能得到想要的效果。

答案

                

            box-shadow阴影实现的答案

                     

   <style>
        div {
            box-sizing: border-box;
            background-color: blueviolet;
            width: 200px;
            height: 200px;
            margin: 100px auto;
            /* border: 1px solid red; */
            box-shadow: 0px 0px 0px 0.5px green;
        }
    </style>
</head>

<body>
    <div></div>
</body>

           

           ::after定位伪类实现的答案

                

 <style>
        div {
            position: relative;
            box-sizing: border-box;
            background-color: blueviolet;
            width: 200px;
            height: 200px;
            margin-top: 10px;
            /* box-shadow: 0px 0px 0px 0.5px green; */
        }

        div::after {
            position: absolute;
            content: "";
            background-color: red;
            width: 100%;
            height: 0.5px;
            bottom: 0px;
        }
    </style>
</head>

<body>
    <div></div>
</body>

                 

            transform 缩放实现的答案

                

<style>
        div {
            position: relative;
            box-sizing: border-box;
            background-color: blueviolet;
            width: 200px;
            height: 200px;
            margin-top: 10px;
            /* box-shadow: 0px 0px 0px 0.5px green; */
        }

        div::after {

            position: absolute;
            content: "";
            width: 200%;
            height: 200%;
            border: 1px solid red;
            transform-origin: 0 0;
            transform: scale(0.5);


        }
    </style>
</head>

<body>
    <div></div>
</body>

                

            border-image: linear-gradient 边框线性渐变的答案    

                  

   <style>
        div {
            position: relative;
            box-sizing: border-box;
            background-color: blueviolet;
            width: 200px;
            height: 200px;
            margin-top: 10px;
            /* box-shadow: 0px 0px 0px 0.5px green; */
        }

        div::after {
            display: block;
            position: absolute;
            content: "";
            width: 100%;
            height: 1px;
            bottom: 0px;
            background-color: red;
            background: linear-gradient(to bottom, transparent 50%, red 50%);


        }
    </style>
</head>

<body>
    <div></div>
</body>

 

 

理解

            box-shadow阴影实现的理解

                        这种方法完全借助盒子阴影来达到指定效果,通过0.5px的阴影,让它达到类似0.5px边框的效果。

             ::after定位伪类实现的理解

                        这种方法直接设置0.5px的高度,高度同样允许小数px,我们生成了一个新元素,来改变它的高度,让它充当边框。

            transform 缩放实现的理解

                        利用缩放属性,我们设置一个1px边框,长度和宽度设置为被包裹子元素的两倍,当它缩小0.5的时候,就正好变成了子元素的宽高,1px的边框也缩小了一半变成了0.5px

            border-image: linear-gradient 边框线性渐变的理解    

                         这个其实是第二种属性的复杂版了,没有直接设置0.5px,而是设置了1px1上上面一半透明,来达到0.5px的边框效果,我们也可以直接设置1px的边框,然后同样透明0.5px,这个就不演示了。(这个属性有点复杂 后面会讲一下)

总结

                        第一二 四种没有使用border属性,通过其他属性来达到类似的边框效果,第三种使用了边框然后进行了效果的修改,第四种也有边框效果的变种写法。

相关文章:

  • APS智能排产在电缆行业的应用
  • Java模拟抽奖。奖池有以下几个奖项:【2,1888,588,388,2888】打印出抽奖结果,要求随机且不重复。两种方法(代码和优化后的代码)
  • Ajax加强
  • 低代码治理及其必要性
  • 翻了ConcurrentHashMap1.7 和1.8的源码,我总结了它们的主要区别。
  • 信息管理毕业设计题目合集【含源码+论文】
  • BOM批量查询
  • 基于FPGA的数字滤波器fir
  • Js手写面试题5-Promise
  • T1094 与7无关的数(信息学一本通C++)
  • MySQL高可用之MHA集群
  • Hive数据类型、部分函数及关键字整理
  • Python采集某Top 250信息,再也不怕寂寞无聊......
  • 【XGBoost】第 2 章:深度决策树
  • 如何在Linux服务器上部署Vue项目
  • AHK 中 = 和 == 等比较运算符的用法
  • emacs初体验
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PHP面试之三:MySQL数据库
  • Python利用正则抓取网页内容保存到本地
  • 官方解决所有 npm 全局安装权限问题
  • 机器学习学习笔记一
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 前端攻城师
  • 前端自动化解决方案
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何使用 JavaScript 解析 URL
  • 听说你叫Java(二)–Servlet请求
  • 网页视频流m3u8/ts视频下载
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #etcd#安装时出错
  • #微信小程序:微信小程序常见的配置传旨
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (3)llvm ir转换过程
  • (8)STL算法之替换
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十) 初识 Docker file
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)基于IDEA的JAVA基础10
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bashrc在哪里,alias妙用
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Core引入性能分析引导优化
  • .Net MVC4 上传大文件,并保存表单
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .netcore 获取appsettings