返回顶部
首页 > 资讯 > 前端开发 > html >如何使用单div实现CSS绘图
  • 163
分享到

如何使用单div实现CSS绘图

2024-04-02 19:04:59 163人浏览 八月长安
摘要

这篇文章主要介绍了如何使用单div实现CSS绘图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用单div实现CSS绘图文章都会有所收获,下面我们一起来看看吧。伪元素因为

这篇文章主要介绍了如何使用单div实现CSS绘图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用单div实现CSS绘图文章都会有所收获,下面我们一起来看看吧。

伪元素

因为 CSS 有伪类,所以虽然只有一个 Div,但实际上我可以使用三个元素。因此,使用divdiv:beforediv:after,我们可以这样:

代码如下:

div { background: red; }
div:before { background: yellow; }
div:after { background: blue; }

容易想到,这三个元素可以并排成为三个叠在一起的层。

形状

使用 CSS 和单个元素,我们可以制作三种基础图形。使用widthheight属性制作正方形/矩形,使用border-radius制作圆/椭圆,使用border制作三角形/梯形。

我们还可以使用 CSS 创建其他图形,不过大部分都可以简单组合这些基础图形来实现,这些简单的图形最容易制作,也最容易修改。

多个相同的形状

使用叠加的box-shadow,我们可以创建多个相同的形状,这些形状可以拥有不一样的大小、颜色和模糊效果。我们可以在x或者y轴上移动这些图形,因此几乎可以绘制无限的图形。

代码如下:

div {
box-shadow: 170px 0 10px yellow,
330px 0 0 -20px blue,
330px 5px 5px -20px black;
}

我们甚至可以给box-shadow添加box-shadow。注意它们申明顺序。再者,把它们当做层更容易理解。

渐变

渐变通过给定一个光源,可以被用来制造明暗和深浅效果,可以让简单扁平的图形看起来更真实。结合多个background-image,我们可以使用很多层的渐变来实现更加复杂光影,甚至是更多的图形。

代码如下:

div {
background-image: linear-gradient(to right, gray, white, gray, black);
}
div:after {
background-image: radial-gradient(circle, yellow 50%, transparent 50%), linear-gradient(to right, blue, red); 
}

视觉

最困难的部分视觉,即如何拼凑这些形状成为可被感知的绘图。随着我越来越注重绘图的技巧,发现视觉这一步很重要。为了做到这一点,我常常凝视这主题相关的图片,将其切割为多个可视的部分。都是一个个形状,都是一个个颜色。我把整张图片简化为一些小的带颜色形状或者区块,我知道(大体上)如何使用 CSS 来实现它们。

实例

我们一起仔细看看两个绘图,并学习如何分解成不同的区块,合成一个大的图形。第一个就是一支绿色的蜡笔。

蜡笔由两个基础图形构成:矩形的笔身和三角形的笔尖。

我必须实现下面这些点来捕获真实蜡笔的感觉:

纸质包装上不同的颜色印刷在包装上的形状和文字条纹暗示蜡笔是圆的明暗效果,暗示圆形的蜡笔和光源

首先,我使用divbackground颜色制作蜡笔的身体部分,从顶部到底部渐变,并使用box-shadow暗示立体感:

代码如下:

div {
background: #237449;
background-image: linear-gradient(to bottom,
transparent 62%,
black(.3) 100%);
box-shadow: 2px 2px 3px black(.3);
}

然后,我使用一个从左到右的linear-gradient制作纸包装。alpha值为.6,这样的之前的渐变可以透出来。

代码如下:

div {
background-image: linear-gradient(to right,
transparent 12px,
rgba(41,237,133,.6) 12px,
rgba(41,237,133,.6) 235px,
transparent 235px);
}

接下来,我继续使用同样的方式,从左到右渐变,制作蜡笔上的条纹。

代码如下:

div {
background-image: linear-gradient(to right,
transparent 25px,
black(.6) 25px,
black(.6) 30px,
transparent 30px,
transparent 35px,
black(.6) 35px,
black(.6) 40px,
transparent 40px,
transparent 210px,
black(.6) 210px,
black(.6) 215px,
transparent 215px,
transparent 220px,
black(.6) 220px,
black(.6) 225px,
transparent 225px);
}

纸包装上印刷的椭圆,使用一个radial-gradient轻松搞定!

代码如下:

div {
background-image: radial-gradient(ellipse at top,
black(.6) 50px,
transparent 54px);
}

我刚才单独展示了各个部分,不过别忘了background-image看起来是这样的:

代码如下:

div {
// ellipse printed on wrapper
background-image: radial-gradient(ellipse at top,
black(.6) 50px,
transparent 54px),
// printed stripes
linear-gradient(to right,
transparent 25px,
black(.6) 25px,
black(.6) 30px,
transparent 30px,
transparent 35px,
black(.6) 35px,
black(.6) 40px,
transparent 40px,
transparent 210px,
black(.6) 210px,
black(.6) 215px,
transparent 215px,
transparent 220px,
black(.6) 220px,
black(.6) 225px,
transparent 225px),
// wrapper
linear-gradient(to right,
transparent 12px,
rgba(41,237,133,.6) 12px,
rgba(41,237,133,.6) 235px,
transparent 235px),
// crayon body shading
linear-gradient(to bottom,
transparent 62%,
black(.3) 100%)
}

完成了div,我们把注意力转移到:before伪类元素上,创建蜡笔的笔头。使用实心和透明的边框,我制作了一个三角形,把它和我之前绘制的div放到一起。

代码如下:

div:before {
height: 10px;
border-right: 48px solid #237449;
border-bottom: 13px solid transparent;
border-top: 13px solid transparent;
}

比起蜡笔笔杆,笔头看起来有点平,我们可以使用:after伪类元素来修复这个问题。我添加一个从顶部到底部的linear-gradient,制作了一个反光效果,贯穿整只蜡笔。

代码如下:

div:after {
background-image: linear-gradient(to bottom,
white(0) 12px,
white(.2) 17px,
white(.2) 19px,
white(0) 24px);
}

这给那个扁平的三角形添加更多的层次感,更加真实。制作接近尾声,我给:after添加一些文字,定位,使得看起来像是印刷在蜡笔包装上的一样。

代码如下:

div:after {
content: 'green';
font-family: Arial, sans-serif;
font-size: 12px;
font-weight: bold;
color: black(.3);
text-align: right;
padding-right: 47px;
padding-top: 17px;
}

大功告成!

另外一个实例

蜡笔作为一个不错的例子,很好地展示了如何使用background-imagegradient来产生真实的效果。下面这个例子将展示多个box-shadow的强大之处:单div的照相机。

这是照相机的主体部分,使用background-imageborder-image制作的

代码如下:

div:before {
background: #333;
box-shadow: 0 0 0 2px #eee,
-1px -1px 1px 3px #333,
-95px 6px 0 0 #ccc,
30px 3px 0 12px #ccc,
-18px 37px 0 46px #ccc,
-96px -6px 0 -6px #555,
-96px -9px 0 -6px #DDD,
-155px -10px 1px 3px #888,
-165px -10px 1px 3px #999,
-170px -10px 1px 3px #666,
-162px -8px 0 5px #555,
85px -4px 1px -3px #ccc,
79px -4px 1px -3px #888,
82px 1px 0 -4px #555;
}

类似的,下面是:after(灰色的圆)以及使用它的box-shadow制作的几个细节部分。

代码如下:

div:after {
background: linear-gradient(45deg, #ccc 40%, #ddd 100%);
border-radius: 50%;
box-shadow: 0 3px 2px #999,
1px -2px 0 white,
-1px -3px 2px #555,
0 0 0 15px #c2c2c2,
0 -2px 0 15px white,
-2px -5px 1px 17px #666,
0 10px 10px 15px black(.3),
-90px -51px 1px -43px #aaa,
-90px -50px 1px -40px #888,
-90px -51px 0 -34px #ccc,
-90px -50px 0 -30px #aaa,
-90px -48px 1px -28px black(.2),
-124px -73px 1px -48px #eee,
-125px -72px 0 -46px #666,
-85px -73px 1px -48px #eee,
-86px -72px 0 -46px #666,
42px -82px 1px -48px #eee,
41px -81px 0 -46px #777,
67px -73px 1px -48px #eee,
66px -72px 0 -46px #666,
-46px -86px 1px -45px #444,
-44px -87px 0 -38px #333,
-44px -86px 0 -37px #ccc,
-44px -85px 0 -34px #999,
14px -89px 1px -48px #eee,
12px -84px 1px -48px #999,
23px -85px 0 -47px #444,
23px -87px 0 -46px #888;
}

有点疯狂?不过你看到了吧, 多个box-shadow确实可以给使用单个div绘图添加很多细节部分。

最大的挑战

我碰到了两个最大的挑战,三角形的限制和gradient独特的行为。

三角形的问题

因为三角形是使用border创建的,这极大地限制了我对它的利用。使用border-imageborder添加gradient,不能单独添加其中一边。无法给border创建出来的三角形添加box-shadow,因为box-shadow是添加在盒模型上的。因此要创建多个三角形就会很困难。看起来就是下面这样:

代码如下:

div {
border-left: 80px solid transparent;
border-right: 80px solid transparent;
border-bottom: 80px solid red;
}
div:before {
border-left: 80px solid transparent;
border-right: 80px solid transparent;
border-bottom: 80px solid red;
border-image: linear-gradient(to right, red, blue);
}
div:after {
border-left: 80px solid transparent;
border-right: 80px solid transparent;
border-bottom: 80px solid red;
box-shadow: 5px 5px 5px gray;
}

多层渐变

渐变的行为就是会填满整个background。在堆叠多个gradient的时候就显得很讲技巧。需要花费额外的时间思考透明度、z-index这些事,还要搞清楚什么要可见,什么不要。不过若能有效地使用gradient,我们的绘图可以包含很多令人惊叹的细节。

Tardis 就是一个很好的例子,显示或隐藏渐变,创建了一张细节极强的图片。下图显示的是绘制的中间过程,可以看到数个从顶部到底部的渐变,宽度填满整个容器

使用从左到右和从右到左的gradient,我可以遮住一部分渐变,同时把其他部分渐变显示出来。

最终的结果看上去包含了很多图形来构成 Tardis 的前面,但实际上它就是层叠的linear-gradient。很多时候不得不伪造呀。

动态地查看它们

源于这个项目,有一个非常酷非常有用的好东西突然出现,那就是 Rafael Carício(@rafaelcaricio) 开发的名为CSS Gradient Inspector的 Chrome 浏览器插件。这个开发工具可以探测且可以开关元素上的每一个 gradient,看起来就像开关一个个层。(它在日常项目中也非常有用。)

关于“如何使用单div实现CSS绘图”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何使用单div实现CSS绘图”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网html频道。

--结束END--

本文标题: 如何使用单div实现CSS绘图

本文链接: https://lsjlt.com/news/89432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何使用单div实现CSS绘图
    这篇文章主要介绍了如何使用单div实现CSS绘图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用单div实现CSS绘图文章都会有所收获,下面我们一起来看看吧。伪元素因为 ...
    99+
    2024-04-02
  • 如何使用单div实现CSS绘图方法
    本篇内容主要讲解“如何使用单div实现CSS绘图方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用单div实现CSS绘图方法”吧! ...
    99+
    2024-04-02
  • 如何使用css实现圆角图形绘制
    本篇内容介绍了“如何使用css实现圆角图形绘制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!htmlXML...
    99+
    2024-04-02
  • CSS绘制:如何实现简单的图形效果
    CSS绘制:如何实现简单的图形效果CSS作为前端开发的重要技术之一,除了样式布局外,还可以利用它绘制简单的图形效果。本文将介绍如何使用CSS来实现一些常见的图形效果,并提供具体的代码示例。一、实现圆形要实现一个简单的圆形效果,可以使用CSS...
    99+
    2023-11-21
    简单 CSS绘制 图形效果
  • CSS绘制:如何实现简单的3D图形效果
    CSS绘制:如何实现简单的3D图形效果在现代网页设计中,要给页面增加一些动态和立体感,常常需要用到3D图形效果。虽然在过去,实现3D效果可能需要使用JavaScript或者专业的3D引擎,但是现在CSS已经足够强大,可以实现一些简单的3D图...
    99+
    2023-11-21
    简单 图形效果 CSSD
  • CSS绘制:如何实现简单的渐变图形效果
    CSS绘制:实现简单的渐变图形效果在网页设计中,渐变图形效果是一种常见的视觉元素,可以为网站增添吸引人的外观和体验。在CSS中,我们可以利用渐变效果轻松地实现各种图形的渐变效果,包括矩形、圆形、文字等。本文将介绍如何使用CSS来实现简单的渐...
    99+
    2023-11-21
    图形 绘制 CSS渐变
  • CSS绘制:如何实现简单的动态图形效果
    CSS绘制:如何实现简单的动态图形效果引言:在前端开发中,我们常常需要对网页进行一些动态的图形效果进行美化和交互增强。而CSS绘制是一种简单而强大的方式,可以实现各种各样的动态图形效果。本文将介绍一些常见的简单动态图形效果,并给出具体的代码...
    99+
    2023-11-21
    CSS动画:利用CSS实现动态效果
  • 如何使用div+css实现网站首页
    这篇文章主要介绍如何使用div+css实现网站首页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!<!DOCTYPE html><html><head&g...
    99+
    2024-04-02
  • 如何使用纯CSS实现单一div的正多边形变换
    这篇文章给大家分享的是有关如何使用纯CSS实现单一div的正多边形变换的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   纯粹利用CSS,让“单一个”div,从正三角形变换为正...
    99+
    2024-04-02
  • 如何使用纯CSS实现图片水平垂直居中于DIV
    这篇文章主要为大家展示了“如何使用纯CSS实现图片水平垂直居中于DIV”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用纯CSS实现图片水平垂直居中于DIV...
    99+
    2024-04-02
  • DIV CSS如何实现表单输入单元点击删除
    这篇文章主要介绍DIV CSS如何实现表单输入单元点击删除,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!DIV CSS表单输入单元点击删除:本列同上则作用类似,只是使用鼠标上略有变化...
    99+
    2024-04-02
  • Div和CSS如何使用列表制作表单
    本篇内容介绍了“Div和CSS如何使用列表制作表单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Div+C...
    99+
    2024-04-02
  • DIV中如何使用css实现​图片垂直、水平居中效果
    小编给大家分享一下DIV中如何使用css实现图片垂直、水平居中效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在DIV中图片垂...
    99+
    2024-04-02
  • DIV CSS如何实现表单输入单元的文字设置
    小编给大家分享一下DIV CSS如何实现表单输入单元的文字设置,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!DIV CSS表单输...
    99+
    2024-04-02
  • DIV CSS如何实现表单输入单元的边框设置
    这篇文章主要介绍DIV CSS如何实现表单输入单元的边框设置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!DIV CSS表单输入单元的边框设置:更改传统的表单单元边框,会让你的主页生...
    99+
    2024-04-02
  • div+css如何实现tabs标签
    这篇文章给大家分享的是有关div+css如何实现tabs标签的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体步骤:创建页签,以及页签内容的div。2、编写被选中的页签和页签内容div显示、隐藏的样式。3、编写j...
    99+
    2023-06-09
  • 如何使用css实现扇形菜单
    这篇文章主要介绍如何使用css实现扇形菜单,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!<!DOCTYPE html><html><head>&l...
    99+
    2024-04-02
  • 如何使用DIV CSS网页布局实现Google首页
    今天就跟大家聊聊有关如何使用DIV CSS网页布局实现Google首页,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们把Google首页用PrtS...
    99+
    2024-04-02
  • 如何使用CSS实现显示和隐藏div元素
    在网页设计和开发中,控制元素的显示和隐藏是一项非常重要的任务。CSS提供了一组属性和方法来实现这个功能,其中最常用的是display属性和visibility属性。本文将介绍如何使用CSS div元素来实现显示和隐藏功能。一、display...
    99+
    2023-05-14
  • CSS中DIV标签如何实现定位单元的控制
    这篇文章将为大家详细讲解有关CSS中DIV标签如何实现定位单元的控制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。你对CSS中DIV标签的用法是否了解,DIV的起始标签和...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作