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

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

思路

               首先  直接这样设置


 border: 0.5px solid red;

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


           box-shadow阴影实现的思路

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


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

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


           transform 缩放实现的思路

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


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

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


答案

             


           box-shadow阴影实现的答案

                 


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

 


       

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

             


</div><div>        div {</div><div>            position: relative;</div><div>            box-sizing: border-box;</div><div>            background-color: blueviolet;</div><div>            width: 200px;</div><div>            height: 200px;</div><div>            margin-top: 10px;</div><div>            /* box-shadow: 0px 0px 0px 0.5px green; */</div><div>        }</div><div>        div::after {</div><div>            position: absolute;</div><div>            content: "";</div><div>            background-color: red;</div><div>            width: 100%;</div><div>            height: 0.5px;</div><div>            bottom: 0px;</div><div>        }</div><div>    

 


             


           transform 缩放实现的答案

             


</div><div>        div {</div><div>            position: relative;</div><div>            box-sizing: border-box;</div><div>            background-color: blueviolet;</div><div>            width: 200px;</div><div>            height: 200px;</div><div>            margin-top: 10px;</div><div>            /* box-shadow: 0px 0px 0px 0.5px green; */</div><div>        }</div><div>        div::after {</div><div>            position: absolute;</div><div>            content: "";</div><div>            width: 200%;</div><div>            height: 200%;</div><div>            border: 1px solid red;</div><div>            transform-origin: 0 0;</div><div>            transform: scale(0.5);</div><div>        }</div><div>    

 


             


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

               


 </div><div>        div {</div><div>            position: relative;</div><div>            box-sizing: border-box;</div><div>            background-color: blueviolet;</div><div>            width: 200px;</div><div>            height: 200px;</div><div>            margin-top: 10px;</div><div>            /* box-shadow: 0px 0px 0px 0.5px green; */</div><div>        }</div><div>        div::after {</div><div>            display: block;</div><div>            position: absolute;</div><div>            content: "";</div><div>            width: 100%;</div><div>            height: 1px;</div><div>            bottom: 0px;</div><div>            background-color: red;</div><div>            background: linear-gradient(to bottom, transparent 50%, red 50%);</div><div>        }</div><div>    

 




理解

           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属性,通过其他属性来达到类似的边框效果,第三种使用了边框然后进行了效果的修改,第四种也有边框效果的变种写法。


相关文章
|
25天前
|
前端开发 JavaScript C++
揭秘Web前端CSS引入秘籍:Link vs @import,你的选择决定页面加载速度,你选对了吗?
【8月更文挑战第26天】本文探讨了Web前端开发中CSS的引用方法,主要包括行内样式、内部样式表及外部样式表三种形式。重点对比了外部样式表中的`&lt;link&gt;`和`@import`两种引入方式。`&lt;link&gt;`作为HTML元素,在页面加载初期就开始加载样式资源,支持并行加载,对提高页面加载速度有益。而`@import`作为一种CSS规则,仅能在CSS文件中使用,其引入的样式表会在页面完成加载后才开始加载,可能导致渲染延迟且不支持并行加载。因此,在多数情况下,推荐采用`&lt;link&gt;`方式引入外部样式表,以确保更佳的性能表现和浏览器兼容性。
49 2
|
8天前
|
前端开发
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
235 91
|
8天前
|
前端开发
【前端web入门第三天】02 CSS字体和文本
本文详细介绍了CSS中字体和文本的相关属性。字体部分涵盖字体大小、粗细、样式、行高、字体族及`font`复合属性,通过具体示例展示了如何设置和使用这些属性。文本部分则讲解了文本缩进、对齐方式、修饰线及文字颜色等属性,并提供了实用的代码示例。此外,还简要介绍了调试工具中的一些细节,如错误属性标识和属性生效状态的控制。
42 28
|
8天前
|
前端开发 JavaScript
【前端web入门第三天】01 css定义和引入方式 四种标签选择器
本文档详细介绍了CSS的基础知识及其应用。内容涵盖了CSS的定义、CSS在HTML中的引入方式,包括内部样式表、外部样式表及行内样式表的使用场景与方法。此外,还深入解析了不同种类的选择器:标签选择器、类选择器、ID选择器以及通配符选择器的功能与应用场景,并提供了实例帮助理解。最后,通过具体的新属性示例,指导如何使用这些选择器来实现基本的盒子绘制。适合初学者系统学习CSS。
29 15
|
8天前
|
前端开发
|
8天前
|
前端开发
【前端web入门第六天】01 CSS浮动
这是关于CSS布局第六天学习目标的介绍,主要解决多个`&lt;div&gt;`标签在同一行显示的问题,即一个在左边,另一个在右边。文中介绍了标准流、浮动及flex布局的概念,重点推荐使用flex布局。文章详细讲解了浮动的基本使用、布局技巧及清除浮动的方法,包括额外标签法、单伪元素法、双伪元素法和`overflow`隐藏法,并提供了示例代码帮助理解。
|
16天前
|
前端开发 程序员
CSS前端学习(online tuorials)
CSS前端学习(online tuorials)
14 5
|
25天前
|
编解码 前端开发 开发者
【前端设计达人必备】揭秘CSS尺寸单位的魔力:从基础到实战,打造灵动响应式网页!
【8月更文挑战第26天】本文深入探讨了CSS中常用的尺寸单位,包括像素(px)、百分比(%)、视窗单位(vw/vh/vmin/vmax)、可伸缩相对单位(em/rem)以及Flexbox和Grid中的fr单位。通过具体案例展示了每种单位的特点及其适用场景。像素适用于固定尺寸元素;百分比和em/rem利于构建响应式布局;视窗单位适合全屏设计;fr单位则能有效管理复杂网格布局的空间分配。掌握这些单位有助于开发者设计出更加灵活、高质量的网页布局。
35 4
|
25天前
|
前端开发 开发者
【前端大揭秘】CSS盒子模型的爱恨情仇:一场关于标准与IE模型的精彩对决!
【8月更文挑战第26天】本文深入探讨CSS中的两大盒子模型——标准盒模型与IE盒模型。通过理论解析与实例代码,清晰展示了两种模型下元素尺寸的构成方式及其应用场景。标准盒模型适合精确控制内容区尺寸,而IE盒模型在处理固定宽度元素时更为直观。掌握这些知识将帮助前端开发者在实际项目中做出更优的设计决策,提升网页布局的质量与美观性。
19 1
|
19天前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
26 0