我正在学习React,并尝试在此模拟此设计:https://www.figma.com/file/QG4cOExkdbIbhSfWJhs2gs/Travel-Journal?node-id=2%3A2&t=LV3bLPEMOLMR8ksp-0
我开始着手做这个项目,差不多完成了。
不过,我遇到了麻烦
1.在每个trip-div
后面添加一个换行符。我以为我可以在“.map”循环中这样做,但是它中断了。我应该如何处理它?
const trips = data.map(trip=>{
return (<Trip
item={trip}
/> <hr>)
})
1.由于某种原因,trip-div
没有100%向右扩展。这一定是与max-widht有关的东西,但我不明白。
下面是我的代码:https://scrimba.com/scrim/c3rDMnULTrip
export default function Trip(prop){
return(
<div className='trip container'>
<div className="trip-main">
<img src={prop.item.imageUrl} alt="" className="trip-img" />
</div>
<div className="trip-aside">
<p className="trip-location">{prop.item.location} <a href={prop.item.googleMapsUrl} className="trip-google-maps">View on Maps</a></p>
<h2 className="trip-title">{prop.item.location}</h2>
<p className="trip-dates">{prop.item.startDate} - {prop.item.endDate}</p>
<p className="trip-description">{prop.item.description}</p>
</div>
</div>
)
}
App
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import Nav from "./components/Nav"
import Trip from "./components/Trip"
import data from '../src/assets/data'
const trips = data.map(trip=>{
return (<Trip
item={trip}
/>)
})
function App() {
const [count, setCount] = useState(0)
return (
<div className="App">
<Nav/>
{trips}
</div>
)
}
export default App
CSS
* {box-sizing: border-box;}
#root{
max-width: 600px;
}
body{
margin: 0;
font-family: 'Inter';
background: #FFFFFF;
}
h1,h2,h3,p {
margin:0
}
.container {
padding: 0 40px;
}
nav {
height: 55px;
background: #F55A5A;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 2.5rem;
}
.nav-img {
margin-right: 7px;
}
.nav-title{
font-style: normal;
font-weight: 500;
font-size: 14.4608px;
line-height: 18px;
letter-spacing: -0.075em;
color: #FFFFFF;
}
.trip{
display: flex;
gap: 20px;
margin-bottom: 18px;
min-width: 100%;
}
.trip-main{
max-width: 40%;
}
.trip-aside{
max-width: 60%;
}
.trip-img{
width: 125px;
height: 168px;
border-radius: 5px;
}
.trip-location{
font-weight: 400;
font-size: 10.24px;
line-height: 12px;
letter-spacing: 0.17em;
color: #2B283A;
margin-bottom: 7px;
}
.trip-title{
font-weight: 700;
font-size: 25px;
line-height: 30px;
color: #2B283A;
margin-bottom: 7px;
padding-bottom: 10px;
}
.trip-dates{
font-weight: 700;
font-size: 10.24px;
line-height: 12px;
margin-bottom: 10px;
color: #2B283A;
}
.trip-google-maps{
font-weight: 400;
font-size: 10.24px;
line-height: 12px;
/* identical to box height */
text-decoration-line: underline;
color: #918E9B;
}
.trip-description{
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-size: 10.24px;
line-height: 150%;
/* or 15px */
color: #2B283A;
}
2条答案
按热度按时间bvjveswy1#
先回答你的第二个问题。
由于某种原因,trip-div没有向右扩展100%,这一定是与max-width有关的东西,但我不明白。
root div的最大宽度为600 px,这是向下级联的,并影响其下的所有子组件。
现在来看看更复杂的问题。
在每个trip-div后面添加一个换行符。我想我可以在“.map”循环中这样做,但是它中断了。我应该如何处理它?
您只能从Map中返回1个元素,但您尝试返回2 - 1和1
。
有几种方法可以解决这个问题,比较明显的一种方法是将它们 Package 在
<div>
中更好的解决方案是使用React Fragment
这样就不需要呈现额外的DOM元素。
ukxgm1gy2#
对于第一点:
不能像这样返回相邻元素:
您需要将它们 Package 在一个父对象中,并为
hr
创建容器以获得相同的宽度,它将如下所示:关于第二点:
你在根上有
max-width: 600px
,你需要删除它,对于.trip-aside
,删除最大宽度,并给予它flex-grow: 1;
,以获得屏幕的其余宽度。所以会是这样的: