Flex 布局教程:实例篇(二)

本文介绍如何使用HTML和CSS中的Flex布局来绘制骰子的六个面。通过设置不同的对齐方式,实现各点数的准确布局。

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


使用flex布局,绘制骰子的六个面。

先看效果图:

这里写图片描述


html代码:

<body>

    <div class="first-face">
        <span class="pip"></span>
    </div>

    <div class="second-face">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>

    <div class="third-face">
        <span class="pip"></span>
        <span class="pip"></span>
        <span class="pip"></span>
    </div>

    <div class="fourth-face">
        <div class="column">
            <span class="pip"></span>
            <span class="pip"></span>
        </div>
        <div class="column">
            <span class="pip"></span>
            <span class="pip"></span>
        </div>
    </div>

    <div class="fifth-face">
        <div class="column">
            <span class="pip"></span>
            <span class="pip"></span>
        </div>
        <div class="column">
            <span class="pip"></span>
        </div>  
        <div class="column">
            <span class="pip"></span>
            <span class="pip"></span>
        </div>
    </div>

    <div class="sixth-face">
        <div class="column">
            <span class="pip"></span>
            <span class="pip"></span>
            <span class="pip"></span>
        </div>
        <div class="column">
            <span class="pip"></span>
            <span class="pip"></span>
            <span class="pip"></span>
        </div>
    </div>

</body>

CSS代码:

<style type="text/css">
*{
  box-sizing: border-box;/* 通过box-sizing属性,重新定义盒子模型with、height属性所包含的范围:content+padding+border */
}

body,div,span{
    margin:0px;
    padding:0px;
}

html,body{
    height:100%;
}

body{
    /* flex布局,设为flex容器,默认导致所有子元素(项目)同行显示,相当于设置子元素display:inline-block */
    display:flex;
    display:-webkit-flex;
    flex-wrap:wrap;/* 是否换行 */
    justify-content:center;/* 横向对齐方式 */
    align-items:center;/* 纵向对齐方式 */
    align-content:center;/* 多行情况下的纵向对齐方式 */

    vertical-align:middle;
    font-family: 'Open Sans', sans-serif;
    background: linear-gradient(top, #222, #333);
    background:-webkit-linear-gradient(top,#222,#333);
}

[class$='face']{
    display:flex;
    margin:16px;
    padding:4px;
    width:104px;
    height:104px;
    background:#e7e7e7;
    object-fit:contain;/* object-fit属性与background-size属性实现的效果类似 */
    border-radius:10%;/* 添加边框圆角 */

    /* 添加盒子边框阴影 */
    box-shadow:
    0 5px white inset,
    -5px 0 #bbb inset,
    0 -5px #d7d7d7 inset,
    5px 0 #d7d7d7 inset;

}

.pip{
    display:block;/* span设置为块级元素,独占一行 */
    width:24px;
    height:24px;
    margin:4px;
    background:#333;
    border-radius:50%;
    box-shadow:0 3px #111 inset,0 -3px #555 inset;
}

/* 一点 */
.first-face{
    justify-content:center;
    align-items:center;
}

/* 两点 */
.second-face{
    justify-content:space-between;
}

.second-face .pip:nth-child(2){
    /* 
    1、flex容器内的单个项目,调整对齐方式,只有纵向对齐方式可调,通过align-self属性实现。
    2、align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
    3、由1和2可知,flex容器内各个项目对齐方式不统一,先设置flex容器整体项目的对齐方式()主要只横向对齐),然后通过align-self设置具体项目的对齐方式(纵向对齐)
     */
    align-self:flex-end;
}

/* 三点 */
.third-face{
    justify-content:space-between;
}
.third-face .pip:nth-of-type(2){
    align-self:center;
}
.third-face .pip:nth-of-type(3){
    align-self:flex-end;
}

/* 四点和六点 */
.fourth-face,.sixth-face{
    justify-content:space-between;
}
.fourth-face .column,.sixth-face .column{
    display:flex;/* flex布局,设为flex容器,让身为块级元素的子元素(项目)同行显示 */

    /* 
    1、先设置对齐方式,再调整显示方式
    2、如果先调整显示方式,使用的对齐方式属性(justify-content/align-items)应该用调整显示方式之前所对应的属性
     */
    justify-content:space-between;/* 设置航向对齐方式为两端对齐 */
    flex-direction:column;/* 让同行显示的子元素(项目) 纵向显示*/
}

/* 五点 */
.fifth-face{
    justify-content:space-between;/* 先项目两端对齐 */
    flex-direction:column;/* 再项目纵向显示 */
}

.fifth-face .column{
    display:flex;
    justify-content:space-between;
}

.fifth-face .column:nth-child(2){
    justify-content:center;
}
</style>

来源:http://codepen.io/LandonSchropp/pen/KpzzGo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值