• 常见居中问题总结


    居中是css里的一个大坑,基本上找不到万能的解决方法。虽然目前来讲弹性布局非常好用,但是兼容性还是一个大问题。所以这里就专门记录我遇到的居中问题和相对应的解决方法,方法不一定是最好的,但是确实有效。

    div+span

    项目中一个页面至少遇到两次这种坑,可见这个结构还是很重要的。这一结构常用来自定义标签栏,或者状态栏,如下:

    这两个都是同一种结构,但是细节上还是有差别。

    情况一

    第一张图只需要文字居中即可,我的解决方案如下:

    设置height=line-height,再添加text-align=center属性

    100px;             
    height:100px;             
    line-height:100px;             
    text-align:center;             
    background:gray;
    

    具体的原理虽然看过,但是记不清了,这里还不是很懂行高和元素高一致的作用。这里等大佬解释,或者以后系统性回顾的时候再解决。

    情况二

    情况二就比较麻烦了,因为左一控件“已选XX/XX”只是标签,而右边四个控件全是button。这五个控件在同一个父元素div下,button默认是垂直居中的,而状态标签默认是贴上的,而且默认不和button在同一行,再加上中间文字位置也乱七八糟,着实让人恶心。

    最终解决方案如下,直接复制代码了:

    
    #btn_select_bar div {
        float: left;
        margin: 5px 10px 0px 0px;
        height: 40px;
         100px;
        border: 1px solid #a2e3f2;
        border-radius: 5px;
    }
    
    #btn_select_bar div span {
        text-align: center;
        display: block;
        position: relative;
        top: 50%;
        transform: translateY(-50%);
    }
    

    首先float浮动解决分层的问题,这是外框。下面是解决内部文字的问题,用上面的方法是行不通的,也是找了好久才解决这个。根据排除法,里面每一个属性都是必要的,但是我不是很懂display的作用。好吧,又一次Hacker,问题留待大佬解答,或者以后回顾解决。

    div+div

    这种也是很常见的吧。在我的项目中,遇到一个就是居中的卡片问题,如下:

    首先卡片外框是水平居中的div,如果用其他方式很麻烦,这里用flex弹性布局justify-content: center就轻松搞定。麻烦的是内部文字需要垂直水平居中。

    这里的解决方案如下:

    设置父元素(即外框)为relative,子元素(即元素)为absolute,再给子元素添加以下css

    top: 50%; 
    left: 50%; 
    transform: translate(-50%, -50%)
    

    以上真是一行代码都不能少。当然,要做到我上面那种效果还需要添加text-align: center。我个人勉强能懂top/left这些位移属性的作用,但还是不大懂设置两元素position的作用

    div+img

    原本图片默认是百分比放缩,而外框会紧贴img,外框的大小随着图片大小而改变。但这里我们希望实现明确高度外框之下,图片居中的效果,如下:

    红框内即为img所在区域。限制图片高度(默认百分比放缩)然后简单地设置margin是无效的,这里我的解决方案如下:

    #card_img {
        height: 100px;
        display: flex;
    }
    
    #card_img img {
        margin: auto;
        height: 50%;
    }
    

    #card_img是外框的id。这里的核心思路就是通过flex来实现的。后来通过调试发现,不限制图片的高度也可以做到,只要确保外框flex添加就好了,只是缩小点更好看。弹性布局真是牛逼,希望各厂商尽快推动!!

    持续更新...

  • 相关阅读:
    Java学习路线:day1 Java语言概述
    Java学习路线:day5 Java基本语法(下)2
    Java学习路线:day4 Java基本语法(下)
    Python笔记_第四篇_高阶编程_GUI编程之Tkinter_2.控件类
    Python笔记_第四篇_高阶编程_GUI编程之Tkinter_1.使用Python进行GUI编程的概述
    Python笔记_第三篇_面向对象_9.Python中的"get"和"set"方法(@property和@.setter)
    Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法
    Python笔记_第三篇_面向对象_7.多态
    Python笔记_第三篇_面向对象_6.继承(单继承和多继承)
    Python笔记_第三篇_面向对象_5.一个关于类的实例(人开枪射击子弹)
  • 原文地址:https://www.cnblogs.com/ChanWunsam/p/10150764.html
Copyright © 2020-2023  润新知