اذهب إلى المحتوى

النموذج الصندوقي (Box Model) في CSS


زائر

ما هو النموذج الصندوقي؟

ترسم المتصفحات مستطيلًا حول كل عنصر في صفحة HTML ويصف النموذج الصندوقي كيف تُضاف الحواشي والإطارات والهوامش للمحتوى لرسم هذا المستطيل.

diagram.png

الرسم التخطيطي من CSS2.2 Working Draft.

يسمى محيط كل مساحة من المساحات الأربع مُحدِّد، كل مُحدِّد يحدد صندوقًا معينًا.

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

مثال

div {
    border: 5px solid red;
    margin: 50px;
    padding: 20px;
}

هذه الشيفرة تنشيء إطارًا بعرض 5 بكسلات لحواف العنصر الأربع لكل عناصر div في صفحة HTML، وكذلك تضيف هوامش بعرض 50 بكسل و حواشي بعرض 20 بكسل في الاتجاهات الأربعة. بتجاهل المحتوى، يكون النموذج الصندوقي الناتج بهذا الشكل:

box-model-1.png

  • بما أنه لا يوجد محتوى، سيكون صندوق المحتوى (الصندوق الأزرق في الوسط) بدون عرض أو ارتفاع (0 بكسل * 0 بكسل).
  • بشكل إبتدائي يكون صندوق الحواشي بنفس مساحة صندوق المحتوى، بالإضافة إلى عرض الحواشي 20 بكسل في الحواف الأربع. وتكون مساحة الصندوق (40 بكسل * 40 بكسل).
  • صندوق الإطارات له نفس مساحة صندوق الحواشي، بالإضافة إلى 5 بكسلات تمثل عرض الإطار للحواف الأربع. وتكون مساحة الصندوق الكلية (50 بكسل * 50 بكسل).
  • أخيرًا، صندوق الهوامش له نفس مساحة صندوق الحواشي بالإضافة إلى 50 بكسل تمثل عرض الهوامش في الحواف الأربع. وتكون مساحة صندوق العنصر الكلية (150 بكسل * 150 بكسل).

إذا أضفنا أخًا للعنصر الحالي بنفس الأنماط فسينظر المتصفح للنموذج الصندوقي للعنصرين ليحدد أين يوضع العنصر الجديد بالنسبة لمحتوى العنصر السابق.

box-model-2.png

يفصل بين محتوى العنصرين مسافة 150 بكسل، لكن النماذج الصندوقية لهما متلامسة.

إذا عدلنا العنصر الأول وحذفنا الهامش الأيمن، فسيكون حد صندوق الهوامش الأيمن مطابق لحد صندوق الإطارات الأيمن. وسيظهر العنصرين بالشكل التالي:

box-model-3.png

تعديل النموذج الصندوقي باستخدام الخاصية box-sizing

قد يسلك النموذج الصندوقي الأساسي (أي content-box) سلوكًا غير متوقع، فعندما تبدأ بإضافة حواشي أو إطارات للعنصر يصبح الارتفاع والعرض المحددين لا يمثلان الارتفاع والعرض الحقيقيين للعنصر الظاهر على الشاشة. ويوضح المثال التالي هذه المشكلة:

textarea {
    width: 100%;
    padding: 3px;
    box-sizing: content-box; /* default value */
}

بما أن الحواشي ستضاف لعرض العنصر textarea، يصبح عرض العنصر الناتج أكبر من 100%.

لحسن الحظ، تمكننا CSS من تعديل النموذج الصندوقي للعنصر باستخدام خاصية box-sizing التي يمكن أن تأخذ إحدى القيم التالية لضبط النموذج الصندوقي للعنصر:

المعامل الوصف
content-box عرض وارتفاع العنصر يتضمن فقط مساحة المحتوى دون الحاشية والإطار.
padding-box عرض وارتفاع العنصر يتضمن مساحة المحتوى والحاشية فقط باستثناء الإطار
border-box عرض وارتفاع العنصر، يتضمن مساحة المحتوى والحاشية والإطار.
initial تُطبِّق القيمة الإبتدائية للنموذج الصندوقي
inherit تُوَرِّث النموذج الصندوقي للعنصر الأب.

1ZiRc.png

لحل مشكلة عنصر textarea في المثال السابق، يمكن تغيير قيمة الخاصية box-sizing إلى padding-box أو border-box والأخيرة هي الأكثر إنتشارًا.

textarea {
    width: 100%;
    padding: 3px;
    box-sizing: border-box;
}

لتطبيق نموذج صندوقي معين لكل العناصر في صفحة HTML يمكن استعمال الشيفرة التالية:

html {
    box-sizing: border-box;
}

*, *:before, *:after {
    box-sizing: inherit;
}

في هذه الشيفرة، لا تطبق الخاصية ;box-sizing: border-box مباشرة على كل العناصر(*)، بالتالي يمكنك بسهولة استبدالها في العناصر كلٌّ على حدة.

الهوامش (Margins)

المعامل الوصف
0 يحذف جميع الهوامش الخاصة بالعنصر.
auto يستعمل للتوسيط بإضافة هوامش متساوية على الجانبين.
units انظر قسم الوحدات لمعرفة الوحدات المتاحة.
inherit تُوَرِّث قيمة الهامش من العنصر الأب.
initial تُطبِّق القيمة الإبتدائية للهامش.

تداخل الهوامش (Margin Collapsing)

عند تلامس هامشين رأسيًا فإنهما يتداخلان ويصبحان هامشًا واحدًا بارتفاع يساوي ارتفاع الهامش الأكبر، ولكن عندما يتلامسان أفقيًا لا يحدث تداخل ويكون عرض الهامش الناتج مساويًا لمجموع عرض الهامشين.

مثال لتداخل الهوامش الرأسية

  • ملف CSS:
  div {
      margin: 10px;
  }
  • ملف HTML:
  <div>
      some content
  </div>
  <div>
      some more content
  </div>

وتكون المسافة الرأسية بين العنصرين 10 بكسلات بسبب تداخل الهوامش.

مثال لتداخل الهوامش الأفقية

  • ملف CSS:
  span {
      margin: 10px;
  }
  • ملف HTML:
  <span>some</span><span>content</span>

وتكون المسافة الأفقية بين العنصرين 20 بكسل، أي أنها تساوي مجموع الهوامش الأفقية للعنصرين.

تداخل الهوامش ذات الأبعاد المختلفة

  • ملف CSS:
  .top {
      margin: 10px;
  }
  .bottom {
      margin: 15px;
  }
  • ملف HTML:
  <div class="top">
      some content
  </div>
  <div class="bottom">
      some more content
  </div>

وتكون المسافة الرأسية بين العنصرين 15 بكسل، وذلك لأن الهوامش المتداخلة تأخذ أبعاد الهامش الأكبر.

  • ملف CSS:
  .outer-top {
      margin: 10px;
  }
  .inner-top {
      margin: 15px;
  }
  .outer-bottom {
      margin: 20px;
  }
  .inner-bottom {
      margin: 25px;
  }
  • ملف HTML:
  <div class="outer-top">
      <div class="inner-top">
          some content
      </div>
  </div>
  <div class="outer-bottom">
      <div class="inner-bottom">
          some more content
      </div>
  </div>

بما أنَّ جميع الهوامش متداخلة، تكون المسافة بين النصين 25 بكسل.

ماذا يحدث في حال إضافة إطارات حول العناصر؟

  div {
      border: 1px solid red;
  }

عند إضافة إطارات حول العناصر كما في المثال السابق، تصبح المسافة بين النصين 59 بكسل وهي مجموع مساحات الهوامش بالإضافة لأربعة بكسلات تمثل مجموع الإطارات حول الحاويات الأربعة. لا يحدث التداخل في هذه الحالة لأن الهوامش أصبحت غير متلامسة إذ يفصل الإطار بينها.

تداخل هوامش العنصر الأب مع هوامش ابنه

  • ملف HTML:
  <h1>Title</h1>
  <div>
      <p>Paragraph</p>
  </div>
  • ملف CSS:
  h1 {
      margin: 0;
      background-color: #cff;
  }
  div {
      margin: 50px 0 0 0;
      background: #cfc;
  }
  p {
      margin: 25px 0 0 0;
      background: #cf9;
  }

في المثال أعلاه، تكون المسافة الرأسية بين عنصر العنوان الرئيسي h1 وعنصر الفقرات p هي 50 بكسل (مساحة الهامش الأكبر)، قد تتوقع أن تكون المسافة بينهما 75 بكسل (لأن الحاوية div لديها هامش علوي بارتفاع 50 بكسل وعنصر الفقرات p لديه هامش علوي بارتفاع 25 بكسل)، لكن لا يحدث هذا بسبب تداخل الهوامش.

إضافة هامش باتجاه محدد

يمكن إضافة هامش باتجاه محدد باستعمال إحدى الخواص الأربع التالية:

margin-left
margin-right
margin-top
margin-bottom

الشيفرة أدناه تُضيف هامشًا أيسر بعرض 30 بكسل للحاوية myDiv#.

  • ملف HTML:
  <div id="myDiv"></div>
  • ملف CSS:
  #myDiv {
      margin-left: 30px;
      height: 40px;
      width: 40px;
      background-color: red;
  }
المعامل الوصف
margin-left اتجاه إضافة الهامش.
30px عرض الهامش.

الصياغة المختزلة للخاصية margin

توضح الشيفرة التالية كيفية استخدام الصياغة المختزلة للخاصية margin:

margin: <top> <right> <bottom> <left>;

الشيفرة التالية تُضيف هامشًا للحافة العليا بارتفاع صفر بكسل (أي لا يوجد هامش علوي)، وهامشًا للحافة اليُمنى بعرض 10 بكسلات، وهامشًا للحافة السُفلي بارتفاع 50 بكسل، وهامشًا للحافة اليُسرى بعرض 100 بكسل.

  • ملف HTML:
  <div id="myDiv"></div>
  • ملف CSS:
  #myDiv {
      margin: 0 10px 50px 100px;
      height: 40px;
      width: 40px;
      background-color: red;
  }

تبسيط خاصية الهوامش (margin)

p {
    margin: 1px;
    margin: 1px 1px;
    margin: 1px 1px 1px;
    margin: 1px 1px 1px 1px;

    /* جميع القواعد أعلاه تؤدي لنفس النتيجة */    
}

مثال آخر

p {
    margin: 10px 15px;
    margin: 10px 15px 10px 15px;
    margin 10px 15px 10px;

    /* جميع القواعد أعلاه تؤدي لنفس النتيجة */ 
}

توضح الشيفرة التالية الصيغ العامة لاستعمال خاصية الهامش (margin)

margin: <all>;
margin: <top and bottom> <left and right>;
margin: <top> <left and right> <bottom>;
margin: <top> <right> <bottom> <left>;

توسيط العناصر أفقيًا باستخدام خاصية الهامش (margin)

تُستخدم القاعدة margin: 0 auto لتوسيط العناصر الكُتلية أفقيًا عن طريق إضافة هوامش متساوية يمين ويسار العنصر، ويُشترط أن يكون عرض العنصر المُراد توسيطه أقل من عرض الحاوية.

#myDiv {
    width: 80%;
    margin: 0 auto;
}

استخدمنا في المثال أعلاه الصياغة المختزلة لكتابة الخاصية margin لإضافة هوامش بعرض صفر أعلى وأسفل العنصر (يمكن أن تكون أي قيمة أخرى) ومن ثم استعملنا القيمة auto لإضافة هوامش متساوية يمين ويسار العنصر وبالتالي توسيطه أفقيًا. عرض العنصر myDiv# هو 80% من عرض الحاوية الخارجية له، مما يترك 20% من مساحة الحاوية فارغة. عند تحديد القيمة auto لخاصية margin يُوَزِّع المتصفح هذه المساحة بالتساوي على يمين ويسار االعنصر، أي تكون المسافة على كل جانب 10%.

مثال

من الشائع افتراض أن تحديد قيم نسبية للهوامش يكون نسبةً إلى العنصر الأب. هذا الافتراض صحيح بالنسبة للهوامش الأفقية margin-left و margin-right. حيث يكون عرض الهامش نسبيًا لعرض العنصر الأب.

.parent {
    width: 500px;
    height: 300px;
}

.child {
    width: 100px;
    height: 100p;
    margin-left: 10%; /* parentWidth * 10/100 => 50px */
}

لكن الأمر يختلف عند الحديث عن الهوامش الرأسية margin-bottom و margin-top، فارتفاع الهامش الرأسي يكون نسبيًا من عرض العنصر الأب وليس من ارتفاعه كما يظن البعض.

.parent {
    width: 500px;
    height: 300px;
}

.child {
    width: 100px;
    height: 100px;
    margin-left: 10%;
    margin-top: 20%;
}

الهوامش السالبة

يمكن استعمال الهوامش السالبة لإنشاء عناصر متداخلة دون الحاجة لاستعمال الموضع المطلق.

  • ملف CSS:
  div {
      display: inline;
  }

  #over {
      margin-left: -20px;
  }
  • ملف HTML:
  <div>Base div</div>
  <div id="over">Overlapping div</div>

الحواشي (Paddings)

مساحة الحاشية هي المساحة بين محتوى العنصر والإطار الخارجي له، وتُحدد باستخدام خاصية padding.

يمكنك استعمال الصياغة المختزلة الموضحة في المثال أدناه من تعريف مساحات الحواشي للعنصر بدلًا عن تحديد مساحة الحاشية لكل حافة من حواف العنصر الأربع بخاصية منفردة (عن طريق استخدام padding-top، أو padding-left أو غيرهما).

في حالة تحديد أربع قيم للخاصية

<style>
    .myDiv {
        padding: 25px 50px 75px 100px; /* top right bottom left; */
    }
</style>
<div class="myDiv"></div>

 

padding4.png

في حالة تحديد ثلاث قيم للخاصية

<style>
    .myDiv {
        padding: 25px 50px 75px; /* top left/right bottom; */
    }
</style>
<div class="myDiv"></div>

 

padding3.png

في حالة تحديد قيمتين للخاصية

<style>
    .myDiv {
        padding: 25px 50px; /* top/bottom left/right; */
    }
</style>
<div class="myDiv"></div>

 

padding2.png

في حالة تحديد قيمة واحدة للخاصية

<style>
    .myDiv {
        padding: 25px; /* top/right/bottom/left; */
    }
</style>
<div class="myDiv"></div>

 

padding1.png

إضافة حاشية باتجاه محدد

يمكنك إضافة الحاشية باتجاه محدد باستعمال الخواص أدناه:

padding-top /* حاشية علوية */
padding-right /* حاشية يُمنى */
padding-bottom /* حاشية يُسرى */
padding-left /* حاشية سُفلية */

تُضيف الشيفرة أدناه حاشية علوية بعرض 5 بكسلات للعنصر.

<style>
    .myClass {
        padding-top: 5px;
    }
</style>

<div class="myClass"></div>

الإطارات Borders

خاصية الأركان المدورة border-radius

تمكنك خاصية border-radius من تغيير شكل النموذج الصندوقي فيمكن بضبطها تغيير زاوية كل ركن من أركان حواف العنصر.

FnIqF.png

تُعرِّف المجموعة الأولى من القيم الانحاء الأفقي للإطار بينما تُعرِّف المجموعة الثانية الاختيارية (المسبوقة بعلامة /) الانحاء الرأسي له. في حال وجود مجموعة واحدة فقط فإنها تُستخدم لتعريف الانحنائات الأفقية والرأسية.

border-radius: 10px 5% / 20px 25em 30px 35em;

تُحدِّد القيمة 10px الانحاء الأفقي للإطار من أعلى اليسار وأسفل اليمين، بينما تحدِّد القيمة 5% الانحاء الأفقي من أعلى اليمين وأسفل اليسار. تُحدِّد الأربع قيم المسبوقة بعلامة / الانحاء الرأسي للإطار من أعلى اليسار، وأعلى اليمين، وأسفل اليمين وأسفل اليسار على الترتيب.

يُوضح المثال التالي كيفية استخدام الصياغة المختزلة لتدوير الإطارات:

  • ملف HTML:
  <div class='box'></div>
  • ملف CSS:
  .box{
      width:250px;
      height:250px;
      background-color:black;
      border-radius:10px;
  }

تُحدِّد القيمة 10px انحناء الإطار في الاتجاهات الثمانية المذكورة في الفقرة السابقة.

من الاستخدامات الشائعة لخاصية border-radius استخدامها لتحويل صندوق العنصر لشكل دائري عن طريق إعطائها قيمة مساوية لنصف ارتفاع الصندوق.

.circle{
    width:200px;
    height:200px;
    border-radius:100px;
}

من الشائع استخدام نسب مئوية لتحديد قيمة خاصية border-raduis لتجنُّب حسابها يدويًا.

.circle{
    width:150px;
    height:150px;
    border-radius:50%;
}

يصبح شكل صندوق العنصر بيضاويًا في حال اختلاف قيمتي الارتفاع والعرض.

إضافة البوادئ الخاصة بالمتصفحات القديمة إلى الخاصية border-radius

{ 
  -webkit-border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
  -webkit-border-bottom-left-radius: 0;
  -webkit-border-top-left-radius: 0;
  -moz-border-radius-topright: 4px;
  -moz-border-radius-bottomright: 4px;
  -moz-border-radius-bottomleft: 0;
  -moz-border-radius-topleft: 0;
  border-top-right-radius: 4px;
  border-bottom-right-radius: 4px;
  border-bottom-left-radius: 0;
  border-top-left-radius: 0; 
}

خاصية أنماط الإطارات border-style

تُحدد خاصية border-style شكل خط الإطار الخاص بالعنصر لجميع حواف (الأيمن والأيسر والعلوي والسفلي) ويمكن أن تأخذ من قيمة واحدة إلى أربع قيم، تُحدد كلٌّ منها شكل خط الإطار لأحد الحواف.

مثال

border-style: dotted;
border-style: dotted solid double dashed;

 

gieW6.png

و بشكل عام يُحدَّد شكل خط الإطار لحواف العنصر حسب الترتيب التالي:

border-style: <ALL>; /* القيمة الواحدة تحدد شكل خط الإطار لجميع الأوجه*/
border-style: <top> <right> <bottom> <left>;

يمكن أن تأخذ خاصية border-style القيم none أو hidden ولهما نفس التأثير، إلَّا أن hidden تستخدم لحل مشكلة تداخل إطارات عنصر الجداول

مع إطارات خلايا الجدول حيث تُخفي اطارات الخلايا. بينما none تسبب في تداخل الإطارات المتلامسة وظهورها بسُمك يساوي مجموع سُمكي إطار الجدول وإطار الخلية.

إنشاء إطارات متعددة

استخدام outline

.div1{
    border: 3px solid black;
    outline: 6px solid blue;
    width: 100px;
    height: 100px;
    margin: 20px;
}

استخدام box-shadow

.div2{
    border: 5px solid green;
    box-shadow: 0px 0px 0px 4px #000;
    width: 100px;
    height: 100px;
    margin: 20px; 
}

استخدام العناصر الزائفة (pseudo elements)

.div3 {  
   position: relative;  
   border: 5px solid #000;  
   width: 100px;  height: 100px;  
   margin: 20px; 
} 
.div3:before {  
    content: " ";  
    position: absolute;  
    border: 5px solid blue;  
    z-index: -1;  top: 5px;  
    left: 5px;  
    right: 5px;  
    bottom: 5px; 
}

النتيجة:

lta3P.png

اطّلع على تجربة حيّة لهذا المثال على JSFiddle.

الصياغة المختزلة لإنشاء الإطارات

تحتاج في معظم الحالات لتعريف العديد من الخصائص للإطار مثل border-width، وborder-style، وborder-color لكل أوجه العنصر، يُمكنك في هذه الحالات استعمال الصياغة المختزلة الموضحة في المثال التالي:

عوضاً عن كتابة

border-width: 1px; 
border-style: solid; 
border-color: #000;

يمكنك كتابة

border:1px solid #000;

يمكن استعمال هذه الطريقة لإنشاء إطار في اتجاه محدد، على سبيل المثال تُنشيء الشيفرة التالية إطارًا عُلويًا ذا خط مزدوج وثُخن بكسلين ولون رمادي.

border-top: 2px double #aaaaaa;

خاصية تداخل الإطارات border-collapse

تعمل خاصية border-collapse فقط على الجداول والعناصر المعروضة كجدوال (أي تمتلك القاعدة display: table أو display: inline-table)، وتحدد ما إذا كان إطار الجدول منفصلًا عن إطار الخلايا أم أنه مُدمج معها (أي تتشارك الخلايا المتجاورة الإطار مع بعضها البعض).

table {  
    border-collapse: separate; /* default */  
    border-spacing: 2px; /* تضيف فراغ بين الإطارات المتلامسة */ 
}

لمزيد من المعلومات انظر توثيق خاصية border-collapse.

خاصية border-image

تسمح هذه الخاصية برسم صورة على إطار العنصر، مما يُسَهِّل عملية إنشاء إطارات ذات مظهر مخصص. وتستخدم هذه الخاصية بدلًا من أشكال الإطارات المُعرَّفة عبر الخاصية border-style.

تتكون خاصية border-image من ثلاث خصائص هي:

  • border-image-source: تحدد مسار الصورة المراد استخدامها كإطار.
  • border-image-slice: تُقسِّم الصورة المحددة عبر الخاصية border-image-source إلى تسع مناطق، الأركان الأربعة، والحواف، والوسط.
  • border-image-repeat: تُعرِّف كيفية عرض الجزء الأوسط من الصورة لكي تُطابق أبعاد الإطار. ويمكن استخدام قيمة واحدة لهذه الخاصية لضبط سلوك جميع الحواف، أو يمكن تحديد قيمتين لضبط سلوك الحواف الأفقية والرأسية كلًأ على حدة.

مثال باستخدام صورة بحجم 90 بكسل * 90 بكسل

border-image: url("border.png") 30 stretch;

تُقسَّم الصورة في المثال أعلاه لتسع مناطق كل واحدة بحجم 30 بكسل * 30 بكسل. وتستخدم حواف الصورة كأركان للإطار والجوانب الأربعة لها تُمثل أوجه الإطار. وتتمدد الصورة لتُغطي كل العنصر في حال زيادة ارتفاعه عن 30 بكسل.

إنشاء إطارات متعددة الألوان باستخدام خاصية border-image

  • ملف CSS:
.bordered {  
    border-image: linear-gradient(to right, red 20%, green 20%, green 40%, blue 40%, blue 60%, maroon 60%, maroon 80%, chocolate 80%); /* gradient with required colors */  
    border-image-slice: 1; 
}
  • ملف HTML:
<div class='bordered'>Border on all sides</div>

يرسم المثال أعلاه إطارًا مكون من 5 الوان عُرِّفت باستخدام التدرج الخطي linear-gradient (يمكنك زيارة التوثيق لمزيد من العلومات عن هذه الخاصية وخاصية border-image-slice ).

YWzek.png

من المُلاحظ أن للإطار لون واحد فقط في الاتجاهين الأيمن والأيسر من الصندوق، وذلك يرجع للطريقة التي تعمل بها الخاصية border-image وهي تطبيق التدرج اللوني على كل الصندوق ومن ثم إخفاء الصورة من منطقة الحواشي والمحتوى مما يجعلها تبدو كإطار للصندوق.

تُحدَّد الاتجاهات التي تأخذ اللون الواحد عبر تعريف التدرج اللوني، إذا كان التدرج من اليسار إلى اليمين يأخذ الإطار الأيسر أول لون في التدرج بينما يأخذ الإطار الأيمن آخر لون في التدرج. وإذا كان التدرج من أعلى لأسفل يأخذ الإطار العُلوي أول لون في التدرج بينما يأخذ الإطار السفلي آخر لون في التدرج.

مثال يوضح التدرج اللوني من أعلى لأسفل

6ihGO.png

إذا كان المطلوب إضافة إطار باتجاه واحد فقط، يمكن استخدام خاصية border-width وتحديد قيمة العرض بصفر بكسل في الاتجاهات التي لا ترغب في إضافة إطار عليها.

border-width: 5px 0px 0px 0px;

 

wU0fE.png

ملاحظة: لا يمكن تدوير إطارات العناصر التي تمتلك خاصية border-image، واستخدام خاصية border-radius معها يؤدي إلى تدوير الخلفية بدلاً من الإطار.

إنشاء إطار للعنصر باتجاه محدد

تستخدم الخاصية border-[left|right|top|bottom] لعمل إطار للعنصر باتجاه محدد، مثلًا الخاصية border-left تُضيف الإطار باتجاه اليسار فقط.

#element {    
    border-left: 1px solid black; 
}

حدود العنصر (Outlines)

المعامل التفاصيل
dotted خط حد مُنقَّط
dashed خط حد متقطع
solid خط حد متصل
double خط حد مزدوج
groove خط حد مموج ثلاثي الأبعاد، يتعمد على قيمة لون خط الحد outline-color
ridge خط حد ثلاثي الأبعاد، يعتمد على قيمة لون خط الحد outline-color
inset خط حد داخلي ثلاثي الأبعاد، يعتمد على قيمة لون خط الحد outline-color
outset خط حد خارجي ثلاثي الأبعاد، يعتمد على قيمة لون خط الحد outline-color
none حذف خط الحد
hidden اخفاء خط الحد

حدود العنصر outline هي الخطوط التي تُرسم خارج إطار العنصر، ولا تأخذ مساحة في النموذج الصندوقي، وبالتالي لا تؤثر على موضع العنصر أو بقية العناصر في الصفحة. تأخذ في بعض المتصفحات حدود العنصر شكلاً آخر غير المستطيل، غالبًا ما يحدث هذا عند تطبيق خاصية outline على عنصر span يحتوى على نصوص ذات أحجام خط مختلفة. وعلى عكس الإطارات (border)، لا يمكن تدوير أركان حدود العنصر.

الخصائص الأساسية لحدود العنصر هي: outline-color، وoutline-style، وoutline-width.

ملاحظة: على الرغم من التشابه بين حدود العنصر والإطارات في تأثيرهما وطريقة إنشائهما، إلَّا أنهما خاصيتين مختلفتين تمامًا.

يوضح المثال التالي كيفية إنشاء حدود العنصر:

outline:1px solid black;

خاصية outline-style

تحدد هذه الخاصية شكل حدود العنصر ويمكن أن تأخذ أيًّا من القيم الموضحة في الجدول الموضح في بداية هذا الفصل. ويُبيِّن المثال التالي كيفية استخدامها:

  • ملف CSS:
  p{
  border:1px solid black;
  outline-color:blue;
  line-height:30px;
  }
  .p1{
      outline-style:dotted;
  }
  .p2{
      outline-style:dashed;
  }
  .p3{
      outline-style:solid;
  }
  .p4{
      outline-style:double;
  }
  .p5{
      outline-style:groove;
  }
  .p6{
      outline-style:ridge;
  }
  .p7{
      outline-style:inset;
  }
  .p8{
      outline-style:outset;
  }
  • ملف HTML:
  <p class="p1">A dotted outline</p>
  <p class="p2">A dashed outline</p>
  <p class="p3">A solid outline</p>
  <p class="p4">A double outline</p>
  <p class="p5">A groove outline</p>
  <p class="p6">A ridge outline</p>
  <p class="p7">A inset outline</p>
  <p class="p8">A outset outline</p>

النتيجة:

KHAoO.png

الخاصية Overflow

المعامل الوصف
visible تُظهر المحتوى الفائض عن حجم العنصر دون اقتصاص.
hidden اقتصاص المحتوى الفائض عن حجم العنصر دون إظهار شريط تمرير (scroll bar).
scroll اقتصاص المحتوى الفائض عن حجم العنصر مع إظهار شريط تمرير (scroll bar).
auto نفس عمل scroll، لكنها لا تضيف شريط التمرير (scroll bar) في حالة كان حجم المحتوى أقل من أو يساوي حجم الحاوية.
inherit تُوَرِّث قيمة خاصية overflow الخاصة بالعنصر الأب للابن.

خاصية overflow-wrap

تُخبر الخاصية overflow-wrap المتصفح أنّ بإمكانه تقسيم النصوص والكلمات الطويلة على عدد من الأسطر لمنعها من تجاوز حدود صندوق المحتوى.

  • ملف CSS:
  div {
      width: 100px;
      outline: 1px dashed #bbb;
  }

  #div1 {
      overflow-wrap: normal;
  }

  #div2 {
      overflow-wrap: break-word
  }
  • ملف HTML:
  <div id="div1">
      <strong>#div1</strong>: Small words are displayed normally but a word like <span style="red;">supercalifragilisticexpialidocious</span> is too long so it will overflow past the edge of the line-break
  </div>

  <div id="div2">
      <strong>#div2</strong>: Small words are displayed normally, but a long word like <span style="red">supercalifragilisticexpialidocious</span> will be split at the line break and continue on the next line.
  </div>

النتيجة:

VRNhr.png

المعامل الوصف
normal تسمح للكلمة بالخروج من الحاوية إذا كانت أطول منها.
break تقسم الكلمة على عدد من الأسطر إذا كانت أطول من الحاوية.
inherit تُوِّرث قيمة overflow-wrap الخاصة بالعنصر الأب للابن.

خاصية overflow-x و overflow-y

تعمل هاتان الخاصيتان عملًا مشابهًا لخاصية overflow ولهما نفس قيمها، الاختلاف هو أن الخاصية overflow-x تعمل في المحور الأفقي فقط بينما تعمل الخاصية overflow-y في المحور الرأسي.

  • ملف HTML:
  <div id="div-x">
      If this div is too small to display its contents,
      the content to the left and right will be clipped
  </div>
  <div id="div-y">
      If this div is too small to display its contents,
      the content to the top and bottom will be clipped
  </div>
  • ملف CSS:
  div {
      width: 200px;
      height: 200px;
  }

  #div-x {
      overflow-x: hidden;
  }

  #div-y {
      overflow-y: hidden;
  }

القاعدة overflow: scroll

  • ملف HTML:
  <div>
      This div is too small to display its contents to display the effects of the overflow property.
  </div>
  • ملف CSS:
  div {
      width: 100px;
      height: 100px;
      overflow: scroll;
  }

النتيجة

krWW2.png

في المثال أعلاه، مساحة الحاوية أقل من مساحة المحتوى مما يؤدي إلى اقتصاصه وإظهار شريط تمرير أفقي وآخر رأسي، ويظهر المحتوى كاملًا عند الطباعة.

القاعدة overflow: visible

  • ملف HTML:
  <div>
      Even if this div is too small to display its content, the content is not clipped
  </div>
  • ملف CSS:
  div {
      width: 50px;
      height: 50px;
      overflow: visible;
  }

النتيجة:

HLZHC.png

لاحظ عدم اقتصاص المحتوى عند استعمال القاعدة overflow: visible وإنما يمتد خارج صندوق المحتوى.

سياق تنسيق العناصر الكتلية الناتج عن خاصية overflow

استعمال خاصية overflow بقيمة غير visible يتسبب في إنشاء سياق جديد لتنسيق الكُتل مما يُفيد في محاذاة العناصر الكتلية المجاورة للعناصر العائمة (floated elements).

  • ملف CSS:
  img {
      float: left;
      margin-right: 10px;
  }

  div {
      overflow: hidden; /* تًنشيء سياق جديد لتنسيق العناصر الكتلية */
  }
  • ملف HTML:
  <img src="http://placehold.it/100*100">
  <div>
      <p>lorem ipsum dolor sit amet, cum no paulo mollis pertinácia.</p>
      <p>Ad case omnis nam, mutat deseruisse perseqeris eos ad, in tollit debitis sea.</p>
  </div>

النتيجة

s0Pch.png

ترجمة -وبتصرف- للفصول [Box Model, Margins, Paddings, Borders, Outlines, Overflow] من كتاب CSS Notes for Professionals


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...