CSS 文本水平和垂直都居中

我想实现如下效果,一个listitem,前后各有一个图标,中间的文本居中显示,可是现在始终无法垂直居中,搞了半天了,很困惑。求助。请修改 .business_name这个类的样式。
代码如下:

<template>
    <div id="business_item_container">
        <div class="start_icon">
            <img class="icon_img" src="@/assets/logo.png"/>
        </div>
        <div class="item_name">
            <p class="business_name">align center</p>
        </div>
        <div class="end_icon">
            <img class="icon_img" src="@/assets/logo.png"/>
        </div>
    </div>
</template>

<script>
    export default {
        name: "BusinessItem",
        props: ['itemName'],
        methods: {
            onBusinessItemClick() {
                window.console.log('clicked!');
            }
        }
    }
</script>

<style scoped>
    #business_item_container {
        height: 100px;
        margin: 10px 4px 4px 4px;
        padding: 10px;
        border-radius: 4px !important;
        box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3) !important;
        text-align: center;
    }

    .start_icon {
        position: relative;
        display: inline-block;
        height: 100%;
        width: 40px;
        background-color: red;

    }

    .item_name {
        position: relative;
        display: inline-block;
        height: 100%;
        width: calc(100% - 2 * 40px);
        background-color: green;
    }

    .business_name {
        width: 100%;
        height: 20px;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        background-color: yellow;
    }

    .end_icon {
        position: relative;
        display: inline-block;
        height: 100%;
        width: 40px;
        background-color: red;
    }

    .icon_img {
        width: 30px;
        height: 30px;

        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
    }
</style>

效果图如下:
黄色的段落没有在父容器(绿色区块)中垂直居中。
图片描述

阅读 16.8k
6 个回答

clipboard.png
加上margin:0; 即可

 .business_name{
    width: 100%;
    height: 20px;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    background-color: yellow;
    margin: 0; // 加一句
}

这样试试

* {
      margin: 0;
      padding: 0;
  }
item_name{
    display: -webkit-flex;
    display: flex;
    justify-content: center;
    align-items: center;
}

其实已经居中了,只是又被margin怼下去了
p 加上 margin: 0 就行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题