昨天做了百度2015年前端研发笔试卷,总体感受是比较看重html和css功底,对JavaScript的考察反而更少一些,貌似阿里也是比较看重css这一块。其中有一道用css实现的布局问题,是在一个大矩形旁边绘制一个三角形,牵涉到css3绘制三角形和定位问题,非常经典的css3酷炫用法,搜了很多资料均是只告诉你用代码怎么实现,却没有解释三角形是怎么形成的,今天早上看到了一篇原理,再加上一些自己的理解,整理出来分享给大家。

题目是这样的

请用CSS实现如下图的样式,相关尺寸如图示,其中dom结构为:
<div id=”demo”></div>
  图a
对于左边这个矩形框,就是一个border就可以搞定的,但是右边凸出来的三角形怎么弄呢?关键人家还是非闭合的 ?要解决这个问题,先来学习一下怎么用css3的border实现画三角形。
1,普通元素加边框,看例子:
<pre name="code" class="html"><style>
#demoContent{width: 100px;height: 100px;border:40px solid lightblue;
}
</style>
<div id="demoContent"></div>

在chrome中的效果,图b  。就是元素周围加了一圈边框对吧。那如果我们把元素大小设置为0呢?

代码是这样的:

<style>
#demoContent{width: 0px;height: 0px;border:40px solid lightblue;
}
</style>
<div id="demoContent"></div>
图c。 这是在chrome中的效果,注意此时只有边框了哦,我们设置边框宽度为40px,此时是一个80*80的矩形。我们知道可以分别为边框设置不同的颜色样式,所以当元素大小为0时,我们分别设置一下边框四条边,看看效果;代码和效果见下图:
#demoContent{/* width: 100px;height: 100px;*/margin-right: 20px;width: 0px;height: 0px;border-top: 40px solid red;border-right: 40px solid lightblue;border-bottom: 40px solid lightgreen;border-left: 40px solid purple;
}<pre name="code" class="javascript" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 22.4px;"><div id="demoContent"></div>
图d。
咦?怎么出来四个三角形啦?为了看看三角形是如何冒出来的,我们还是先看一下当元素有大小的时候,四边分别是设置边框的效果。代码和效果见下
#demoContent{width: 100px;height: 100px;margin-right: 20px;/* width: 0px;height: 0px;*//*border:40px solid lightblue;*/border-top: 40px solid red;border-right: 40px solid lightblue;border-bottom: 40px solid lightgreen;border-left: 40px solid purple;
}<pre name="code" class="javascript" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 22.4px;"><div id="demoContent"></div>
 图e。    图f。
咦,每个边框都变成了梯形?梯形是怎么出现的呢?请注意上图右边长方形的4个角,以左上角为例,它到底是属于左边框还是上边框呢?左上角,既属于左边框,又属于上边框,角落的归属成了一个问题,浏览器为了不让边框打架,就让二位各分一半吧。于是乎左上角就被一分为二,变成了两个三角形,三角形靠近哪个边框,就显示那个边框的颜色。中间白色是元素,想像一下,当元素大小为0的时候,也即去掉白色部分,四个角合到一起是不是就变成了图d的样子,也就是四个三角形?
   到这里我们已经知道三角形怎么形成了,但是是四个三角形,那么我如何只得到一个三角形呢?我们知道border-color属性值可以设置为transparent,即透明,也就是没有颜色。我们想要得到一个三角形,就可以把另外三变设置为transparent。下面看一下左三角和上三角的例子,图和代码见下:
#demoContent{/* width: 100px;height: 100px;*/margin-right: 20px;width: 0px;height: 0px;border:40px solid transparent;border-left: 40px solid purple;
}<pre name="code" class="javascript" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 22.4px;"><div id="demoContent"></div>
  图g和图h。 要得到上三角只需要把border-left换成border-top就好啦。
到此为止,我们知道了如何获得一个三角形,下面进入正题,看看如何得到百度的要求。
对于左边的 矩形框,首先我们要有一个100*100的元素,然后加上黑色边框,为了得到后面三角形,我们从上面例子可以看出,三角形是填充的,所以这里需要两个三角形,小的三角形为透明遮盖一部分大三角形,剩下的边就是三角形边了。后面那两个元素,我们用伪类实现,注意百度的三角形还有位置关系,所以我们将父元素设置为相对定位,伪元素设置为决对定位。看代码:

#baidu1{width: 100px;height: 100px;border:2px solid #000;   //左边的矩形框position: relative;margin-right: 10px;
}
#baidu1:before,#baidu1:after{content: ' ';position: absolute;left: 100%;border: solid transparent;    //伪元素设置为透明框
}
#baidu1:after{width: 0px;height: 0px;top:20px;border-width: 10px;border-left: 10px solid  #fff;    //after元素,左三角形,白色,小三角形,会遮盖before元素
}
#baidu1:before{width: 0px;height: 0px;top:18px;border-width: 12px;border-left: 12px solid #000;  //黑色大左三角形,被白色覆盖一部分,正好剩下2px的边
}

OK了看图。利用三角形还可以绘制很多有意思的图形,更多的请看下面这两个网址。点击打开链接     点击打开链接 。

百度前端笔试题 css3画三角形相关推荐

  1. 前端笔试题面试题记录(上)

    前言 过完元宵,就到上海找了波工作,现在已经入职好了,蹭波热点,写一波面试记录,内容包含笔试题和面试题,还有一些没有写进来,准备再开一篇,许久没写了,写的确实有些慢.如果喜欢的话可以点波赞,或者关注一 ...

  2. 前端笔试题面试题记录(下)

    前言 接上篇前端笔试题面试题记录(上).趁清明小长假,把上篇剩下的部分也写一下,因为最近比较忙这篇已经拖了很久了.现在刚刚开始银四了,应该还是有些小伙伴在找工作,时间还不算太晚,希望本篇可以帮到这些小 ...

  3. css3画一个三角形,css3 画三角形

    /*箭头向上*/ .arrow-up { width:0; height:0; border-left:20px solid transparent; border-right:20px solid ...

  4. 也许你需要点实用的-Web前端笔试题

    之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉. Web前端笔试题 Html+css 1.对WEB标准以及w ...

  5. 前端笔试题小结(一)

    前端笔试题小结(一) 2020-03-13 题目一: 将一个js数组去重. 样例: 输入:[ 1, "apple", 3, "a", 3, 1, 5, 6, & ...

  6. 前端笔试题【1】--从字符串的第二个字符开始对数组进行排序

    前一段时间做过一个阿里的前端笔试题:从字符串的第二个字符开始对数组进行排序.当时没想到简单的方法,这几天看书才发现sort()还可以自定义一个比较函数,郁闷啊啊啊~~ 看来基础还是不够扎实啊, 赶紧记 ...

  7. 【Python】:用python做下百度2014笔试题

    国庆节最后一天,明天就要上班了,闲来无事做做百度2014笔试题,好久没用过C++了,索性就用python简单的写一下,体验下题目难度.题目是从[大卫David]那里copy过来的. 1.给定任意一个正 ...

  8. 2017网易前端笔试题总结

    整理了一下2017网易前端笔试题,附上了自己的答案,仅供参考,欢迎讨论和交流.如果有什么不对的地方,欢迎指正. 题目整理(不含答案) 网盘分享: 链接: https://pan.baidu.com/s ...

  9. html5 笔试题 选择题,2019拼多多前端笔试题

    选择.填空题: 1.IP地址,子网掩码的计算 2.Internet网络层重要协议 3.http请求方法 4.HTML中a标签的伪类 5.alert(undefined==null)的输出结果 6.ht ...

最新文章

  1. 在线考试系统html模板,请问谁有在线考试系统的网页模板?
  2. pycharm中的terminal解释器和project 解释器不统一问题
  3. 二值网络训练--Training Competitive Binary Neural Networks from Scratch
  4. ARM 汇编语言入门
  5. django 监控爬虫_django高级之爬虫基础
  6. Android百度SDK定位
  7. coding4fun比赛总结
  8. Java中对象及常量,局部变量,全局变量的存储位置
  9. Docker教程小白实操入门(5)--如何进入一个容器
  10. 2017.0622.《计算机组成原理》-虚拟存储器和主存
  11. 易语言大漠插件模块制作使用系统字库找字
  12. 推荐 4 个开源小程序
  13. react 加粗_css字体如何加粗?
  14. 算数平均数\几何平均数\调和平均数
  15. 华硕主板如何设置开机自启_教你华硕主板bios怎么设置硬盘启动
  16. android+桌面组件开发,android——桌面组件的开发
  17. Linux C编程 —— 通过文件描述符获得文件路径
  18. android 跑马灯速度,textView跑马灯效果
  19. MySQL给表和字段添加注释
  20. 【IM集成攻略】手把手教你环信对接离线推送,再搞不定把你头打掉

热门文章

  1. ArrayIndexOutOfBoundsException数组下标越界异常的解决过程
  2. 知识变现创业者必读——《知识变现实操手册》
  3. 双层循环遍历 减少时间复杂度
  4. java原生和SpringBoot读取jar包中MANIFEST.MF的方式
  5. 惠普激光打印机硒鼓加碳粉图解篇
  6. 美式期权二叉树matlab代码,美式期权二叉树定价,美式看涨期权二叉树可以提前执行吗...
  7. CPU性能测试基准(EEMBC-CoreMark)
  8. Hello Lyq And Xj
  9. A ResourcePool could not acquire a resource from its primary factory or source异常解决
  10. WPS压力传感器测高温部件的注意事项