3D中的CSS:学会用立方体而不是盒子思考

我学习CSS的方法有点不正统。我不是从前端开发人员开始的。我是一个Java开发人员。事实上,我对CSS最早的记忆是在Visual Studio中为事物挑选颜色。 直到后来我才开始着手处理并找到我对前端的热爱。后来才开始探索CSS。当它出现的时候,大约是CSS3起飞的时候。3D和动画是街区里最酷的孩子。他们几乎塑造了我对CSS的学习。他们把我吸引进来,塑造了我对CSS的理解,而不是其他的东西,比如布局、颜色等等。我现在要做的是我一分钟都在做整个3D CSS。就像你花很多时间做的任何事情一样,你最终会在多年的磨练中完善你的过程。这篇文章是我目前如何接近3D CSS和一些提示和技巧,可能会帮助你!https://codepen.io/jh3y/pen/mLaXRe所有东西都是长方体 对于大多数东西,我们可以使用长方体。我们可以创造更复杂的形状,当然,但他们通常需要更多的考虑。曲线是特别困难的,有一些技巧可以处理它们(但稍后会有更多的技巧)。 。我们可以参考安娜·都铎的帖子,或者看看我制作一个的视频:在它的核心,我们用一个元素来包装我们的长方体,然后在其中转换六个元素。每个元素都是长方体的边。我们申请***是很重要的。把它应用到任何地方都不是一个坏主意。当事情变得更复杂时,我们很可能会处理嵌套的长方体。在浏览器之间跳跃时调试丢失的transform-style可能会很痛苦。 * { transform-style: preserve-3d; } 对于多张脸的3D创作,请尝试想象整个场景是由长方体构建的。作为一个真实的例子,考虑一下这个3D书籍的演示。它是四个长方体。每个封面一个,书脊一个,书页一个。使用background-image为我们完成了剩下的工作。设置场景 我们将使用像乐高积木一样的长方体。但是,我们可以通过设置场景和创建一个平面来让我们的生活更轻松一些。这个平面是我们的创作将坐在那里,使我们更容易旋转和移动整个创作。 对我来说,当我创建一个场景时,我喜欢先在X和Y轴上旋转它。然后我把它和rotateX(90deg)放平。这样,当我想在场景中添加一个新的长方体时,我会将它添加到plane元素中。我在这里要做的另一件事是在所有长方体上设置position: absolute。 .plane {transform: rotateX(calc(var(--rotate-x, -24) * 1deg)) rotateY(calc(var(--rotate-y, -24) * 1deg)) rotateX(90deg) translate3d(0, 0, 0);}从样板开始创建不同大小的长方体并跨越一个平面,使得每次创建都有很多重复。出于这个原因,我使用帕格创建我的长方体通过混合。如果你不熟悉帕格,我写了一个5分钟的介绍。 一个典型的场景是这样的: *********//- Front//- Back//- Right//- Left//- Top//- Bottommixin = 0while s div:nth-of-type(1) {height: calc(var(--height) * 1vmin);width: 100%;transform-origin: 50% 50%;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%) rotateX(-90deg) translate3d(0, 0, calc((var(--depth) / 2) * 1vmin));}.cuboid > div:nth-of-type(2) {height: calc(var(--height) * 1vmin);width: 100%;transform-origin: 50% 50%;transform: translate(-50%, -50%) rotateX(-90deg) rotateY(180deg) translate3d(0, 0, calc((var(--depth) / 2) * 1vmin));position: absolute;top: 50%;left: 50%;}.cuboid > div:nth-of-type(3) {height: calc(var(--height) * 1vmin);width: calc(var(--depth) * 1vmin);transform: translate(-50%, -50%) rotateX(-90deg) rotateY(90deg) translate3d(0, 0, calc((var(--width) / 2) * 1vmin));position: absolute;top: 50%;left: 50%;}.cuboid > div:nth-of-type(4) {height: calc(var(--height) * 1vmin);width: calc(var(--depth) * 1vmin);transform: translate(-50%, -50%) rotateX(-90deg) rotateY(-90deg) translate3d(0, 0, calc((var(--width) / 2) * 1vmin));position: absolute;top: 50%;left: 50%;}.cuboid > div:nth-of-type(5) {height: calc(var(--depth) * 1vmin);width: calc(var(--width) * 1vmin);transform: translate(-50%, -50%) translate3d(0, 0, calc((var(--height) / 2) * 1vmin));position: absolute;top: 50%;left: 50%;}.cuboid > div:nth-of-type(6) {height: calc(var(--depth) * 1vmin);width: calc(var(--width) * 1vmin);transform: translate(-50%, -50%) translate3d(0, 0, calc((var(--height) / 2) * -1vmin)) rotateX(180deg);position: absolute;top: 50%;left: 50%;}*/pre> 默认情况下,它给了我这样的东西: 由CSS变量驱动,您可能已经注意到其中有很多CSS变量(也称为自定义属性)。这节省了很多时间。我用CSS变量驱动我的长方体。 - --width:平面上长方体的宽度, - - --height:平面上长方体的高度, - - --depth:平面上长方体的深度, - - --x:平面上的X位置, - - --y:平面上的Y位置保持一切反应灵敏。如果我要创建一个可伸缩的东西,我可能会创建一个响应单元。我们在上一篇文章中提到了这种技术。我再次把飞机平放。现在我可以说我的长方体有高度,宽度和深度。这个演示演示了如何在平面上移动长方体来改变它的尺寸//codepen.io/anon/embed/BaKqQLJ?height=450&;theme id=1&;slug hash=>CodePen嵌入回退调试数据.GUI 您可能已经注意到,右上角的小面板显示了我们介绍的一些演示。那是数据.GUI. 它是一个用于JavaScript的轻量级控制器库,对于调试3D CSS非常有用。由于代码不多,我们可以设置一个面板,允许我们在运行时更改CSS变量。我喜欢做的一件事是使用面板在X和Y轴上旋转平面。这样,你就可以看到事情是如何排列的,或者你一开始可能看不到的部分是如何工作的。但是不要忘记,长方体的每一面都提供了两个伪元素。我们可以用这些来描述各种细节。例如烤面包机槽和侧面把手槽是伪元素。 另一个技巧是使用server.js添加细节。例如,考虑三维工作空间。我们可以使用背景层来创建阴影。我们可以使用实际图像来创建纹理表面。地板和地毯是重复的。事实上,对纹理使用伪元素非常好,因为这样我们就可以在需要时对它们进行变换,就像旋转平铺图像一样。我还发现,在某些情况下,直接使用长方体侧边时会出现闪烁。https://codepen.io/jh3y/pen/XWdQBRx 使用图像作为纹理的一个问题是如何创建不同的色调。我们需要阴影来区分不同的一面。这就是const => { if (answers.length == 0) = {blocks: [], };for (answer of answers) {formatted[\"blocks\"].push({type: \"divider\",});formatted[\"blocks\"].push({type: \"section\",text: {type: \"mrkdwn\",text: answer,},}); }return formatted;};房产可以提供帮助的地方。在长方体的不同侧面使用let = format(answers);过滤器可以使长方体变亮或变暗。考虑一下这个CSS翻转表。所有曲面都使用纹理图像。但为了区分侧面,应用了亮度过滤器。https://codepen.io/jh3y/pen/xJXvjP烟雾和镜子透视图 如何使用有限的元素集来创建形状或我们想要创建的看起来不可能的特征?有时我们可以用一点烟和镜子来欺骗眼睛。我们可以提供一种类似\"人造\"的3D感。Zdog库很好地做到了这一点,是一个很好的例子。 考虑一下这捆气球。握着气球的弦使用正确的视角,每个都有自己的旋转、倾斜等,但气球本身是平的。如果我们旋转平面,气球保持反平面旋转。这给人一种\"人造\"的3D印象。试用演示并关闭计数器。https://codepen.io/jh3y/pen/NWNVgJw有时需要一些开箱思考。我有一个室内植物建议我,因为我建立了三维工作区。我房间里有一些。我最初的想法是,\"不,我可以做一个方形的罐子,我怎么做所有的叶子?\"实际上,我们也可以用一些眼睛的小把戏。抓取一些树叶或植物的图片。用像这样的工具去除背景删除.bg. 然后将多个图像放置在同一点上,但将每个图像旋转一定量。现在,当它们旋转时,我们得到了一个3D植物的印象。 处理笨拙的形状 笨拙的形状很难用一般的方式覆盖。每一种创造都有自己的障碍。但是,有几个例子可以帮助你解决问题。我最近读了一篇关于乐高接口面板用户体验的文章。事实上,接近3D CSS的工作就像它是一个乐高集不是一个坏主意。但是乐高的界面面板是我们可以用CSS做成的形状(减去饰钉——我最近才知道这就是所谓的)。一开始是长方体。然后我们可以剪裁顶面,使端面透明,并旋转一个伪元素将其连接起来。我们可以使用伪元素添加一些背景层的细节。尝试在下面的演示中打开和关闭线框。如果我们想要精确的面部高度和角度,我们可以用一些数学来计算下切面等。 另一个棘手的问题是曲线。球形不在CSS驾驶室。目前我们有多种选择。一种选择是接受这一事实并创建具有有限边数的多边形。另一种是创建圆形的形状,并使用旋转的方法,我们提到的植物。每一种选择都可能奏效。不过,这也是基于用例的。各有利弊。对于多边形,我们放弃曲线或者使用太多的元素,得到一条几乎是曲线的曲线。后者可能导致性能问题。使用透视技巧,我们最终可能会遇到性能问题。我们还放弃了能够设计形状的\"边\"的风格,因为没有任何边。

admin_action_{$_REQUEST[‘action’]}

do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

日期:2020-09-02 17:44:16 浏览:1173

admin_footer-{$GLOBALS[‘hook_suffix’]}

do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

日期:2020-09-02 17:44:20 浏览:1071

customize_save_{$this->id_data[‘base’]}

do_action( "customize_save_{$this->id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

日期:2020-08-15 15:47:24 浏览:808

customize_value_{$this->id_data[‘base’]}

apply_filters( "customize_value_{$this->id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

日期:2020-08-15 15:47:24 浏览:900

get_comment_author_url

过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

日期:2020-08-10 23:06:14 浏览:931

network_admin_edit_{$_GET[‘action’]}

do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

日期:2020-08-02 09:56:09 浏览:879

network_sites_updated_message_{$_GET[‘updated’]}

apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

日期:2020-08-02 09:56:03 浏览:865

pre_wp_is_site_initialized

过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

日期:2020-07-29 10:15:38 浏览:834

WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

日期:2020-10-03 21:18:25 浏览:1734

谷歌的SEO是什么

SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

日期:2020-10-30 17:23:57 浏览:1309