الفرق بين المراجعتين ل"CSS/box-sizing"

من موسوعة حسوب
< CSS
اذهب إلى التنقل اذهب إلى البحث
 
 
(5 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:الخاصية <code>box-sizing</code>}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:الخاصية <code>box-sizing</code>}}</noinclude>
الخاصية <code>box-sizing</code> في CSS تُستخدم لتعديل النموذج الصندوقي الافتراضي في CSS (أي CSS box model) المستخدم لحساب عرض وارتفاع العناصر.<syntaxhighlight lang="css">
+
الخاصية <code>box-sizing</code> في CSS تُستخدم لتعديل النموذج الصندوقي الافتراضي في CSS (أي CSS box model) المستخدم لحساب عرض وارتفاع العناصر.
/* الكلمات المحجوزة */
 
box-sizing: content-box;
 
box-sizing: border-box;
 
  
/* القيم العامة */
+
== بطاقة الخاصية ==
box-sizing: inherit;
 
box-sizing: initial;
 
box-sizing: unset;
 
</syntaxhighlight>يُطبَّق العرض والارتفاع -افتراضيًا- على صندوق المحتوى (content box) التابع للعنصر، وإذا كان للعنصر إطار (<code>[[CSS/border|border]]</code>) أو حاشية (<code>[[CSS/padding|padding]]</code>) فستُضاف إلى العرض والارتفاع لتُشكِّل أبعاد العنصر المعروضة على الشاشة، وهذا يعني أنَّك عندما تضبط العرض والارتفاع فعليك أن تضع بالحسبان قيمة الحاشية والإطار إن أضفتهما، وهذا صعب خصوصًا عندما يكون تصميم صفحتك متجاوبًا (responsive).
 
 
 
يمكن أن تُستعمَل الخاصية <code>box-sizing</code> لتعديل هذا السلوك:
 
* القيمة <code>content-box</code> هي القيمة الافتراضية التي تعطيك السلوك الافتراضي المشروح أعلاه. فمثلًا لو ضبطنا عرض أحد العناصر إلى 100 بكسل فسيكون عرض صندوق المحتوى مساويًا إلى 100 بكسل ثم سيُضاف إليه عرض الإطار والحاشية ليُشكِّل أبعاد العنصر النهائية.
 
* القيمة <code>border-box</code> تخبر المتصفح أن يضع بالحسبان قيمة عرض الإطار والحاشية عند تحديد العرض والارتفاع، أي لو ضبطنا عرض أحد العناصر إلى 100 بكسل، فستتضمن هذه القيمة عرض الإطار والحاشية، وسيتم إعادة تحجم صندوق المحتوى تبعًا لقيمة الإطار أو الحاشية، وهذه القيمة تُسهِّل تحديد أبعاد العناصر كثيرًا.
 
 
{| class="wikitable" style="width: 100%;"
 
{| class="wikitable" style="width: 100%;"
 
|-
 
|-
سطر 31: سطر 20:
 
|كما حُدِّدَت.
 
|كما حُدِّدَت.
  
|}
+
|}<syntaxhighlight lang="css">
 +
/* الكلمات المحجوزة */
 +
box-sizing: content-box;
 +
box-sizing: border-box;
 +
 
 +
/* القيم العامة */
 +
box-sizing: inherit;
 +
box-sizing: initial;
 +
box-sizing: unset;
 +
</syntaxhighlight>يُطبَّق العرض والارتفاع -افتراضيًا- على صندوق المحتوى (content box) التابع للعنصر، وإذا كان للعنصر إطار (<code>[[CSS/border|border]]</code>) أو حاشية (<code>[[CSS/padding|padding]]</code>) فستُضاف إلى العرض والارتفاع لتُشكِّل أبعاد العنصر المعروضة على الشاشة، وهذا يعني أنَّك عندما تضبط العرض والارتفاع فعليك أن تضع بالحسبان قيمة الحاشية والإطار إن أضفتهما، وهذا صعب خصوصًا عندما يكون تصميم صفحتك متجاوبًا (responsive).
 +
 
 +
يمكن أن تُستعمَل الخاصية <code>box-sizing</code> لتعديل هذا السلوك:
 +
* القيمة <code>content-box</code> هي القيمة الافتراضية التي تعطيك السلوك الافتراضي المشروح أعلاه. فمثلًا لو ضبطنا عرض أحد العناصر إلى 100 بكسل فسيكون عرض صندوق المحتوى مساويًا إلى 100 بكسل ثم سيُضاف إليه عرض الإطار والحاشية ليُشكِّل أبعاد العنصر النهائية.
 +
القيمة <code>border-box</code> تخبر المتصفح أن يضع بالحسبان قيمة عرض الإطار والحاشية عند تحديد العرض والارتفاع، أي لو ضبطنا عرض أحد العناصر إلى 100 بكسل، فستتضمن هذه القيمة عرض الإطار والحاشية، وسيتم إعادة تحجم صندوق المحتوى تبعًا لقيمة الإطار أو الحاشية، وهذه القيمة تُسهِّل تحديد أبعاد العناصر كثيرًا.
  
 
== أمثلة ==
 
== أمثلة ==
 
أنشأنا في المثال الآتي عنصرَي <code>[[HTML/div|<nowiki><div></nowiki>]]</code> لهما الأبعاد نفسها (<code>[[CSS/width|width]]</code> و <code>[[CSS/height|height]]</code>) والحاشية نفسها (<code>[[CSS/padding|padding]]</code>) والإطار نفسه (<code>[[CSS/border|border]]</code>)، لكن تختلف قيمة الخاصية <code>box-sizing</code> بينهما، وسيبدو الفرق بينهما جليًا:<syntaxhighlight lang="css">
 
أنشأنا في المثال الآتي عنصرَي <code>[[HTML/div|<nowiki><div></nowiki>]]</code> لهما الأبعاد نفسها (<code>[[CSS/width|width]]</code> و <code>[[CSS/height|height]]</code>) والحاشية نفسها (<code>[[CSS/padding|padding]]</code>) والإطار نفسه (<code>[[CSS/border|border]]</code>)، لكن تختلف قيمة الخاصية <code>box-sizing</code> بينهما، وسيبدو الفرق بينهما جليًا:<syntaxhighlight lang="css">
<div class="content-box">Content box</div>
+
<div class="content-box">صندوق المحتوى</div>
 
<br>
 
<br>
<div class="border-box">Border box</div>
+
<div class="border-box">صندوق الحدود</div>
  
 
</syntaxhighlight>شيفرة CSS:<syntaxhighlight lang="css">
 
</syntaxhighlight>شيفرة CSS:<syntaxhighlight lang="css">
سطر 63: سطر 65:
 
<div class="container">
 
<div class="container">
 
   <div class="parent">
 
   <div class="parent">
     <p>Parent container</p>
+
     <p>عنصر الأب الحاوي</p>
 
     <div class="child" style="box-sizing: content-box;">
 
     <div class="child" style="box-sizing: content-box;">
       <p>Child container</p>
+
       <p>عنصر الولد الحاوي</p>
 
       <p class="css">
 
       <p class="css">
 
       box-sizing: content-box;<br/>
 
       box-sizing: content-box;<br/>
سطر 75: سطر 77:
 
    
 
    
 
   <div class="parent">
 
   <div class="parent">
     <p>Parent container</p>
+
     <p>عنصر الأب الحاوي</p>
 
     <div class="child border-padding" style="box-sizing: content-box;">
 
     <div class="child border-padding" style="box-sizing: content-box;">
       <p>Child container</p>
+
       <p>عنصر الولد الحاوي</p>
 
       <p class="css">
 
       <p class="css">
 
       box-sizing: content-box;<br/>
 
       box-sizing: content-box;<br/>
سطر 87: سطر 89:
 
    
 
    
 
   <div class="parent">
 
   <div class="parent">
     <p>Parent container</p>
+
     <p>عنصر الأب الحاوي</p>
 
     <div class="child border-padding"  style="box-sizing: border-box;">
 
     <div class="child border-padding"  style="box-sizing: border-box;">
       <p>Child container</p>
+
       <p>عنصر الولد الحاوي</p>
 
       <p class="css">
 
       <p class="css">
 
       box-sizing: border-box;<br/>
 
       box-sizing: border-box;<br/>
سطر 153: سطر 155:
 
تقبل الخاصية <code>box-sizing</code> قيمةً واحدةً هي كلمةٌ محجوزةٌ من الكلمات المذكورة أدناه.
 
تقبل الخاصية <code>box-sizing</code> قيمةً واحدةً هي كلمةٌ محجوزةٌ من الكلمات المذكورة أدناه.
  
=== القيمة <code>content-box</code> ===
+
=== <code>content-box</code> ===
هذه هي القيمة الافتراضية في مواصفة CSS. وإذا ضُبِطَت قيم للخاصيتين <code>[[CSS/width|width]]</code> و <code>[[CSS/height|height]]</code> فستُمثِّل أبعاد صندوق المحتوى، دون إدخال الإطار <code>[[CSS/border|border]]</code> أو الحاشية <code>[[CSS/padding|padding]]</code> أو الهوامش <code>[[CSS/margin|margin]]</code>، أي لو قلنا أنَّ عرض أحد العناصر هو 350 بكسل، ثم ضبنا عرض الإطار (على جميع الحواف) مساويًا للقيمة 10 بكسل، فسيكون عرض العنصر النهائي الظاهر هو 370 بكسل.
+
هذه هي القيمة الافتراضية في مواصفة CSS. وإذا ضُبِطَت للخاصيتين <code>[[CSS/width|width]]</code> و <code>[[CSS/height|height]]</code> فستُمثِّل أبعاد صندوق المحتوى، دون إدخال الإطار <code>[[CSS/border|border]]</code> أو الحاشية <code>[[CSS/padding|padding]]</code> أو الهوامش <code>[[CSS/margin|margin]]</code>، أي لو قلنا أنَّ عرض أحد العناصر هو 350 بكسل، ثم ضبنا عرض الإطار (على جميع الحواف) مساويًا للقيمة 10 بكسل، فسيكون عرض العنصر النهائي الظاهر هو 370 بكسل.
  
 
الخلاصة: العرض المُحدَّد هو عرض صندوق المحتوى فقط، والارتفاع المُحدَّد هو ارتفاع صندوق المحتوى فقط.
 
الخلاصة: العرض المُحدَّد هو عرض صندوق المحتوى فقط، والارتفاع المُحدَّد هو ارتفاع صندوق المحتوى فقط.
=== القيمة <code>border-box</code> ===
+
=== <code>border-box</code> ===
 
إذا ضُبِطَت هذه القيمة فهي تعني أنَّ الأبعاد المضبوطة عبر الخاصيتين <code>[[CSS/width|width]]</code> و <code>[[CSS/height|height]]</code> هي الأبعاد النهائية للعنصر، بما في ذلك صندوق المحتوى والحاشية والإطار لكن دون إدخال الهوامش.
 
إذا ضُبِطَت هذه القيمة فهي تعني أنَّ الأبعاد المضبوطة عبر الخاصيتين <code>[[CSS/width|width]]</code> و <code>[[CSS/height|height]]</code> هي الأبعاد النهائية للعنصر، بما في ذلك صندوق المحتوى والحاشية والإطار لكن دون إدخال الهوامش.
  
لو قلنا أنَّ عرض أحد العناصر هو 350 بكسل، ثم ضبنا عرض الإطار (على جميع الحواف) مساويًا للقيمة 10 بكسل، فسيكون عرض العنصر النهائي الظاهر هو 350 بكسل. يجدر بالذكر أنَّ أبعاد صندوق المحتوى لا يجوز أن تكون سالبةً، وستُقرَّب القيم السالبة إلى القيمة 0، أي لا يمكن استخدام القيمة <code>border-box</code> لجعل العنصر يختفي.
+
لو قلنا أنَّ عرض أحد العناصر هو 350 بكسل، ثم ضبنا عرض الإطار (على جميع الحواف) مساويًا للقيمة 10 بكسل، فسيكون عرض العنصر النهائي الظاهر هو 350 بكسل. يجدر بالذكر أنَّ أبعاد صندوق المحتوى لا يجوز أن تكون سالبةً، وستُقرَّب القيم السالبة إلى القيمة 0، أي لا يمكن استخدام <code>border-box</code> لجعل العنصر يختفي.
  
 
الخلاصة: العرض المُحدَّد هو عرض العنصر كله، والارتفاع المُحدَّد هو ارتفاع العنصر كله. بما في ذلك صندوق المحتوى والحاشية والإطار.
 
الخلاصة: العرض المُحدَّد هو عرض العنصر كله، والارتفاع المُحدَّد هو ارتفاع العنصر كله. بما في ذلك صندوق المحتوى والحاشية والإطار.
سطر 169: سطر 171:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== انظر أيضًا ==
 +
* صفحة الخاصية <code>[[CSS/position|position]]</code> التي تصف كيفية تموضع العنصر في المستند.
 +
* صفحة كل من الخاصيات <code>[[CSS/width|width]]</code>، و <code>[[CSS/bottom|height]]</code> المسؤولة عن تحديد أبعاد العنصر.
 +
* صفحة الخاصية <code>[[CSS/box-shadow|box-shadow]]</code> التي تصف تأثير الظلال على العنصر.
  
 
== مصادر ومواصفات ==
 
== مصادر ومواصفات ==
 
* مواصفة [https://drafts.csswg.org/css-ui-3/#box-sizing CSS Basic User Interface Module Level 3].  
 
* مواصفة [https://drafts.csswg.org/css-ui-3/#box-sizing CSS Basic User Interface Module Level 3].  
[[تصنيف:CSS]]
+
[[تصنيف:CSS|{{SUBPAGENAME}}]]
[[تصنيف:CSS Property]]
+
[[تصنيف:CSS Property|{{SUBPAGENAME}}]]
[[تصنيف:CSS Box Model]]
+
[[تصنيف:CSS Box Model|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 16:58، 24 يوليو 2018

الخاصية box-sizing في CSS تُستخدم لتعديل النموذج الصندوقي الافتراضي في CSS (أي CSS box model) المستخدم لحساب عرض وارتفاع العناصر.

بطاقة الخاصية

القيمة الابتدائية content-box
تُطبَّق على جميع العناصر التي يمكن تحديد قيمة للخاصية width و height فيها.
قابلة للوراثة لا
قابلة للتحريك لا
القيمة المحسوبة كما حُدِّدَت.
/* الكلمات المحجوزة */
box-sizing: content-box;
box-sizing: border-box;

/* القيم العامة */
box-sizing: inherit;
box-sizing: initial;
box-sizing: unset;

يُطبَّق العرض والارتفاع -افتراضيًا- على صندوق المحتوى (content box) التابع للعنصر، وإذا كان للعنصر إطار (border) أو حاشية (padding) فستُضاف إلى العرض والارتفاع لتُشكِّل أبعاد العنصر المعروضة على الشاشة، وهذا يعني أنَّك عندما تضبط العرض والارتفاع فعليك أن تضع بالحسبان قيمة الحاشية والإطار إن أضفتهما، وهذا صعب خصوصًا عندما يكون تصميم صفحتك متجاوبًا (responsive).

يمكن أن تُستعمَل الخاصية box-sizing لتعديل هذا السلوك:

  • القيمة content-box هي القيمة الافتراضية التي تعطيك السلوك الافتراضي المشروح أعلاه. فمثلًا لو ضبطنا عرض أحد العناصر إلى 100 بكسل فسيكون عرض صندوق المحتوى مساويًا إلى 100 بكسل ثم سيُضاف إليه عرض الإطار والحاشية ليُشكِّل أبعاد العنصر النهائية.
القيمة border-box تخبر المتصفح أن يضع بالحسبان قيمة عرض الإطار والحاشية عند تحديد العرض والارتفاع، أي لو ضبطنا عرض أحد العناصر إلى 100 بكسل، فستتضمن هذه القيمة عرض الإطار والحاشية، وسيتم إعادة تحجم صندوق المحتوى تبعًا لقيمة الإطار أو الحاشية، وهذه القيمة تُسهِّل تحديد أبعاد العناصر كثيرًا.

أمثلة

أنشأنا في المثال الآتي عنصرَي <div> لهما الأبعاد نفسها (width و height) والحاشية نفسها (padding) والإطار نفسه (border)، لكن تختلف قيمة الخاصية box-sizing بينهما، وسيبدو الفرق بينهما جليًا:

<div class="content-box">صندوق المحتوى</div>
<br>
<div class="border-box">صندوق الحدود</div>

شيفرة CSS:

div {
  width: 160px;
  height: 80px;
  padding: 20px;
  border: 8px solid salmon;
  background: #006699;
  color: white;
}

.content-box {
  box-sizing: content-box;
}

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

سنبيّن في المثال الآتي ثلاثة حالات، وفي كل حالة كان هنالك عنصر <div> أب (له إطار برتقالي) يحتوي على عنصر <div> ابن، وللعنصر الابن القاعدة width: 100%، وله خلفية زرقاء شفافة.

  • في أوّل مثال استخدمنا القيمة الافتراضية content-box، ولم يكن للعنصر الابن إطار ولا حاشية، وظهر داخل العنصر الأب دون مشاكل.
  • في المثال الثاني استخدامنا القيمة الافتراضية content-box، لكن أضفنا حاشية وإطار للعنصر الابن، وسنلاحظ كيف خرج العنصر الابن خارج العنصر الأب لأنَّ العرض المُحدَّد هو عرض صندوق المحتوى فقط، ثم أُضيفَت إليه قيمة عرض الإطار والحاشية.
  • في المثال الثالث استخدمنا القيمة border-box، وأصبح العنصر الابن يتسع في العنصر الأب دون مشاكل، لأن قيمة العرض (100%) أصبحت تتضمن الحاشية والإطار.
<div class="container">
  <div class="parent">
    <p>عنصر الأب الحاوي</p>
    <div class="child" style="box-sizing: content-box;">
      <p>عنصر الولد الحاوي</p>
      <p class="css">
      box-sizing: content-box;<br/>
      width: 100%;<br/>
      padding: 0;<br/>
      border-width: 0;</p>
    </div>
  </div>
  
  <div class="parent">
    <p>عنصر الأب الحاوي</p>
    <div class="child border-padding" style="box-sizing: content-box;">
      <p>عنصر الولد الحاوي</p>
      <p class="css">
      box-sizing: content-box;<br/>
      width: 100%;<br/>
      padding: 5px;<br/>
      border-width: 10px;</p>
      </div>
  </div>
  
  <div class="parent">
    <p>عنصر الأب الحاوي</p>
    <div class="child border-padding"  style="box-sizing: border-box;">
      <p>عنصر الولد الحاوي</p>
      <p class="css">
      box-sizing: border-box;<br/>
      width: 100%;<br/>
      padding: 5px;<br/>
      border-width: 10px;</p>
      </div>
  </div>
</div>

شيفرة CSS:

p {
  margin-left: 0.2em;
}

.container {
  display: flex;
}

.parent {
  width: 220px;
  border: solid 10px orange;
  margin: 0.8em;
}

.child {
  width: 100%;
  margin: 2em auto;
  background-color: rgba(229, 232, 252, 0.6);
}

.border-padding {
  padding: 5px;
  border: solid #5B6DCD 10px;
}

.css {
  font-family: monospace;
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 10.0 29.0 8.0 7.0 5.1

بعض المتصفحات (مثل Chrome و Firefox و Safari) كانت تدعم هذه الخاصية في الإصدارات القديمة منها، لكن مع استخدام سابقة -webkit- أو -moz-.

كانت هنالك قيمة إضافية لهذه الخاصية ألا وهي padding-box، لكنها أُهمِلَت وحُذِفَت من أغلبية المتصفحات الحديثة.

البنية العامة

تقبل الخاصية box-sizing قيمةً واحدةً هي كلمةٌ محجوزةٌ من الكلمات المذكورة أدناه.

content-box

هذه هي القيمة الافتراضية في مواصفة CSS. وإذا ضُبِطَت للخاصيتين width و height فستُمثِّل أبعاد صندوق المحتوى، دون إدخال الإطار border أو الحاشية padding أو الهوامش margin، أي لو قلنا أنَّ عرض أحد العناصر هو 350 بكسل، ثم ضبنا عرض الإطار (على جميع الحواف) مساويًا للقيمة 10 بكسل، فسيكون عرض العنصر النهائي الظاهر هو 370 بكسل.

الخلاصة: العرض المُحدَّد هو عرض صندوق المحتوى فقط، والارتفاع المُحدَّد هو ارتفاع صندوق المحتوى فقط.

border-box

إذا ضُبِطَت هذه القيمة فهي تعني أنَّ الأبعاد المضبوطة عبر الخاصيتين width و height هي الأبعاد النهائية للعنصر، بما في ذلك صندوق المحتوى والحاشية والإطار لكن دون إدخال الهوامش.

لو قلنا أنَّ عرض أحد العناصر هو 350 بكسل، ثم ضبنا عرض الإطار (على جميع الحواف) مساويًا للقيمة 10 بكسل، فسيكون عرض العنصر النهائي الظاهر هو 350 بكسل. يجدر بالذكر أنَّ أبعاد صندوق المحتوى لا يجوز أن تكون سالبةً، وستُقرَّب القيم السالبة إلى القيمة 0، أي لا يمكن استخدام border-box لجعل العنصر يختفي.

الخلاصة: العرض المُحدَّد هو عرض العنصر كله، والارتفاع المُحدَّد هو ارتفاع العنصر كله. بما في ذلك صندوق المحتوى والحاشية والإطار.

البنية الرسمية

box-sizing: content-box|border-box;

انظر أيضًا

  • صفحة الخاصية position التي تصف كيفية تموضع العنصر في المستند.
  • صفحة كل من الخاصيات width، و height المسؤولة عن تحديد أبعاد العنصر.
  • صفحة الخاصية box-shadow التي تصف تأثير الظلال على العنصر.

مصادر ومواصفات