html - 在中心 CSS 中对齐单个列表项
问题描述
我正在用四个元素在 Reactjs 中创建一个导航栏。这些项目是一个简单的无序列表,其中包含一些使用 flexbox 水平对齐的 css。
<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
<li>Four</li>
<ul/>
我想要实现的是:当一个列表项被选中时,将选中的列表项居中对齐。我添加了一张专业图片以进行澄清。此更改稍后将被动画化以实现平滑过渡,就像轮播一样。
以下是<ul>
标签的css。
ul {
list-style-type: none;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
}
我试过的是align-self: center
在其中一个<li>
项目上使用,但没有运气。
有没有人有做类似事情的经验?我对所有类型的解决方案持开放态度,即使是那些不使用 flexbox 的解决方案。
谢谢你!
解决方案
列表元素有固定的吗,你知道有多少项吗?如果是这样,您可以计算列表的中心、项目偏移量,并添加 CSS 变换。
例子:
- 您有一个包含四个项目的列表。
- 每个项目的宽度等于 100 像素。
- 因此列表的总宽度为 400 像素。
- 列表的中心点距左侧 200 像素。
- 项目二的中心点距左侧 150 像素。因此,我们必须将列表从左侧移动 200px - 150px = 50px。
- 第 4 项的中心点距离左侧 350 像素。因此,我们必须将列表从左侧移动 200px - 350px = -150px。
如果您的列表是动态的,关于列表长度和项目宽度,您可以使用Element.getBoundingClientRect()来查找元素的尺寸,并使用与上述相同的计算。
代码笔: https ://codepen.io/anon/pen/vjJMVL
HTML:
<ul class="selected-2">
<li>1</li>
<li class="selected">2</li>
<li>3</li>
<li>4</li>
</ul>
<ul class="selected-4">
<li>1</li>
<li>2</li>
<li>3</li>
<li class="selected">4</li>
</ul>
CSS:
ul {
display: flex;
justify-content: center;
list-style: none;
}
li {
width: 80px;
height: 80px;
background-color: #eee;
margin: 10px;
}
.selected {
background-color: #ccc;
}
.selected-2 {
transform: translateX(50px)
}
.selected-4 {
transform: translateX(-150px)
}
推荐阅读
- laravel - 限制加密或哈希的输出长度
- c++ - 计算 a^b^c mod 10^9+7
- javascript - 使用动态道具卸载时使用 useEffect 挂钩
- html - Google Search Console 显示“HTML 标记中存在不允许的属性或属性值”
我不明白为什么 layout="fixed" 是一个不允许的属性值。任何人都可以帮助找到在我们的 Magento 商店的多个页面中显示此错误的解决方案吗?
<amp-img layout="fixed" src="data:image/gif;base64,R0lGODl
- google-analytics - 谷歌分析 gtag 不算数
- c# - 将触摸空间限制为屏幕的一半
- php - 如何编写 .htaccess 将所有请求转发到 index.php 的任何子文件夹中
- python - 在函数调用中将“self”作为参数传递?
- javascript - react-native 中的输入不允许为空
- python - Dockerized Python 脚本在访问存储到 /tmp 的文件时遇到问题