gpt4 book ai didi

html - 如何重新创建 "image on the left, text on the right"和 "text on the right image on the left"模式?

转载 作者:行者123 更新时间:2023-12-04 07:50:50 26 4
gpt4 key购买 nike

当我经常访问公司的网站时,我看到一种常见的模式,左侧有图像,右侧有描述,向下滚动第二列是相反的,图像在右侧,文字在左侧,以此类推。
我尝试用 flexbox 创建类似的东西:

:root {
box-sizing: border-box;
}

*,
*::before,
*::after {
box-sizing: inherit;
}

body {
margin: 0;
padding: 0;
}

h2 {
color: #5c3b65;
font-size: 2.1rem;
}

.about-container {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
}

.about-container > * {
width: 100%;
}

.row {
display: flex;
flex-wrap: wrap;
border: 1px solid green;
margin: 20px 0 50px;
}

@media (min-width: 52em) {
[class*="col-"] {
border: 1px solid orange;
}

.col-1 {
flex: 25%;
}

.col-2 {
flex: 50%;
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="images-oddeven.css">
<title>Odd and Even</title>
</head>
<body>
<section class="about">
<div class="about-container">
<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>
<div class="row">
<div class="col-1">
<h2>Title</h2>
<p>Text</p>
</div>
<div class="col-2">
<img src="https://picsum.photos/400" alt="">
</div>
</div>
<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>
</div>
</section>
</body>
</html>

但是,我确定我的代码无法正常工作,因为我希望图像的宽度为 25%,但图像的位置会发生变化。所以,有时我需要在左侧有 25% 的列宽,有时在右侧。
你认为用 CSS Grid 处理这个问题会更容易吗?浏览器兼容性对我来说不是问题。我不需要对 IE11 的支持。

最佳答案

对所有行保持相同的 html 并更改 col-1 的顺序在偶数行。

.row:nth-child(2n) .col-1 {
order: 2;
}

:root {
box-sizing: border-box;
}

*,
*::before,
*::after {
box-sizing: inherit;
}

body {
margin: 0;
padding: 0;
}

h2 {
color: #5c3b65;
font-size: 2.1rem;
}

.about-container {
max-width: 1200px;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
}

.about-container>* {
width: 100%;
}

.row {
display: flex;
flex-wrap: wrap;
border: 1px solid green;
margin: 20px 0 50px;
}

@media (min-width: 52em) {
[class*="col-"] {
border: 1px solid orange;
}
.col-1 {
flex: 25%;
}
.col-2 {
flex: 50%;
}

.row:nth-child(2n) .col-1 {
order: 2;
}
}
<section class="about">
<div class="about-container">
<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>
<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>
<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>
</div>
</section>

如果您想使用 grid ,你可以像下面这样尝试

:root {
box-sizing: border-box;
}

*,
*::before,
*::after {
box-sizing: inherit;
}

body {
margin: 0;
padding: 0;
}

.about-container {
max-width: 1200px;
margin: 0 auto;
padding: 10px;
}

.row {
display: grid;
grid-template-columns: 25% 1fr; /* or use 50% instad of 1fr */
margin: 0 0 50px;
}

img {
max-width: 100%;
}

.row:nth-child(2n) {
grid-template-columns: 1fr 25%;
}

.row:nth-child(2n) .col-2 {
grid-area: 1;
}
<section class="about">
<div class="about-container">
<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>

<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>

<div class="row">
<div class="col-1">
<img src="https://picsum.photos/400" alt="">
</div>
<div class="col-2">
<h2>Title</h2>
<p>Text</p>
</div>
</div>

</div>
<!-- / .about-container -->
</section>
<!-- / .about -->

关于html - 如何重新创建 "image on the left, text on the right"和 "text on the right image on the left"模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66987495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com