CSS实现多个元素在盒子内两端对齐效果


Posted in HTML / CSS onMarch 30, 2021

元素俩端对齐的排列布局在实际的开发当中随处可见,使用flex布局的--justify-content : space-between即可轻松实现,但有些场景下需要考虑兼容等问题,不得不放弃flex布局,所以我们想要实现同样的效果就需要研究排版,在网络搜索了一番答案后,发现真正简单且实质性能够解决问题的,寥寥无几,确实我在实际项目中经常碰到此类布局,所以我利用业余时间,将其原理实现分享于此,以供交流,分享

场景要求

在一个确定宽度的盒子内,将item俩端对齐排列,且不影响确定盒子的原来布局。

<div class="container">
        <ul>
            <li>12</li>
            <li>2</li>
            <li>3</li>
            <li>12</li>
            <li>2</li>
            <li>3</li>
            <li>12</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </div>

假设这里我们有这么些item

* {
        margin: 0;
        padding: 0;
    }
    
    .container {
        width: 1200px;
        height: 500px;
        background-color: aqua;
        margin: 0 auto;
    }
    
    ul {
        /* 关键是元素的宽,通过margin负值移位与container重叠 */
        width: 1220px;
        margin-left: -20px;
        list-style: none;
    }
    
    ul li {
        float: left;
        /* width = (盒子宽度 - margin间距 * 一行items的个数 - 1) /  一行item的个数 */
        /* (1200px - 20 * 2) / 3 */
        width: 386.666px;
        height: 60px;
        margin: 0px 0 20px 20px;
        background-color: red;
    }

css关键在于需要我们计算下item的宽度,/* width = (盒子宽度 - margin间距 * 一行items的个数 - 1) /  一行item的个数 */ ,这里我打算一行显示三个item,那么就是(1200px - 20 * 2) / 3,为什么是一行item的个数-1来计算marign占据的宽度,三个item不应该是三个margin吗,这就是实现俩端对齐的精髓所在,试想浮动布局,一行元素在流上逐个排列,当流方向宽度不够时,元素则会折行排列,如果想让齐在一行内显示,我们确实可以通过给第三个item的margin值设置为0,使其不折行也达到了俩端对齐的显示方式,这样做确实没问题,可一旦item个数多了,且不确定的时候呢,你怎么取消一行内最后一个item的margin,显然设置margin为0的方式不是最佳方案,那么此时就可以对他的外包盒子做处理,外部盒子ul(这里我使用的是ul标签,块标签都可以)的宽度和 -margin值的设置。

为什么外部盒子的宽度是1220px

CSS实现多个元素在盒子内两端对齐效果

这是container原来的宽度

CSS实现多个元素在盒子内两端对齐效果

这是ul的宽度,是的已经大过了container,而且是右边大过去的,那此时将ul用-margin处理后,即可成为视觉上的俩端对齐

取消ul的背景颜色后,效果达成

总结

到此这篇关于CSS实现多个元素在盒子内两端对齐效果的文章就介绍到这了,更多相关CSS 元素 盒子 两端对齐内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
详解CSS3 rem(设置字体大小) 教程
Nov 21 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
Dec 02 HTML / CSS
HTML5全屏(Fullscreen)API详细介绍
Apr 24 HTML / CSS
五个2015 年最佳HTML5 框架
Nov 11 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
Mar 24 HTML / CSS
HTML5标签嵌套规则详解【必看】
Apr 26 HTML / CSS
使用phonegap获取设备的一些信息方法
Mar 31 HTML / CSS
解决HTML5中滚动到底部的事件问题
Aug 22 HTML / CSS
Html5之自定义属性(data-,dataset)
Nov 19 HTML / CSS
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
Mar 31 HTML / CSS
html css3不拉伸图片显示效果
Jun 07 HTML / CSS
CSS实现背景图片全屏铺满自适应的3种方式
Jul 07 HTML / CSS
Html5页面播放M4a音频文件
Html分层的box-shadow效果的示例代码
原生CSS实现文字无限轮播的通用方法
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
CSS3通过var()和calc()函数实现动画特效
CSS3实现模糊背景的三种效果示例
使用css样式设计一个简单的html登陆界面的实现
You might like
PHP 中文乱码解决办法总结分析
2009/07/30 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
PHP常用技术文之文件操作和目录操作总结
2014/09/27 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
php实现短信发送代码
2015/07/05 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
jquery动态添加删除一行数据示例
2014/06/12 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
javascript实现禁止鼠标滚轮事件
2015/07/24 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
python编程嵌套函数实例代码
2018/02/11 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
python做反被爬保护的方法
2019/07/01 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
html5使用canvas画一条线
2014/12/15 HTML / CSS
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
外贸员简历中的自我评价
2014/03/04 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
分居协议书范本
2014/11/03 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript