zoukankan      html  css  js  c++  java
  • 前端面试攻略3------HTML和CSS部分

     html和css基础部分

    1.盒模型概念

    CSS盒子模型又称框模型 (Box Model) ,包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素。

    元素框的总宽度 = 元素(element)的width + padding的左边距和右边距的值 + margin的左边距和右边距的值 + border的左右宽度;

    元素框的总高度 = 元素(element)的height + padding的上下边距的值 + margin的上下边距的值 + border的上下宽度

    2.position定位属性和相关的关系

    例如relative占用文档流,而absolute和fixed却不占用,还有relative和absolute结合使用会有变化。

     relative
    relative属性相对比较简单,我们要搞清它是相对哪个对象来进行偏移的。答案是它本身的位置。在上面的代码中,sub1和sub2是同级关系,如果设定sub1一个relative属性,比如设置如下CSS代码:

    #sub1
    {
        position: relative;
        padding: 5px;
        top: 5px;
        left: 5px;
    }

    我们可以这样理解,如果不设置relative属性,sub1的位置按照正常的文档流,它应该处于某个位置。但当设置sub1为的position为relative后,将根据top,right,bottom,left的值按照它理应所在的位置进行偏移,relative的“相对的”意思也正体现于此。
    对于此,您只需要记住,sub1如果不设置relative时它应该在哪里,一旦设置后就按照它理应在的位置进行偏移。
    随后的问题是,sub2的位置又在哪里呢?答案是它原来在哪里,现在就在哪里,它的位置不会因为sub1增加了position的属性而发生改变。
    如果此时把sub2的position也设置为relative,会发生什么现象?此时依然和sub1一样,按照它原来应有的位置进行偏移。
    注意relative的偏移是基于对象的margin的左上侧的。
    absolute
    这个属性总是有人给出误导。说当position属性设为absolute后,总是按照浏览器窗口来进行定位的,这其实是错误的。实际上,这是fixed属性的特点。
    当sub1的position设置为absolute后,其到底以谁为对象进行偏移呢?这里分为两种情况:
    (1)当sub1的父对象(或曾祖父,只要是父级对象)parent也设置了position属性,且position的属性值为absolute或者relative时,也就是说,不是默认值的情况,此时sub1按照这个parent来进行定位。
    注意,对象虽然确定好了,但有些细节需要您的注意,那就是我们到底以parent的哪个定位点来进行定位呢?如果parent设定了margin,border,padding等属性,那么这个定位点将忽略padding,将会从padding开始的地方(即只从padding的左上角开始)进行定位,这与我们会想当然的以为会以margin的左上端开始定位的想法是不同的。

    接下来的问题是,sub2的位置到哪里去了呢?由于当position设置为absolute后,会导致sub1溢出正常的文档流,就像它不属于 parent一样,它漂浮了起来,在DreamWeaver中把它称为“层”,其实意思是一样的。此时sub2将获得sub1的位置,它的文档流不再基于 sub1,而是直接从parent开始。
    (2)如果sub1不存在一个有着position属性的父对象,那么那就会以body为定位对象,按照浏览器的窗口进行定位,这个比较容易理解。
    fixed
    fixed是特殊的absolute,即fixed总是以body为定位对象的,按照浏览器的窗口进行定位。
    static
    position的默认值,一般不设置position属性时,会按照正常的文档流进行排列。

    3.display相关属性

    常用的block、inline等等。

    inline:内联元素,设置高度和宽度无效,通过内部元素撑开。
    像span label等都是内联元素

    block:块级元素,可以设置高,宽度默认占满100%

    none:隐藏dom元素,这个很简单,没有可说的。

    inline-block:行内块元素,可以设置宽度和高度。是上面两种属性的综合。如果不设置宽度,就由内部子元素撑开。

    list-item:元素内容生成一个块型盒,随后再生成一个列表型的行内盒 li默认这个属性。它和block的区别,list-item前面默认有个点。

    flex:弹性盒子布局,还是有些坑的,使用时候特别注意浏览器兼容性。

    4.IFC和BFC问题。
    5.双飞翼布局。
    6.垂直居中、水平居中的多种方式和方法,这俩个都有很多的方法,尽量每个都记下来4个方法以上。应该就没问题了。但是要注意能说明白每一个方式方法的限制。例如我们使用line-height的时候需要知道高度等等。而且还有要注意字体的居中和块级元素等居中是不一样的。
    7.圣杯布局(别人考过,我基本没被问过。)
    8.rem、em的使用。
    9.less等预处理语言。
    10.媒体查询。
    11.vh和vw,当然这个考的实在太少。
    12.h5的语义化部分。这个其实在面试上是比较重要的一个问题,例如楼主蘑菇街当时就有一个问题问我实现删除线怎么办。当然有html基础标签和css样式了。他就问哪种更好。当时楼主一脸蒙蔽的说html的方式更好。最后被问原因的时候说了一大堆不重要的,最后面试官告诉我是在语义化的方面考虑的。。。
    13.h5 的web worker 还有websocket。这些不需要你真正使用过,但是要明白他们在什么场景下使用。就可以了。自己拿菜鸟教程上代码的实验一下就可以了。websocket内部还有一些关于协议的部分。要自己弄懂。
    14.h5的语义化标签都有什么,大致看一下,记住一部分。还有新加的例如video这些东西。
    15.css3的都很重要,包括transform、transition、animate这些都好好看一下。
    16.css选择器的优先级,也就是class id 元素选择器这些的优先级计算。
    17.css样式表引用的优先级部分。例如link引用或者行内都设置了字体颜色,问字体此时显示什么字体。
    18.清除浮动。
    19.canves 某些特别的公司部门可能需要,但是我至今没有被问过。
    20.css实现响应式的方式。
  • 相关阅读:
    一个小案例精通lamda表达式
    你想被开除吗?来看看程序员【离职小技巧】吧
    让 Flutter 在鸿蒙系统上跑起来
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    环形单链表的增删改查、约瑟夫环两种解法
    一万字详解 Redis Cluster Gossip 协议
    Lambda表达式
    Linux系统中如何进入退出vim编辑器,方法及区别
    成为博客主的第一天
    【秋招内推】近期互联网公司秋招内推合集
  • 原文地址:https://www.cnblogs.com/NightTiger/p/10501753.html
Copyright © 2011-2022 走看看