如何将设置了transform:skew的container容器顶部的标题居中显示
问题根因
- 你的
.container设置了display: flex,默认主轴为水平方向,<h2>标题会和后续的.card元素在同一行并排显示,无法单独放在容器顶部 .container设置了transform: skew(5deg)倾斜变换,标题如果直接放在容器内会跟着倾斜,显示不符合预期
解决步骤
HTML修改
把所有.card元素用一个新的<div class="card-list">包裹,结构如下:
<div class="container"> <h2>PROCHAINEMENT</h2> <div class="card-list"> <div class="card"> <img src="https://upload.wikimedia.org/wikipedia/commons/d/d6/Cat_plotting_something_evil%21.jpg"> <div class="card__head">Plotting Cat</div> </div> <div class="card"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/False_alarm_-a.jpg/1280px-False_alarm_-a.jpg"> <div class="card__head">Angry Cat</div> </div> <div class="card"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Neugierige-Katze.JPG/1280px-Neugierige-Katze.JPG"> <div class="card__head">Curious Cat</div> </div> <div class="card"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Al_acecho_%289272124788%29.jpg/1280px-Al_acecho_%289272124788%29.jpg"> <div class="card__head">Prowling Cat</div> </div> <div class="card"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/de/Mimi%26Tigsi.jpg/1280px-Mimi%26Tigsi.jpg"> <div class="card__head">Sleepy Cat</div> </div> </div> </div>
CSS修改
调整原有样式,新增对应规则:
/* 调整原有.container样式 */ .container { background: transparent; font-family: sans-serif; display: flex; /* 主轴改为垂直方向,让标题在上,卡片列表在下 */ flex-direction: column; align-items: center; margin: 30vmin; overflow: hidden; transform: skew(5deg); } /* 新增标题样式 */ .container h2 { text-align: center; /* 抵消容器的倾斜,让文字显示正常 */ transform: skew(-5deg); margin: 0 0 1em 0; } /* 新增卡片列表样式 */ .card-list { display: flex; width: 100%; justify-content: center; align-items: center; } /* 原有.card相关样式保持不变即可 */ .container .card { border: none; background: transparent; flex: 1; transition: all 1s ease-in-out; height: 60vmin; position: relative; } .container .card .card__head { border-radius: 15px; color: black; background: rgba(255, 30, 173, 0.75); padding: 0.5em; transform: rotate(-90deg); transform-origin: 0% 0%; transition: all 0.5s ease-in-out; min-width: 100%; text-align: center; position: absolute; bottom: 0; left: 0; font-size: 1em; white-space: nowrap; } .container .card:hover { flex-grow: 10; } .container .card:hover img { filter: grayscale(0); } .container .card:hover .card__head { text-align: center; top: calc(100% - 2em); color: white; background: rgba(0, 0, 0, 0.5); font-size: 2em; transform: rotate(0deg) skew(-5deg); } .container .card img { width: 100%; height: 100%; object-fit: cover; transition: all 1s ease-in-out; filter: grayscale(100%); } .container .card:not(:nth-child(5)) { background: transparent; margin-right: 1em; }
修改后标题会居中显示在卡片列表顶部,原有卡片悬停交互效果完全保留。
内容的提问来源于stack exchange,提问作者Softee
相关产品推荐
相关产品推荐

