[css]我要用css画幅画(九) - Apple Logo

接着之前的[css]我要用css画幅画(八) - Hello Kitty,这次画的是苹果公司的logo

这次打算将分析和实现步骤尽量详细的说一说。

其实之前的也打算详细讲分析和设计过程,不过之前的图比较复杂,如果讲那么细,真是怕要讲到猴年马月。

这次的图足够简单,就拿这个图来说明。

都是一些简单的基本方法,通过举一反三,可以实现大部分效果。

Github Demo:http://bee0060.github.io/Css-Paint/pages/logo/apple.html

Code Pen Demo: http://codepen.io/bee0060/pen/QNBVLE

代码:https://github.com/bee0060/Css-Paint

原图如下:

我实现这个图的方法,跟以前一样,也是将其拆分成多个易实现的简单形状。

虽然这个图并不复杂,不过我也是尝试过几种方法后,才最终定下解决方案。

我下面要说的解决方案就是关于如何拆分原图的。

我是这么拆的:

1. 显而易见的,先将叶子拆除去单独实现。 叶子也是最容易实现得,代码如下:

1 <div class="apple-leaf pos-a m-hoz-auto bacc-white"></div>

html

1 .apple-leaf {
2     border-top-left-radius: 100%;
3     border-bottom-right-radius: 100%;
4     height: 55px;
5     left: 49%;
6     top: -43px;
7     width: 45px;
8     z-index: 6;
9 }

css

2. 将苹果拆成上中下三个部分,如下图红线所示:

3. 先实现中间部分,暂称为“苹果身”, 实现过程如下:

  3.1 还没被咬的苹果

    苹果身是用一个不规则圆形,放在一个稍小的容器中,让圆的顶部和底部都超出容器, 容器设置overflow:hidden;

    让顶部和底部超出容器,是为了让之后和苹果的上下部分的圆边更容易协调的衔接起来。 如下所示:

  有点丑,但是不要在意细节。 在实际的图中,都是没有边框的,这里的边框只是为了表示容器和不规则圆的形状和位置。

  其中红色边框表示容器, 黑色边框表示不规则圆。

  上述图形的代码为:

1 <div class="apple-body border-red-2">
2         <div class="apple-body-inside border-black-2"></div>
3     </div>    

html

 1 .border-black-2 {
 2     border: 2px solid black;
 3 }
 4
 5
 6 .border-red-2 {
 7     border: 2px solid red;
 8 }
 9
10 .apple-body {
11     height: 150px;
12     width: 200px;
13     z-index: 3;
14 }
15
16 .apple-body-inside {
17     border-top-left-radius: 60px 70px;
18     border-top-right-radius: 60px 70px;
19     border-bottom-left-radius: 100px 115px;
20     border-bottom-right-radius: 100px 115px;
21     height: 175px;
22     margin-top: -5px;
23     width: 200px;
24     z-index: 3;
25 }

css

  很明显,apple-body就是容器类, apple-body-inside是里面的不规则圆。

  在给圆上色(设置黑色背景色)并给容器设置overflow:hidden后, 就成了以下这个样子:

  对应的主要代码没变,因为上色和overflow的属性我已经抽取到common.css中,只要添加相应的类即可。如下:

1 <div class="apple-body bacc-black oh border-black-2">
2         <div class="apple-body-inside bacc-white"></div>
3     </div>

html

 1 .oh {
 2     overflow: hidden;
 3 }
 4 .bacc-white {
 5     background-color: white;
 6 }
 7
 8 .bacc-black {
 9     background-color: black;
10 }
11 .apple-body {
12     height: 150px;
13     width: 200px;
14     z-index: 3;
15 }
16
17 .apple-body-inside {
18     border-top-left-radius: 60px 70px;
19     border-top-right-radius: 60px 70px;
20     border-bottom-left-radius: 100px 115px;
21     border-bottom-right-radius: 100px 115px;
22     height: 175px;
23     margin-top: -5px;
24     width: 200px;
25     z-index: 3;
26 }

css

  3.2 被咬了后

    这个效果是用一个黑色圆形来遮盖实现的。 只需要调整一下圆的大小和位置即可。 效果和代码如下:

1 <div class="apple-ate pos-a pull-left bacc-black"></div>

html

1 .apple-ate {
2     border-radius: 50%;
3     height: 95px;
4     margin-left: 160px;
5     margin-top: 8px;
6     width: 95px;
7 }

css

4.苹果的上部分,暂称为“苹果上身”,实现过程如下:

  可以看到,苹果上身是波浪形的圆弧, 为了实现,我将波浪形切割成3个部分,每个部分暂称为圆弧,朝向分别是上下上,背景色分别是白黑白。然后将其连接起来,调整位置和圆角弧度(border-radius)的值来使其尽量协调。

  其中每个圆边都是用和苹果身类似的技巧, 用一个overflow:hidden的小容器,包含一个较大的圆,并只显示其中所需的部分,形成圆弧。 且左右两个圆弧只是位置不同(margin-left),其他属性相同。

  切割图如下:

  

  这里继续用红线表示切割(大家不会想歪)。

  这里的策略是两个向上的白色圆弧分布两边,一个向下的黑色圆弧进行适当遮盖,以形成波浪。

  4.1 向上的圆弧形状如下:

  

  和苹果身一样, 红框表示容器,黑框表示圆,只有红框内的部分才会被显示,上色后效果和代码如下:

  

1 <div class="apple-body-top-left oh pos-r pull-left bacc-black">
2         <div class="apple-body-top-left-inside bacc-white"></div>
3     </div>

html

 1 .apple-body-top-left {
 2     height: 15px;
 3     width: 65px;
 4     z-index: 4;
 5 }
 6
 7 .apple-body-top-left-inside {
 8     border-radius: 50%;
 9     height: 75px;
10     margin-top: 8px;
11     margin-left: -17px;
12     width: 82px;
13 }

css

  另一个向上圆弧只是margin-left属性不同,就不再敖述了。

  4.2 向下的圆弧的形状如下:

  

  红框黑框就不再敖述了, 这里需要注意的是,由于要用向下黑色圆弧遮盖向上的白色圆弧,所以在html中,我是把向下圆弧放在最后,这样z-index一样就可以实现遮盖,这样不用管理多一个z-index的值,让复杂度不至于增加。尽量keep it simple.

  上色后效果和代码如下:

  

1 <div class="apple-body-top-center pos-a pull-left oh bacc-white">
2                 <div class="apple-body-top-center-inside bacc-black"></div>
3             </div>

html

 1 .apple-body-top-center {
 2     height: 15px;
 3     left: 20px;
 4     top: 4px;
 5     width: 85px;
 6     z-index: 5;
 7 }
 8
 9 .apple-body-top-center-inside {
10     border-radius: 50%;
11     height: 95px;
12     margin-left: 1px;
13     margin-top: -80px;
14     width: 87px;
15     z-index: 5;
16 }

css

5. 最后只剩下“苹果下身”了, 技巧和苹果上身相同,只是一些宽高、位置属性不同,在这里就也是不再敖述了。

6. 画完了, 最终效果就不用截图了,请直接点下面的demo链接看吧。

  完整代码如下:

 1 <div class="apple-container pos-r m-hoz-auto">
 2         <div class="apple-leaf pos-a m-hoz-auto bacc-white"></div>
 3         <div class="apple-body-top pos-r m-hoz-auto">
 4             <div class="apple-body-top-left oh pos-r pull-left">
 5                 <div class="apple-body-top-left-inside bacc-white"></div>
 6             </div>
 7             <div class="apple-body-top-right oh pos-r pull-left">
 8                 <div class="apple-body-top-right-inside bacc-white"></div>
 9             </div>
10             <div class="apple-body-top-center oh pos-a pull-left">
11                 <div class="apple-body-top-center-inside bacc-black"></div>
12             </div>
13         </div>
14         <div class="apple-body pos-r oh m-hoz-auto">
15             <div class="apple-body-inside pull-left  bacc-white"></div>
16             <div class="apple-ate pos-a pull-left bacc-black"></div>
17         </div>
18         <div class="apple-body-bottom pos-r m-hoz-auto">
19             <div class="apple-body-bottom-left oh pos-r pull-left">
20                 <div class="apple-body-bottom-left-inside bacc-white"></div>
21             </div>
22             <div class="apple-body-bottom-right oh pos-r pull-left">
23                 <div class="apple-body-bottom-right-inside bacc-white"></div>
24             </div>
25             <div class="apple-body-bottom-center oh pos-a pull-left">
26                 <div class="apple-body-bottom-center-inside bacc-black"></div>
27             </div>
28         </div>
29     </div>

html

  1 .apple-container {
  2     height: 600px;
  3     margin-top: 100px;
  4     margin-bottom: 100px;
  5     width: 600px;
  6 }
  7
  8 .apple-leaf {
  9     border-top-left-radius: 100%;
 10     border-bottom-right-radius: 100%;
 11     height: 55px;
 12     left: 49%;
 13     top: -43px;
 14     width: 45px;
 15     z-index: 6;
 16 }
 17
 18 .apple-body-top {
 19     height: 15px;
 20     width: 130px;
 21 }
 22
 23 .apple-body-top-left {
 24     height: 15px;
 25     width: 65px;
 26     z-index: 4;
 27 }
 28
 29 .apple-body-top-left-inside {
 30     border-radius: 50%;
 31     height: 75px;
 32     margin-top: 8px;
 33     margin-left: -17px;
 34     width: 82px;
 35 }
 36
 37 .apple-body-top-right {
 38     height: 15px;
 39     width: 65px;
 40     z-index: 4;
 41 }
 42
 43 .apple-body-top-right-inside {
 44     border-radius: 50%;
 45     height: 75px;
 46     margin-top: 8px;
 47     margin-left: 1px;
 48     width: 82px;
 49 }
 50
 51 .apple-body-top-center {
 52     height: 15px;
 53     left: 20px;
 54     top: 4px;
 55     width: 85px;
 56     z-index: 5;
 57 }
 58
 59 .apple-body-top-center-inside {
 60     border-radius: 50%;
 61     height: 95px;
 62     margin-left: 1px;
 63     margin-top: -80px;
 64     width: 87px;
 65     z-index: 5;
 66 }
 67
 68 .apple-body {
 69     height: 150px;
 70     width: 200px;
 71     z-index: 3;
 72 }
 73
 74 .apple-body-inside {
 75     border-top-left-radius: 60px 70px;
 76     border-top-right-radius: 60px 70px;
 77     border-bottom-left-radius: 100px 115px;
 78     border-bottom-right-radius: 100px 115px;
 79     height: 175px;
 80     margin-top: -5px;
 81     width: 200px;
 82     z-index: 3;
 83 }
 84
 85 .apple-ate {
 86     border-radius: 50%;
 87     height: 95px;
 88     margin-left: 160px;
 89     margin-top: 8px;
 90     width: 95px;
 91 }
 92
 93 .apple-body-bottom {
 94     height: 15px;
 95     width: 130px;
 96 }
 97
 98 .apple-body-bottom-left {
 99     height: 15px;
100     width: 65px;
101     z-index: 4;
102 }
103
104 .apple-body-bottom-left-inside {
105     border-radius: 50%;
106     height: 75px;
107     margin-top: -66px;
108     margin-left: -7px;
109     width: 70px;
110 }
111
112 .apple-body-bottom-right {
113     height: 15px;
114     width: 65px;
115     z-index: 4;
116 }
117
118 .apple-body-bottom-right-inside {
119     border-radius: 50%;
120     height: 75px;
121     margin-top: -66px;
122     margin-left: 2px;
123     width: 70px;
124 }
125
126 .apple-body-bottom-center {
127     height: 15px;
128     left: 28px;
129     top: -3px;
130     width: 70px;
131     z-index: 5;
132 }
133
134 .apple-body-bottom-center-inside {
135     border-radius: 50%;
136     height: 95px;
137     margin-left: -6px;
138     width: 87px;
139 }

css

Github Demo:http://bee0060.github.io/Css-Paint/pages/logo/apple.html

Code Pen Demo: http://codepen.io/bee0060/pen/QNBVLE

代码:https://github.com/bee0060/Css-Paint

以上技巧都很简单且基础,不过通过灵活运用也可以实现很多圆弧类的效果,如之前的两幅画都是大量用到这些技巧。

如发现什么错漏,欢迎指出; 如果有什么想法,也非常欢迎交流。

谢谢观看。

转载请注明出处:[css]我要用css画幅画(九) - Apple Logo

时间: 2024-10-24 08:48:27

[css]我要用css画幅画(九) - Apple Logo的相关文章

[css]我要用css画幅画(四)

接着之前的[css]我要用css画幅画(三), 今天,我画了两朵云,并给小明介绍了个朋友:静静. github:https://github.com/bee0060/Css-Paint , 完整代码在pages/sun-house-4.html和相关的css中可以找到 demo: http://bee0060.github.io/Css-Paint/pages/sun-house-4.html 完整html如下: 1 <!DOCTYPE html> 2 <html lang="

[css]我要用css画幅画

几年前开始就一直想用css画幅画. 今天才真正开始, 从简单的开始. 作为一个工作压力那么大的程序员,我首先要画一个太阳. html如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Css Paint</title> 6 <link rel="stylesheet

[css]我要用css画幅画(七) - 哆啦A梦

接着之前的[css]我要用css画幅画(六),今天画的有所不同,画的是哆啦A梦,我们小时候对他的称呼其实是小叮当机器猫. (PS:这次我要做的事情,很多人已经做过,这并不是什么创新,我只是在学习并记录下学习的过程) 这次就不多说CSS属性的基础概念了. 说说我画的过程吧, 好,进入正题. 因为和之前的瞎画不同,这次是画现有的东西.我认为临摹是比较简单的. 我先上网找了下要临摹的对象,找了个最中规中矩的图片,如下: 这对我来说不是一个简单的任务, 而我处理不简单的任务的解决方案,就是把他拆分再拆分

[css]我要用css画幅画(五)

接着之前的[css]我要用css画幅画(四), 这次我给小明和静静增加了对话,用了简单的动画效果. github:https://github.com/bee0060/Css-Paint , 完整代码在pages/sun-house-4.html和相关的css中可以找到 demo: http://bee0060.github.io/Css-Paint/pages/sun-house-5.html 完整html如下: 1 <!DOCTYPE html> 2 <html lang="

[css]我要用css画幅画(二)

接着之前的[css]我要用css画幅画(一) , 今天,我又画一个房子,很简单,屋顶.墙壁.门. 现在开始,做得效果都只兼容chrome,所以下面的css3的属性可能只有-webkit-前缀. 我只是为了兴趣画画, 何必理会兼容性呢,是吧? html如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title

CSS 文本字体颜色(CSS color)

CSS 颜色样式篇 目录 (音乐放松椅) 认识CSS 颜色(color) 网页颜色基础 两种方法设置对象颜色样式 文字颜色控制color 网页背景颜色color 边框颜色color 网页color RGB设置 网页color 颜色表 css 颜色样式color总结 一.认识CSS 颜色(CSS color) - TOP(音乐放松椅) 这里要介绍的是网页设置颜色包含有哪些:网页颜色规定规范.1.常用颜色地方包含:字体颜色.超链接颜色.网页背景颜色.边框颜色2.颜色规范与颜色规定:网页使用RGB模式

CSS 定位 (Positioning) CSS 外边距合并 CSS 相对定位

CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. 定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置.显然,这个功能非常强大,也很让人吃惊.要知道,用户代理对 CSS2 中定位的支持远胜于对其它方面的支持,对此不应感到奇怪. 另一方面

CSS学习笔记02 CSS选择器

1.通配符选择器 通配符选择器用“*"号表示,是所有选择器中作用范围最广的,能匹配页面中所有的元素 /*设置当前页面中所有标签的颜色为红色*/ * { color: red; } 2.标签选择器 标签选择器就是选择当前页面中相同名字的标签 /*设置所有p标签的文字颜色为红色*/ p { color: red; } 3.ID选择器 id选择器使用"#"进行标识,后面紧跟id名 /*设置id为title的标签的文字颜色为红色*/#title { color: red; } <

PHP.9-HTML+CSS(三)-CSS样式

CSS样式 CSS是Cascading Style Sheets的简写,它除了可以轻松设置网页元素的显示位置和格式处,甚至还能产生滤镜,图像淡化,网页淡入淡出的渐变效果.CSS就是要对网页的显示效果实现与Word一样的排版控制一个段落.字体.颜色.背景.边框等. 注:注释/*  */里面不能再包含注释   1.CSS的四种设置方式 内联样式表:在HTML元素标签中使用style属性内联,在需要相同样式情况下,不适用 每个HTML标签都可以加样式,如下:   <span style="fon