Box से लेआउट

सेल में Flexbox से डैशबोर्ड का ढांचा बनाएं: टॉप बार, साइडबार और कार्ड।

इस अध्याय का ऐप आपके कंसोल में चल रहा है। ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C से इसे खोलें (पहले डेवलपर सुविधाएं चालू करें), फिर इसे आज़माएं।
अध्याय देखें3:39

इस अध्याय में

  • टॉप बार
  • साइडबार और कार्ड
  • डिफ़ॉल्ट रूप से रिस्पॉन्सिव

कंसोल सेल का एक ग्रिड है। Text.js इसका लेआउट Yoga से बनाता है, जो वही flexbox इंजन है जिसे React Native इस्तेमाल करता है, इसलिए <Box> CSS flexbox के नियमों का पालन करता है। इकाइयां सेल हैं: p-1 का मतलब एक कॉलम और एक रो की पैडिंग है।

टॉप बार

ज़्यादातर स्क्रीन एक कॉलम होती हैं: एक रो का बार, फिर बाकी सब। h-1 से बार की ऊंचाई तय करें और grow से कंटेंट को बाकी जगह लेने दें।

app/page.tsx+8-4tsx
हटाया गया: import { Box, Text, useInput } from "@textjs/app";जोड़ा गया: import { Box, Spacer, Text, useInput } from "@textjs/app";export default function Page() {  return (हटाया गया:     <Box className="flex-col border rounded px-2 py-1">हटाया गया:       <Text bold>▼ Acme Deploys</Text>हटाया गया:       <Text color="muted">Hello, console.</Text>जोड़ा गया:     <Box className="flex-col grow">जोड़ा गया:       <Box className="flex-row h-1 px-1 gap-2 shrink-0">जोड़ा गया:         <Text bold>▼ Acme</Text>जोड़ा गया:         <Text color="subtle">acme.local</Text>जोड़ा गया:         <Spacer />जोड़ा गया:       </Box>जोड़ा गया:       <Box className="flex-row grow">{/* sidebar + cards */}</Box>    </Box>  );}

<Spacer> बढ़ने वाला बॉक्स है: इसके बाद की हर चीज़ दाएं किनारे पर पहुंच जाती है।

तय चौड़ाई वाला साइडबार जोड़ें, जिसके दाएं बॉर्डर हो, और तीन कार्ड जोड़ें जो बची हुई चौड़ाई साझा करें। grow के साथ basis-0 हर कार्ड को बराबर हिस्सा देता है, चाहे उसका कंटेंट कुछ भी हो।

app/page.tsx+31-1tsx
जोड़ा गया: const NAV = ["Overview", "Deployments", "Settings"];जोड़ा गया: जोड़ा गया: function Card({ title, value }: { title: string; value: string }) {जोड़ा गया:   return (जोड़ा गया:     <Box className="flex-col border rounded px-1 grow shrink basis-0" minWidth={14} minHeight={4}>जोड़ा गया:       <Text color="subtle">{title}</Text>जोड़ा गया:       <Text bold>{value}</Text>जोड़ा गया:     </Box>जोड़ा गया:   );जोड़ा गया: }जोड़ा गया: export default function Page() {जोड़ा गया:   const [sidebar, setSidebar] = useState(true);जोड़ा गया:   const [stacked, setStacked] = useState(false);जोड़ा गया: जोड़ा गया:   useInput((e) => {जोड़ा गया:     if (e.input === "s") setSidebar((v) => !v);जोड़ा गया:     if (e.input === "d") setStacked((v) => !v);जोड़ा गया:   });जोड़ा गया:   return (    <Box className="flex-col grow">      {/* top bar */}हटाया गया:       <Box className="flex-row grow">{/* sidebar + cards */}</Box>जोड़ा गया:       <Box className="flex-row grow">जोड़ा गया:         {sidebar && (जोड़ा गया:           <Box className="flex-col w-18 shrink-0 border-r px-1 pt-1">जोड़ा गया:             {NAV.map((item) => <Text key={item}>{item}</Text>)}जोड़ा गया:           </Box>जोड़ा गया:         )}जोड़ा गया:         <Box className={stacked ? "flex-col grow gap-1 p-1" : "flex-row grow items-start gap-1 p-1"}>जोड़ा गया:           <Card title="Production" value="acme-web" />जोड़ा गया:           <Card title="Deployments" value="6 today" />जोड़ा गया:           <Card title="Build time" value="38s p50" />जोड़ा गया:         </Box>जोड़ा गया:       </Box>    </Box>  );}

कंसोल में s और d कुंजियां दबाएं। Yoga लेआउट की दोबारा गणना करता है और सिर्फ़ बदली हुई रो दोबारा पेंट होती हैं, इसलिए साइडबार टॉगल करने में एक ही console.log कॉल लगती है।

डिफ़ॉल्ट रूप से रिस्पॉन्सिव

ग्रिड डॉक किए गए DevTools पैनल के अनुसार ढलता है। कंसोल को खींचकर चौड़ा या ऊंचा करें और कार्ड फिर से व्यवस्थित हो जाते हैं। जब आपको ब्रेकपॉइंट की ज़रूरत हो, तो useBreakpoint() हुक मौजूदा ब्रेकपॉइंट सेल में लौटाता है।

आज़माएं

यह अध्याय के अंत वाला Acme Deploys है, जो DevTools में चल रहा है। पैड पर क्लिक करें, फिर नीचे दी गई कुंजियां इस्तेमाल करें।

▼ 02 · Box से लेआउट

कंसोल खोलें

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

ऐप DevTools में रेंडर होता है।पहले Safari की सेटिंग → एडवांस में “वेब डेवलपर के लिए सुविधाएं दिखाएं” चालू करें। फिर यहां क्लिक करें और s दबाएं।

डेस्कटॉप पर खोलें

यह ऐप DevTools कंसोल में रेंडर होता है, जिसके लिए डेस्कटॉप ब्राउज़र चाहिए।

क्विज़

2 सवाल

अध्याय पूरा करने के लिए हर सवाल का जवाब दें।

className यूटिलिटी में p-1 का क्या मतलब है?

 

कौन सी क्लास बॉक्स को बची हुई जगह लेने देती है?