CSS常见面试题(持续更新)

本文深入探讨CSS面试中常见的问题,包括如何让div高度始终为宽度的一半,创建等宽正方形,单行或多行文本垂直居中,以及各种布局实现方式。此外,还详细介绍了CSS选择器、盒模型、浮动与清除浮动、属性继承性等关键概念,是前端开发者准备面试的必备资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

div高度永远是宽度的一半

image.png

<h1>高度永远为宽度一半</h1>
<div class="height-half-width-wrap">
    <div class="outer">
        <div class="inner">
            <div class="box">hello</div>
        </div>
    </div>
</div>
.height-half-width-wrap .outer {
    width: 400px;
    height: 100%;
    background: blue;
    margin: 0 auto;

    display: flex;
    align-items: center;
}

.height-half-width-wrap .inner {
    position: relative;
    width: 100%;
    height: 0;
    padding-bottom: 50%;
    background: red;
}

.height-half-width-wrap .box {
    position: absolute;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
}
  • margin-top、margin-bottom、padding-top、padding-bottom的百分数值是相对于父元素内容区的宽度计算的。
  • 将height设置为 0,这是为了将元素高度完全交给padding负责。
  • 元素的height为 0,导致该元素里面再有子元素的时候,就无法正常设置高度。所以我们需要用到position: absolute。
  • 据W3C文档,当子元素使用absolute定位时,宽高设定百分比的参考量是其第一个非static祖先元素的padding box宽高,即width/height + padding

大小为父元素宽度一半的正方形

image.png

<div class="half-square-wrap">
    <div class="outer">
        <div class="inner"></div>
    </div>
</div>
.half-square-wrap .outer {
    width: 400px;
    height: 600px;
    background: red;
}

.half-square-wrap .inner {
    width: 50%;
    padding-bottom: 50%;
    background: blue;
}
  • padding-bottom的百分数值是相对于父元素内容区的宽度计算的

实现单行文字、多行文字的垂直居中

image.png

1.利用line-height和vertical-align

<div class="word-vertically-center1">
    <div>
        <span>测试文字测试文字</span>
    </div>
    <div>
        <span>测试文字 <br /> 测试文字<br /> 测试文字<br /> 测试文字<br /> 测试文字<br /> 测试文字</span>
    </div>
</div>
.word-vertically-center1 div {
    float: left;
    width: 200px;
    height: 200px;
    margin: 10px;
    border: 1px solid #000;
    line-height: 200px;
}

.word-vertically-center1 span {
    display: inline-block;
    vertical-align: middle;
    line-height: 22px;
}

2.利用display:table-cell

<div class="word-vertically-center2">
    <div>
        <span>测试文字测试文字</span>
    </div>
    <div>
        <span>测试文字 <br /> 测试文字<br /> 测试文字<br /> 测试文字<br /> 测试文字<br /> 测试文字</span>
    </div>
</div>
.word-vertically-center2 div {
    display: table-cell;
    width: 200px;
    height:150px;
    border:1px solid blue;
    vertical-align: middle;
}

3.利用flex布局align-items:center;

<div class="word-vertically-center3">
    <div>
        <span>测试文字测试文字</span>
    </div>
    <div>
        <span>测试文字 <br /> 测试文字<br /> 测试文字<br /> 测试文字<br /> 测试文字<br /> 测试文字</span>
    </div>
</div>
.word-vertically-center3 div{
    float: left;
    width:
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值