كيفية محاذاة 3 divs (اليسار/الوسط/اليمين) داخل div آخر؟
سؤال
أريد أن يكون هناك 3 divs محاذاة داخل حاوية Div ، شيء من هذا القبيل:
[[LEFT] [CENTER] [RIGHT]]
يبلغ عرض الحاوية Div 100 ٪ (لا يوجد عرض محدد) ، ويجب أن يظل مركز DIV في الوسط بعد تغيير حجم الحاوية.
لذلك قمت بتعيين:
#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}
لكنه يصبح:
[[LEFT] [CENTER] ]
[RIGHT]
أي نصائح؟
المحلول
مع ذلك CSS ، ضع divs الخاص بك مثل SO (يطفو أولاً):
<div id="container">
<div id="left"></div>
<div id="right"></div>
<div id="center"></div>
</div>
ملاحظة يمكنك أيضا أن تطفو على اليمين ، ثم اليسار ، ثم الوسط. والشيء المهم هو أن العوامات تأتي قبل القسم "الرئيسي".
PPS غالبًا ما تريد أن تدوم في الداخل #container
هذا المقتطف: <div style="clear:both;"></div>
والتي سوف تمتد #container
رأسياً احتواء كلا العوامات الجانبية بدلاً من أخذ طولها فقط #center
وربما السماح للجوانب بطرد القاع.
نصائح أخرى
إذا كنت لا ترغب في تغيير بنية HTML الخاصة بك ، فيمكنك أيضًا القيام بها عن طريق الإضافة text-align: center;
إلى عنصر الغلاف و display: inline-block;
إلى العنصر المتمركز.
#container {
width:100%;
text-align:center;
}
#left {
float:left;
width:100px;
}
#center {
display: inline-block;
margin:0 auto;
width:100px;
}
#right {
float:right;
width:100px;
}
عرض حي: http://jsfiddle.net/ch9k8/
محاذاة ثلاثة divs أفقيا باستخدام Flexbox
فيما يلي طريقة CSS3 لمحاذاة divs أفقيا داخل div آخر.
#container {
display: flex; /* establish flex container */
flex-direction: row; /* default value; can be omitted */
flex-wrap: nowrap; /* default value; can be omitted */
justify-content: space-between; /* switched from default (flex-start, see below) */
background-color: lightyellow;
}
#container > div {
width: 100px;
height: 100px;
border: 2px dashed red;
}
<div id="container">
<div></div>
<div></div>
<div></div>
</div>
JSfiddle
ال justify-content
يستغرق الخاصية خمس قيم:
flex-start
(إفتراضي)flex-end
center
space-between
space-around
في جميع الحالات ، تكون DIVs الثلاثة على نفس الخط. للحصول على وصف لكل قيمة انظر: https://stackoverflow.com/a/3385609/3597276
فوائد Flexbox:
- كود الحد الأدنى ؛ فعال جدا
- التوسيط ، عموديًا وأفقيًا ، بسيط وسهل
- أعمدة الارتفاع المتساوية بسيطة وسهلة
- خيارات متعددة لمحاذاة العناصر المرنة
- إنه مستجيب
- على عكس العوامات والجداول ، التي توفر سعة تخطيط محدودة لأنها لم تكن مخصصة أبدًا لتخطيطات البناء ، فإن Flexbox هي تقنية حديثة (CSS3) مع مجموعة واسعة من الخيارات.
لمعرفة المزيد عن زيارة Flexbox:
- طرق لمحاذاة العناصر المرنة
- باستخدام صناديق مرنة CSS ~ MDN
- دليل كامل لـ Flexbox ~ CSS-Tricks
- ما فليكس بوكس؟! ~ تعليمي فيديو يوتيوب
دعم المتصفح: يتم دعم Flexbox من قبل جميع المتصفحات الرئيسية ، باستثناء أي <10. تتطلب بعض إصدارات المتصفح الحديثة ، مثل Safari 8 و IE10 ، بادئات البائع. للحصول على طريقة سريعة لإضافة البادئات استخدام Autoprefixer. مزيد من التفاصيل في هذا الجواب.
خاصية تعويم لا تستخدم في الواقع لمحاذاة النص.
يتم استخدام هذه الخاصية لإضافة عنصر إلى اليمين أو اليسار أو الوسط.
div > div { border: 1px solid black;}
<html>
<div>
<div style="float:left">First</div>
<div style="float:left">Second</div>
<div style="float:left">Third</div>
<div style="float:right">First</div>
<div style="float:right">Second</div>
<div style="float:right">Third</div>
</div>
</html>
إلى عن على float:left
سيكون الإخراج [First][second][Third]
إلى عن على float:right
سيكون الإخراج [Third][Second][First]
هذا يعني أن الخاصية العائمة => ستضيف الخاصية اليسرى العنصر التالي إلى يسار واحد ، نفس الحالة مع اليمين
كما عليك أن تفكر في عرض العنصر الأصل ، إذا تجاوز مجموع عرض عناصر الطفل عرض العنصر الأصل ، فسيتم إضافة العنصر التالي في السطر التالي
<html>
<div style="width:100%">
<div style="float:left;width:50%">First</div>
<div style="float:left;width:50%">Second</div>
<div style="float:left;width:50%">Third</div>
</div>
</html>
الثانية الأولى
ثالث
لذلك تحتاج إلى النظر في كل هذه الجوانب للحصول على النتيجة المثالية
أنا أحب قضباتي ضيقة وديناميكية. هذا ل CSS 3 و HTML 5
أولاً ، يعد تحديد العرض إلى 100px محدودًا. لا تفعل ذلك.
ثانياً ، سيعمل ضبط عرض الحاوية على 100 ٪ بشكل جيد ، حتى يتحدث عن كونه شريط رأس/تذييل للتطبيق بأكمله ، مثل التنقل أو الاعتمادات/شريط حقوق الطبع والنشر. يستخدم
right: 0;
بدلا من ذلك السيناريو.أنت تستخدم المعرف (التجزئة
#container
,#left
, ، إلخ) بدلاً من الفصول (.container
,.left
, ، إلخ) ، وهو أمر جيد ، إلا إذا كنت تريد تكرار نمط أسلوبك في مكان آخر في الكود الخاص بك. سأفكر في استخدام الفصول بدلاً من ذلك.بالنسبة إلى HTML ، لا حاجة إلى تبديل الطلب: اليسار ، الوسط ، واليمين.
display: inline-block;
يعمل على إصلاح هذا ، وإرجاع التعليمات البرمجية الخاصة بك إلى شيء أكثر نظافة ومنطقي للترتيب مرة أخرى.أخيرًا ، تحتاج إلى مسح العوامات حتى لا تعبث بالمستقبل
<div>
. أنت تفعل هذا معclear: both;
كي تختصر:
لغة البرمجة:
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
CSS:
.container {right: 0; text-align: center;}
.container .left, .container .center, .container .right { display: inline-block; }
.container .left { float: left; }
.container .center { margin: 0 auto; }
.container .right { float: right; }
.clear { clear: both; }
نقطة المكافأة إذا استخدمت Haml و Sass ؛)
هامل:
.container
.left
.center
.right
.clear
ساس:
.container {
right: 0;
text-align: center;
.left, .center, .right { display: inline-block; }
.left { float: left; }
.center { margin: 0 auto; }
.right { float: right; }
.clear { clear: both; }
}
هناك العديد من الحيل المتاحة لمحاذاة العناصر.
01. استخدام Table Trick
.container{
display:table;
}
.left{
background:green;
display:table-cell;
width:33.33vw;
}
.center{
background:gold;
display:table-cell;
width:33.33vw;
}
.right{
background:gray;
display:table-cell;
width:33.33vw;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
02. باستخدام خدعة فليكس
.container{
display:flex;
justify-content: center;
align-items: center;
}
.left{
background:green;
width:33.33vw;
}
.center{
background:gold;
width:33.33vw;
}
.right{
background:gray;
width:33.33vw;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
03. باستخدام خدعة تعويم
.left{
background:green;
width:100px;
float:left;
}
.center{
background:gold;
width:100px;
float:left;
}
.right{
background:gray;
width:100px;
float:left;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
يمكن القيام بذلك بسهولة باستخدام CSS3 Flexbox ، وهي ميزة سيتم استخدامها في المستقبل (متى <IE9
ميت تماما) من قبل كل متصفح تقريبا.
افحص ال جدول توافق المتصفح
لغة البرمجة
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
CSS
.container {
display: flex;
flex-flow: row nowrap; /* Align on the same line */
justify-content: space-between; /* Equal margin between the child elements */
}
انتاج:
.container {
display: flex;
flex-flow: row nowrap; /* Align on the same line */
justify-content: space-between; /* Equal margin between the child elements */
}
/* For Presentation, not needed */
.container > div {
background: #5F85DB;
padding: 5px;
color: #fff;
font-weight: bold;
font-family: Tahoma;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
مع Twitter Bootstrap:
<p class="pull-left">Left aligned text.</p>
<p class="pull-right">Right aligned text.</p>
<p class="text-center">Center aligned text.</p>
الإجابة المحتملة ، إذا كنت تريد الاحتفاظ بترتيب HTML وعدم استخدام Flex.
لغة البرمجة
<div class="a">
<div class="c">
the
</div>
<div class="c e">
jai ho
</div>
<div class="c d">
watsup
</div>
</div>
CSS
.a {
width: 500px;
margin: 0 auto;
border: 1px solid red;
position: relative;
display: table;
}
.c {
display: table-cell;
width:33%;
}
.d {
text-align: right;
}
.e {
position: absolute;
left: 50%;
display: inline;
width: auto;
transform: translateX(-50%);
}
لغة البرمجة:
<div id="container" class="blog-pager">
<div id="left">Left</div>
<div id="right">Right</div>
<div id="center">Center</div>
</div>
CSS:
#container{width:98%; }
#left{float:left;}
#center{text-align:center;}
#right{float:right;}
text-align:center;
يعطي محاذاة مركز مثالي.
فعلت محاولة أخرى لتبسيط هذا وتحقيقه دون ضرورة حاوية.
لغة البرمجة
.box1 {
background-color: #ff0000;
width: 200px;
float: left;
}
.box2 {
background-color: #00ff00;
width: 200px;
float: right;
}
.box3 {
background-color: #0fffff;
width: 200px;
margin: 0 auto;
}
CSS
.box1 {
background-color: #ff0000;
width: 200px;
float: left;
}
.box2 {
background-color: #00ff00;
width: 200px;
float: right;
}
.box3 {
background-color: #0fffff;
width: 200px;
margin: 0 auto;
}
يمكنك رؤيته على الهواء مباشرة JSfiddle
استخدام Bootstrap 3 أقوم بإنشاء 3 divs ذات العرض المتساوي (في 12 عمود تخطيط 4 أعمدة لكل div). وبهذه الطريقة ، يمكنك الحفاظ على وسط المنطقة المركزية حتى لو كان للأقسام اليمنى/اليمنى عرضًا مختلفًا (إذا لم تتفوق على مساحة أعمدةهم).
لغة البرمجة:
<div id="container">
<div id="left" class="col col-xs-4 text-left">Left</div>
<div id="center" class="col col-xs-4 text-center">Center</div>
<div id="right" class="col col-xs-4 text-right">Right</div>
</div>
CSS:
#container {
border: 1px solid #aaa;
margin: 10px;
padding: 10px;
height: 100px;
}
.col {
border: 1px solid #07f;
padding: 0;
}
لإنشاء هذا الهيكل بدون مكتبات ، قمت بنسخ بعض القواعد من CSS Bootstrap.
لغة البرمجة:
<div id="container">
<div id="left" class="col">Left</div>
<div id="center" class="col">Center</div>
<div id="right" class="col">Right</div>
</div>
CSS:
* {
box-sizing: border-box;
}
#container {
border: 1px solid #aaa;
margin: 10px;
padding: 10px;
height: 100px;
}
.col {
float: left;
width: 33.33333333%;
border: 1px solid #07f;
padding: 0;
}
#left {
text-align: left;
}
#center {
text-align: center;
}
#right {
text-align: right;
}
فيما يلي التغييرات التي اضطررت إلى إجراؤها على الإجابة المقبولة عندما فعلت هذا مع صورة كعنصر مركزي:
- تأكد من أن الصورة محاطة داخل Div (
#center
في هذه الحالة). إذا لم يكن الأمر كذلك ، فسوف يتعين عليك تعيينهdisplay
إلىblock
, ، ويبدو أنه يركز على المسافة بين العناصر العائمة. تأكد من ضبط حجم كل من الصورة و حاويةها:
#center { margin: 0 auto; } #center, #center > img { width: 100px; height: auto; }
يمكنك تجربة هذا:
رمز HTML الخاص بك مثل هذا:
<div id="container">
<div id="left"></div>
<div id="right"></div>
<div id="center"></div>
</div>
ورمز CSS مثل هذا:
#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}
لذلك ، يجب أن يكون الإخراج هكذا:
[[LEFT] [CENTER] [RIGHT]]
.processList
text-align: center
li
.leftProcess
float: left
.centerProcess
float: none
display: inline-block
.rightProcess
float: right
html
ul.processList.clearfix
li.leftProcess
li.centerProcess
li.rightProcess
لقد فعلت ذلك بشكل صحيح ، تحتاج فقط إلى مسح عواماتك. ببساطة أضف
overflow: auto;
إلى فئة الحاوية الخاصة بك.
الحل الأسهل هو صناديق جدول مع 3 أعمدة ووسط هذا الجدول.
لغة البرمجة:
<div id="cont">
<table class="aa">
<tr>
<td>
<div id="left">
<h3 class="hh">Content1</h3>
</div>
</td>
<td>
<div id="center">
<h3 class="hh">Content2</h3>
</div>
</td>
<td>
<div id="right"><h3 class="hh">Content3</h3>
</div>
</td>
</tr>
</table>
</div>
CSS:
#cont
{
margin: 0px auto;
padding: 10px 10px;
}
#left
{
width: 200px;
height: 160px;
border: 5px solid #fff;
}
#center
{
width: 200px;
height: 160px;
border: 5px solid #fff;
}
#right
{
width: 200px;
height: 160px;
border: 5px solid #fff;
}
#warpcontainer {width:800px; height:auto; border: 1px solid #000; float:left; }
#warpcontainer2 {width:260px; height:auto; border: 1px solid #000; float:left; clear:both; margin-top:10px }