CSS常考面试题

1.盒模型

<style>
    #box {
      width: 200px;
      padding: 10px;
      margin: 10px;
      border: 1px solid #ddd;
     
    }
  </style>
</head>
<body>
  <div id="box">
    你好
  </div>
</body>

HTMLElement.offsetWidth是一个只读属性,返回一个元素的布局宽度offsetWidth是测量包含元素的边框(border)、水平线上的内边(padding)、竖直方向滚动条(scrollbar)(如果存在的话)、以及CSS设置的宽度(width)的值。
在这里插入图片描述
offsetWidth = border-box的宽度也就是到border为止
在这里插入图片描述
在这里插入图片描述
如果希望div元素就占据页面200px,应该怎么办
box-sizing: border-box会将offsetWidth=width
在这里插入图片描述
如果不设置box-sizing: border-box;默认将会是box-sizing: content-box

2.margin合并

块级元素的上外边距与下外边距有时会合并为单个外边距。
在这里插入图片描述
第一个盒子的下边距和第二个盒子的上边距会合并,并且会合并成最大的那个值
margin合并的两个条件:垂直方向、块级元素

margin合并的场景:
1.相邻兄弟元素之间:垂直方向上合并为最大值。
2.父子元素之间:会造成margin-top塌陷(就是垂直方向上的margin不但会发生合并;当父元素没有设置内边距或边框时,以及触发BFC时,如果子元素的值大于父元素时,子元素会带着父元素一起偏移)。
在这里插入图片描述

如何解决父子级元素margin塌陷:
1.将父级元素设为BFC;
2.父级元素设置border-top或border
3.padding-top和padding-left值;
4.父级元素和第一个子元素之间添加内联元素进行分隔。

margin合并的计算规则:
正正取大值;正负值相加;负负取最负。

3.margin负值问题

在这里插入图片描述

4.BFC

在这里插入图片描述
BFC容器没有指定高度时,计算高度要包括浮动元素
在这里插入图片描述

5.圣杯布局和双飞翼布局

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

<style>
    .hearder {
      text-align: center;
      height: 30px;
      background-color: pink;
    }

    .content {
      text-align: center;
      height: 30px;
      background-color: yellow;

      width: 100%;
    }

    .left {
      text-align: center;
      height: 30px;
      background-color: blue;

      width: 100px;;
      margin-left: -100%;
      position: relative;
      left: -100px;
    }

    .right {
      text-align: center;
      height: 30px;
      background-color: darkgreen;

      width: 100px;
      margin-left: -100px;
      position: relative;
      right: -100px;
    }

    .footer {
      text-align: center;
      height: 30px;
      background-color: pink;
    }
    .content,.left,.right{
      float: left
    }
    /* 1.加了float之后页脚向上移,这是因为产生了塌陷 ,所以要添加清除浮动*/
    .clearfix::after{
      content:'';
      display:block;
      clear:both
    }
    /* 2.这样底部就回去了,主区域现在在左边要让他在中间 */
    /* 3.为父元素设置内边距刚好是元素的宽度  给父元素设置内边距会加大元素的面积空间并且会形成限制范围
    第二个元素会先查看是否还有它的空间有就留在页面里*/
    .wapper{
      padding:0 100px;
    }

  </style>
</head>

<body>
  <header class="hearder">头部</header>
 <div class="clearfix wapper">
  <div class="content">主区域</div>
  <div class="left">左区域</div>
  <div class="right">右区域</div>
 </div>
  <footer class="footer">底部</footer>
</body>

在这里插入图片描述
在这里插入图片描述

 <style>
    .hearder {
      text-align: center;
      height: 30px;
      background-color: pink;
    }

    .wrapper{
      width: 100%;
      float: left
    }
    .conter {
      text-align: center;
      height: 30px;
      background-color: yellow;

        /* 为主区域设置外边距 */
      margin: 0 100px;
    }

    .left {
      text-align: center;
      height: 30px;
      background-color: blue;

      width: 100px;
      float: left;
      margin-left: -100%;
    }

    .right {
      text-align: center;
      height: 30px;
      background-color: darkgreen;

      width: 100px;
      float: left;
      margin-left: -100px;
    }

    .footer {
      text-align: center;
      height: 30px;
      background-color: pink;

      clear: both;
    }
    /* 会出现主区域被挡住的情况 
    怎么解决:使得主区域往中间缩进*/
  </style>
</head>

<body>
  <div class="hearder">头部</div>
  <div class="wrapper">
    <div class="conter">主区域</div>
  </div>
  <div class="left">左区域</div>
  <div class="right">右区域</div>
  <div class="footer">底部</div>
</body>

6.calc()应用场景

calc() 函数用于动态计算长度值。
可以组合不同的单位。具体来说,就是我们可以混合使用各种单位来进行计算,如百分比、px、em、rem等单位都可以混在一起使用,计算值是表达式本身,而不是表达式的结果值,这意味着浏览器中的值可以更加动态,并且可以随着视图的变化而改变

calc() 的另外一个用例是用来确保一个表单域的大小适合当前的可用空间,而不会在保持合适的外边距的同时,因挤压超出其容器的边缘。

7.css过渡和动画的区别

css过渡和动画(animation)都能让元素动起来,区别在于:

1、css过渡(transition)需要有一个事件触发(像 :hover,伪类,媒体察觉,js等),才会发生效果,而animation不需要,特别适用于自动运行的效果
2、动画(animation)可以定义很多个关键帧,而过渡不可以。
3、用过渡和动画做一个鼠标悬停时产生动效的效果,当鼠标移开时,用过渡做的效果会缓慢的变回原来的样子,而动画是唰的一下变回原来的样子。
4.animation可以设置infinite来进行遍历循环,不太能与js结合,transition本身不能遍历,可以结合js实现
在这里插入图片描述

8.web安全色

在这里插入图片描述
在这里插入图片描述

9.flex

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
问题:面试官问,知道flex布局吗?那些属性作用在父元素上,那些属性作用在子元素上?

首先看张图片

一般display:flex写在父元素的属性上!下面是基本理解!

在 flex 容器中默认存在两条轴,水平主轴(main axis) 和垂直的交叉轴(cross axis),这是默认的设置

在容器中的每个单元块被称之为 flex item,每个项目占据的主轴空间为 (main size), 占据的交叉轴的空间为 (cross size)。

这里需要强调,不能先入为主认为宽度就是 main size,高度就是 cross size,这个还要取决于你主轴的方向,如果你垂直方向是主轴,那么项目的高度就是 main size。

哪些属性作用在父元素上?

justify-content:space-around space-between space-evently center flex-end

align-items:flex-star flex-end

flex-direction :row row-reverse column column-reverse

flex-wrap :nowrap(如果子孩子,的宽度超过父盒子,会进行总动的伸缩) wrap(不去管)

哪些属性作用在子元素上?
order (项目排列的顺序 越小越靠前)

align-self(单个属性的操作 flex-end center flex-star)

flex-grow(如果剩余有宽度是否进行扩张方法,默认是0,)

flex-shrink (空间不足的时候进行缩小默认是1 进行缩小)

10.box-shadow

在这里插入图片描述
设置内边框:
如果我们需要设置为内边框,那么我们需要用到inset关键字
在这里插入图片描述
双层边框:
在这里插入图片描述

11.垂直居中方法

1.给父元素设置padding
优点:简单,只需设置上下内边距
缺点:父元素不能设置固定高度

父元素有固定高度的时候进行垂宜居中的方法

2.line- height
Line- height就是基线之间的距离,line-height和font- size之差可以得到行距,行距就是文字顶部和底部的空间。也就是line- height会控制行距,如果你有多行文字这个方法就用不了
优点:可设置父元素固定高度
缺点:不太适合多行文字

如果我们需要实现固定高度和多行文字的方法是什么?
不妨为父元素设置弹性布局,并且把方向从上往下排列,加上中间对其
在这里插入图片描述

列表标签需要横排排列:
方法一:
在这里插入图片描述
方法二:
grid三格布局
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值