راکت
Parastoo Ebrahimi
Parastoo Ebrahimi
توسط Parastoo Ebrahimi مطرح شد
حل
11 پاسخ

پایین بودن محتوا

سلام. من یک فرم طراحی کردم و یک سایدبار. وقتی فرم رو به تنهایی نمایش میدم کاملا بالای صفحه قرار میگیره. ولی وقتی سایدبار رو هم در صفحه قرار میدم پایین قرار میگیره و هر چی فاصله از پایین بهش میدم نمیاد بالا!

ممنون میشم راهنمایی کنید چه کاری انجام بدم تا بالای صفجه قرار بگیره. route ها هم به صورت زیره:

 <React.Fragment>
                          {this.state.isAuthenticated ? <Sidebar auth={this.state.isAuthenticated} /> : null}

                       <div>
                            <div >
                            <Switch>
                            <Route path="/" exact={true} render={(props) => <LoginForm {...props} auth={this.state.isAuthenticated} login={this.handleLogin.bind(this)}/>} component={LoginForm} />
                             {/* <Route path="/account" exact={true} component={Account}/> */}
                             {/* <Route path="/sidebar" component={Sidebar}  /> */}
                             <PrivateRoute path="/accounts" component={Accounts} auth={this.state.isAuthenticated} />
                            </Switch>
                            </div>
                       </div>

                      </React.Fragment>

ثبت پرسش جدید
محسن بستان
محسن بستان
تخصص :Senior Backend Developer
@mohsenbostan6 سال پیشمطرح شد
1

@parastooebrahimi
سلام.
دو بخش جدا رو بزارید داخل دو div جدا.
به اولی که منو میشه یک عرض بدید و موارد زیر

display: block;
float: left;

و به دومی هم عرض باقیمانده از کل صحفه رو بدید و موارد بالا. البته float رو right بزارید.
احتمالا درست میشه با این کار.


نیلوفر حریرچیان
نیلوفر حریرچیان
تخصص :Front End Developer
@niloofarharirchian906 سال پیشمطرح شد
1

یا از bootstrap و کلاس های Col استفاده کنید
یا اگه pure css دارید میرید جلو، 2تا div بدید با width درصدی مثلا 80% و 20%
و برای ساید بار حتما از float:left استفاده کنید


Parastoo Ebrahimi
Parastoo Ebrahimi
تخصص :front-end developer
@parastooebrahimi6 سال پیشمطرح شد
1

@mohsenbostan ممنونم درست شد


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad6 سال پیشمطرح شد
1

برای چیدمان عناصر صفحه از flexbox یا css grid و یا grid system استفاده کنید، دوران استفاده از float برای چیدمان، به پایان رسیده.


سید حسین رضوی
سید حسین رضوی
تخصص :برنامه نویس وب و طراح رابط کاربری
@hossein.r.14426 سال پیشمطرح شد
3

@mohsenbostan @niloofarharirchian90
ببینید برای تصویری که شما گذاشتید عرض مشخص اشتباهه یا استفاده از درصد شما باید از فلکس باکس استفاده کنید، در طرحی که شما قرار دادید فقط ساید باره که عرض مشخصی داره و بخش کانتنت عرض یه عدد پویا خواهد بود، مثلا شما فرض اومدید از عرض 80 درصد و 20 درصد استفاده کردید و کاربر یه مانیتور عریض داشته باشه میدونید فاجعه رخ میده یا اینکه مانیتور کوچیک هم همینطور پس بهترین کار اینه که اگه از بوت استرپ استفاده میکنید یه div با کلاس d-flex قرار بدید و داخلش دوتا div دیگه که یکی ساید باره و یکی کانتنت خوب عرض ساید بار که مشخصه مثلا 180px بهش میدید کانتنت هم خودش الباقی عرض رو میگیره


Parastoo Ebrahimi
Parastoo Ebrahimi
تخصص :front-end developer
@parastooebrahimi6 سال پیشمطرح شد
0

@hossein.r.1442
چون مشکلی که میگین پیش اومد به flex تغییرشون دادم درست شد تا اینکه topbar رو اضافه کردم. من یک کامپوننت دارم به اسم menu که sidebar و topbar رو توش گذاشتم. و به اون این styleرو دادم:

<React.Fragment>
                <div style={{display:'flex',flexDirection: 'column'}}>
                <div style={{width:'100%'}}>
                <Topbar SidebarShowAndHide={this.SidebarShowAndHide}/>
                </div>
                {this.state.showSidebar ?
                        <SidebarView handleSidebarClick={this.handleSidebarClick}
                        handleSubMenu={this.handleSubMenu}
                        shown={this.state.shown}
                         />
                    : null}

                </div>  

            </React.Fragment>

بعد توی کامپوننت app این استایل رو:


                      <React.Fragment>

                          <div style={{}}>
                          <div >
                          {this.state.isAuthenticated ? <Menus auth={this.state.isAuthenticated} /> : null}

                          </div>
                          <div style={{}}>
                          <Switch>

                              <Route path="/" exact={true} render={(props) => <LoginForm {...props} auth={this.state.isAuthenticated} login={this.handleLogin.bind(this)}/>} component={LoginForm} />

                               <PrivateRoute path="/accounts" component={Accounts} auth={this.state.isAuthenticated} />
                              </Switch >

                          </div>

                          </div>

                      </React.Fragment>

حالا باز کانتنت پایین صفحه قرار میگیره و به div پدر توی app هم که استایل display:flex رو که میدم topbar نصفه نمایش داده میشه. چیکار کنم کانتنت بیاد بالا و کنار سایدبارو تاپ بار قراربگیره؟

چیزی که میخوام باشه:


سید حسین رضوی
سید حسین رضوی
تخصص :برنامه نویس وب و طراح رابط کاربری
@hossein.r.14426 سال پیشمطرح شد
1

خوب دبگه این اتفاق منطقیه مشکل شما اینه که ساید بار و تاپ بار رو داخل یه کامپوننت گذاشتین برای همین تاپ بار رو هم ارتفاعشو اندازه سایدبار درنظر میگیره شما به سه کامپوننت نیاز دارید، تاپ بار، ساید بار، کانتنت حالا کامپوننت ها رو توی صفحه html قرار بدید مثلا یه همچین حالتی

<div>
    <top-bar></top-bar>
</div>
<div style="display:flex; flexDirection: rows">
    <div style="width: 180px">
        <sidebar></sidebar>
    </div>
    <div style="width: 100%">
        <content-page></content-page>
    </div>
</div>

میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad6 سال پیشمطرح شد
0

این دوره رایگان رو تماشا کنید و یک عمر ازش بهره ببرید:
https://roocket.ir/series/full-training-flexbox


Parastoo Ebrahimi
Parastoo Ebrahimi
تخصص :front-end developer
@parastooebrahimi6 سال پیشمطرح شد
0

@hossein.r.1442
مشکل اینه که نمیتونم topbar رو جدا کنم. باید همه ی منو ها همینجا باشن..نمیشه کاری کرد؟


سید حسین رضوی
سید حسین رضوی
تخصص :برنامه نویس وب و طراح رابط کاربری
@hossein.r.14426 سال پیشمطرح شد
1

اگه نمیشه جدا کرد باید باید کانتنت هم بیاد توی همون کامپوننت و اینکه چرا نشه جداکرد؟؟ هر جوری هم که قرار باشه با منوها رفتار کرد باز هم میتونید تاپ بار و ساید بار رو داخل دوکامپوننت جدا تعریف کنید، مشکلتون چیه که نمیتونید جدا از هم این اتفاق بیوفته کار دیگه ای که می تونید انجام بدید کامپوننت رو تعریف کنید تاپ بار و ساید بار و برای کانتنت از اسلات ها استفاده کنید که بیرون از کامپوننت بتونید بخش کانتنت رو تعریف کنید و داخل کامپوننت نمایش بدید
من تخصص در ریکت ندارم اما یه تحقیق کنید استفاده از اسلات در کامپوننت های ریکت قطعا به نتیجه خواهید رسید


میلاد-م
میلاد-م
تخصص :توسعه‌دهنده رابط کاربری - Front-End
@milad6 سال پیشمطرح شد
1

کدهارو برای این مثال قرار دادم، ولی در کل مبانی flex-box رو که ببینید، این مثال ها دیگه مسئله تون نخواهد بود:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>

        <style>
            * {
                box-sizing: border-box;
            }
            body {
                direction: ltr;
            }

            .flex-parent {
                display: flex;
                flex-flow: row wrap;
            }

            .child-top-bar {
                flex: 0 0 100%;
                background-color: rgb(118, 218, 118);
            }

            .child-menu {
                flex: 0 0 180px;
                background-color: rgb(149, 149, 247);
            }

            .child-content {
                flex: 1 0 auto;
                background-color: rgb(247, 195, 100);
            }

            .child-top-bar,
            .child-menu,
            .child-content {
                padding: 20px;
                font-size: 30px;
                text-align: center;
            }

            @media only screen and (max-width: 600px) {
                .flex-parent {
                    flex-flow: column nowrap;
                    //height: 70vh;
                }
                .child-menu {
                    flex: 0 0 auto;
                }
            }
        </style>
    </head>
    <body>
        <div class="flex-parent">
            <div class="child-top-bar">
                <top-bar>top-bar</top-bar>
            </div>
            <div class="child-menu">
                <sidebar>menu</sidebar>
            </div>
            <div class="child-content">
                <content-page>content</content-page>
            </div>
        </div>
    </body>
</html>

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام