المحاذاة الأفقية والرأسية للعناصر. طرق لتوسيط عموديًا في CSS

عند تخطيط الصفحة ، غالبًا ما يكون من الضروري إجراء محاذاة مركزية بطريقة CSS: على سبيل المثال ، قم بتوسيط الكتلة الرئيسية. هناك عدة خيارات لحل هذه المشكلة ، كل منها يجب أن يستخدم عاجلاً أم آجلاً من قبل أي مصمم تخطيط.

منتصف محاذاة النص

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

  • محاذاة النص: مركز ؛

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

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

محاذاة كتلة للمركز

إذا كنت بحاجة إلى تعيين div ليكون في المنتصف ، يمكن أن توفر CSS طريقة سهلة للقيام بذلك: استخدم الهوامش. يمكن تعيين المسافات البادئة لكل من عناصر الكتلة وعناصر الكتل المضمنة. يجب أن تأخذ قيمة الخاصية القيم 0 (المسافات البادئة الرأسية) والتلقائية (المسافات البادئة الأفقية التلقائية):

  • الهامش: 0 تلقائي ؛

الآن يتم التعرف على هذا الخيار المعين على أنه صالح تمامًا. يتيح لك استخدام المسافات البادئة الخارجية أيضًا ضبط المحاذاة المركزية للصورة: فهي تتيح لك حل العديد من المشكلات المرتبطة بوضع عنصر على الصفحة.

محاذاة كتلة إلى اليسار أو اليمين

في بعض الأحيان ، لا تكون المحاذاة المتمحورة حول CSS مطلوبة ، ولكنك تحتاج إلى وضع كتلتين جنبًا إلى جنب: أحدهما على اليسار والآخر على اليمين. للقيام بذلك ، توجد خاصية float ، والتي يمكن أن تأخذ واحدة من ثلاث قيم: يسار أو يمين أو لا شيء. لنفترض أن لديك كتلتان يجب وضعها جنبًا إلى جنب. ثم سيكون الرمز كما يلي:

  • .left (تعويم: يسار ؛)
  • .right (عائم: يمين)

إذا كان هناك أيضًا كتلة ثالثة يجب أن تكون موجودة تحت أول كتلتين (على سبيل المثال ، تذييل) ، فيجب أن تسجل الخاصية الواضحة:

  • .left (تعويم: يسار ؛)
  • .right (عائم: يمين)
  • تذييل (مسح: كلاهما)

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

انحياز عمودي

هناك أوقات لا يكفي فيها ضبط المحاذاة المركزية باستخدام أساليب CSS ، تحتاج أيضًا إلى تغيير الوضع الرأسي للكتلة الفرعية. يمكن تثبيت أي عنصر مضمن أو كتلة مضمنة في الحافة العلوية أو السفلية ، في منتصف العنصر الأصلي ، أو في أي مكان. غالبًا ما تكون محاذاة الكتلة في المركز مطلوبة ؛ لذلك ، يتم استخدام سمة المحاذاة الرأسية. لنفترض أن هناك كتلتان ، إحداهما متداخلة في الأخرى. في هذه الحالة ، تكون الكتلة الداخلية عنصر كتلة مضمنة (عرض: كتلة مضمنة). تحتاج إلى محاذاة الكتلة الفرعية عموديًا:

  • محاذاة لأعلى -. طفل (محاذاة رأسية: أعلى) ؛
  • محاذاة المركز -. طفل (محاذاة عمودية: وسط) ؛
  • محاذاة لأسفل -. طفل (محاذاة عمودية: أسفل) ؛

لا تؤثر محاذاة النص ولا المحاذاة الرأسية على عناصر الكتلة.

المشاكل المحتملة مع الكتل المحاذاة

في بعض الأحيان ، قد تتسبب محاذاة div مع المركز بطريقة CSS في حدوث مشكلات بسيطة. على سبيل المثال ، عند استخدام float: لنفترض أن هناك ثلاث كتل: أولاً ، وثانيًا ، وثالثًا. الكتل الثانية والثالثة في الأول. يتم محاذاة العنصر الذي يحتوي على الفئة الثانية إلى اليسار ، وتكون الكتلة الأخيرة بمحاذاة جهة اليمين. بعد المحاذاة ، سقط كلاهما من التيار. إذا لم يكن للعنصر الأصل ارتفاع محدد (على سبيل المثال ، 30em) ، فسيتوقف عن التمدد على طول ارتفاع الكتل الفرعية. لتجنب هذا الخطأ ، استخدم "فاصل" - كتلة خاصة ترى ثاني وثالث. كود CSS:

  • .second (عائم: يسار)
  • . ثالثًا (عائم: يمين)
  • .clearfix (الارتفاع: 0 ؛ مسح: كلاهما ؛)

غالبًا ما يتم استخدام فئة: after pseudo-class ، والتي تتيح لك أيضًا إعادة الكتل إلى مكانها عن طريق إنشاء تخطيط زائف (في المثال ، يوجد div مع فئة حاوية داخل. أولاً ويحتوي على .left و. right):

  • .left (تعويم: يسار)
  • .right (عائم: يمين)
  • .container: after (content: ""؛ display: table؛ clear: both؛)

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

مشكلة أخرى غالبًا ما يواجهها مصممو التخطيط هي محاذاة العناصر المضمنة. تتم إضافة مسافة تلقائيًا بعد كل منهم. تساعد خاصية الهامش في التعامل مع هذا ، والذي تم تعيينه على هامش سلبي. هناك طرق أخرى يتم استخدامها كثيرًا: على سبيل المثال ، التصفير في هذه الحالة ، حجم الخط: 0 مكتوب في خصائص العنصر الأصلي. إذا كان هناك نص داخل الكتل ، فسيتم إرجاع حجم الخط المطلوب بالفعل في خصائص عناصر الكتل المضمنة. على سبيل المثال حجم الخط: 1em. هذه الطريقة ليست مناسبة دائمًا ، لذلك ، غالبًا ما يتم استخدام الخيار ذي المسافات البادئة الخارجية.

تتيح لك محاذاة الكتل إنشاء صفحات جميلة وعملية: هذا هو تخطيط التخطيط العام ، وموقع البضائع في المتاجر عبر الإنترنت ، والصور على موقع بطاقة العمل.

  • CSS ،
  • لغة البرمجة
  • أعتقد أن العديد منكم ممن قاموا بالتخطيط قد عبروا عن الحاجة إلى محاذاة العناصر عموديًا ومعرفة الصعوبات التي تنشأ عند محاذاة عنصر إلى المركز.

    نعم ، بالنسبة للمحاذاة الرأسية ، تحتوي CSS على خاصية محاذاة رأسية خاصة بقيم متعددة. في الممارسة العملية ، ومع ذلك ، فإنه لا يعمل على الإطلاق كما هو متوقع. دعنا نحاول معرفة ذلك.


    دعنا نقارن الأساليب التالية. يصطف مع:

    • الجداول،
    • المسافات البادئة ،
    • ارتفاع خط،
    • تمتد
    • هامش سلبي ،
    • تحول،
    • عنصر زائف
    • فليكس بوكس.
    كتوضيح ، ضع في اعتبارك المثال التالي.

    يوجد قسمان من عناصر div ، أحدهما متداخل في الآخر. دعونا نعطيهم الفصول المقابلة - الخارجي والداخلي.


    التحدي هو محاذاة العنصر الداخلي لمركز العنصر الخارجي.

    بادئ ذي بدء ، ضع في اعتبارك الحالة عند أبعاد الوحدتين الخارجية والداخلية معروف... دعنا نضيف عرض: كتلة مضمنة إلى العنصر الداخلي ، ومحاذاة النص: محاذاة مركزية وعمودية: من المنتصف إلى الخارجي.

    أتذكر أن المحاذاة تنطبق فقط على العناصر التي تحتوي على وضع عرض مضمّن أو مضمن.

    دعونا نعطي أحجام المربعات وألوان الخلفية لرؤية حدودها.

    خارجي (العرض: 200 بكسل ؛ الارتفاع: 200 بكسل ؛ محاذاة النص: المركز ؛ المحاذاة الرأسية: الوسط ؛ لون الخلفية: #ffc ؛) الداخل (العرض: كتلة مضمنة ؛ العرض: 100 بكسل ؛ الارتفاع: 100 بكسل ؛ لون الخلفية : #fcc؛)
    بعد تطبيق الأنماط ، سنرى أن الكتلة الداخلية تتم محاذاتها أفقيًا وليس عموديًا:
    http://jsfiddle.net/c1bgfffq/

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

    هناك عدة تقنيات لحل هذه المشكلة. أدناه سوف نلقي نظرة فاحصة على كل منهم.

    محاذاة مع الجدول

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


    http://jsfiddle.net/c1bgfffq/1/

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

    يمكن إزالة أول ناقص جزئيًا عن طريق استبدال علامات الجدول و td بـ div وتعيين وضع عرض الجدول في CSS.


    . router-wrapper (display: table؛) .outer (display: table-cell؛)
    ومع ذلك ، فإن الكتلة الخارجية ستظل طاولة مع كل النتائج المترتبة على ذلك.

    محاذاة المسافات البادئة

    إذا كانت ارتفاعات المربعات الداخلية والخارجية معروفة ، فيمكن ضبط المحاذاة باستخدام الحشو الرأسي للمربع الداخلي باستخدام الصيغة: (H خارجي - H داخلي) / 2.

    خارجي (ارتفاع: 200 بكسل ؛) داخلي (ارتفاع: 100 بكسل ؛ الهامش: 50 بكسل 0 ؛)
    http://jsfiddle.net/c1bgfffq/6/

    الجانب السلبي للحل هو أنه قابل للتطبيق فقط في عدد محدود من الحالات عندما تكون ارتفاعات كلتا الكتلتين معروفة.

    محاذاة ارتفاع الخط

    إذا كنت تعلم أن الكتلة الداخلية يجب ألا تشغل أكثر من سطر واحد من النص ، فيمكنك استخدام خاصية ارتفاع السطر وتعيينها مساوية لارتفاع الكتلة الخارجية. نظرًا لأن محتوى الكتلة الداخلية يجب ألا يلتف إلى السطر الثاني ، يوصى أيضًا بإضافة المسافة البيضاء: nowrap and overflow: hidden rules.

    خارجي (ارتفاع: 200 بكسل ؛ ارتفاع الخط: 200 بكسل ؛). داخلي (مسافة بيضاء: nowrap ؛ تجاوز: مخفي ؛)
    http://jsfiddle.net/c1bgfffq/12/

    يمكنك أيضًا استخدام هذه التقنية لمحاذاة نص متعدد الأسطر عن طريق إعادة تعريف قيمة ارتفاع السطر للكتلة الداخلية ، وإضافة display: inline-block and vertical-align: middle rules.

    خارجي (ارتفاع: 200 بكسل ؛ ارتفاع الخط: 200 بكسل ؛). داخلي (ارتفاع الخط: عادي ؛ عرض: كتلة مضمنة ؛ محاذاة رأسية: وسط ؛)
    http://jsfiddle.net/c1bgfffq/15/

    عيب هذه الطريقة هو أنه يجب معرفة ارتفاع الكتلة الخارجية.

    امتداد المحاذاة

    يمكن استخدام هذه الطريقة عندما يكون ارتفاع الوحدة الخارجية غير معروف ، ولكن ارتفاع الوحدة الداخلية معروف.

    لهذا تحتاج:

    1. ضبط الوضع النسبي للكتلة الخارجية ، والداخلي - مطلق ؛
    2. أضف القواعد أعلى: 0 وأسفل: 0 إلى الكتلة الداخلية ، ونتيجة لذلك تمتد إلى الارتفاع الكامل للكتلة الخارجية ؛
    3. اضبط على تلقائي للحشو الرأسي للكتلة الداخلية.
    .outer (position: النسبي ؛) .inner (الارتفاع: 100 بكسل ؛ الموضع: مطلق ؛ أعلى: 0 ؛ أسفل: 0 ؛ الهامش: تلقائي 0 ؛)
    http://jsfiddle.net/c1bgfffq/4/

    يتمثل جوهر هذه التقنية في أن تحديد ارتفاع صندوق ممتد وموضع تمامًا يفرض على المتصفح حساب الهوامش الرأسية بنسب متساوية عند التعيين على تلقائي.

    التوافق مع قمة الهامش السلبية

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

    تحتاج إلى تعيين الموضع النسبي للكتلة الخارجية ، والداخلي - مطلق. ثم تحتاج إلى دفع الصندوق الداخلي لأسفل بنصف ارتفاع الجزء العلوي من الصندوق الخارجي: 50٪ ورفعه لأعلى بمقدار نصف ارتفاع الهامش العلوي الخاص به: -H الجزء الداخلي / 2.

    خارجي (موضع: نسبي ؛). داخلي (ارتفاع: 100 بكسل ؛ الموضع: مطلق ؛ أعلى: 50٪ ؛ قمة الهامش: -50 بكسل ؛)
    http://jsfiddle.net/c1bgfffq/13/

    عيب هذه الطريقة هو أنه يجب معرفة ارتفاع الوحدة الداخلية.

    التوافق مع التحويل

    تشبه هذه الطريقة الطريقة السابقة ، ولكن يمكن تطبيقها عندما يكون ارتفاع الوحدة الداخلية غير معروف. في هذه الحالة ، بدلاً من تعيين مساحة بكسل سالبة ، يمكنك استخدام خاصية التحويل وتحريك الكتلة الداخلية لأعلى باستخدام وظيفة translateY وقيمة -50٪.

    خارجي (الموضع: نسبي ؛). داخلي (الموضع: مطلق ؛ أعلى: 50٪ ؛ تحويل: ترجمة Y (-50٪) ؛)
    http://jsfiddle.net/c1bgfffq/9/

    لماذا لا يمكن تحديد النسبة بالطريقة السابقة؟ نظرًا لأنه يتم حساب القيم المئوية لخاصية الهامش بالنسبة للعنصر الأصلي ، فإن القيمة 50٪ ستكون نصف ارتفاع الصندوق الخارجي ، وعلينا رفع الصندوق الداخلي بمقدار نصف ارتفاعه. خاصية التحويل مناسبة تمامًا لهذا الغرض.

    عيب هذه الطريقة هو أنه لا يمكن تطبيقها إذا كانت الكتلة الداخلية لها موضع مطلق.

    محاذاة مع Flexbox

    الطريقة الأكثر حداثة للمحاذاة الرأسية هي استخدام تخطيط الصندوق المرن (المعروف باسم Flexbox). تتيح لك هذه الوحدة التحكم بمرونة في مواضع العناصر على الصفحة ، ووضعها كما تريد تقريبًا. تعد محاذاة مركز Flexbox مهمة بسيطة للغاية.

    يجب ضبط الصندوق الخارجي على العرض: مرن ، ويجب ضبط الصندوق الداخلي على الهامش: تلقائي. وهذا كل شيء! جميل، أليس كذلك؟

    خارجي (عرض: مرن ؛ عرض: 200 بكسل ؛ ارتفاع: 200 بكسل ؛) داخلي (عرض: 100 بكسل ؛ هامش: تلقائي ؛)
    http://jsfiddle.net/c1bgfffq/14/

    عيب هذه الطريقة هو أن Flexbox مدعوم فقط من قبل المتصفحات الحديثة.

    أي طريقة تختار؟

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

    يواجه كل مصمم تخطيط باستمرار الحاجة إلى محاذاة المحتوى في كتلة: أفقيًا أو رأسيًا. هناك بعض المقالات الجيدة حول هذا الموضوع ، لكنها تقدم جميعًا العديد من الخيارات المثيرة للاهتمام ، ولكن القليل من الخيارات العملية ، ولهذا السبب يتعين عليك قضاء وقت إضافي في إبراز الشيء الرئيسي. قررت إرسال هذه المعلومات بالشكل الذي يناسبني حتى لا أستخدمها في google بعد الآن.

    محاذاة الكتل ذات الأبعاد المعروفة

    أسهل طريقة لاستخدام CSS هي محاذاة الكتل ذات الارتفاع المحدد مسبقًا (للمحاذاة الرأسية) أو العرض (للمحاذاة الأفقية).

    المحاذاة مع الحشو

    في بعض الأحيان لا يمكنك توسيط عنصر ، ولكن يمكنك إضافة حدود إليه باستخدام " حشوة".

    على سبيل المثال ، لديك صورة بحجم 200 × 200 بكسل وتريد توسيطها في كتلة بحجم 240 × 300. يمكننا تعيين ارتفاع وعرض الصندوق الخارجي = 200 بكسل ، وإضافة 20 بكسل في الأعلى والأسفل ، و 50 لكل من اليمين واليسار .

    .example-wrapper1 (الخلفية: # 535E73 ؛ العرض: 200 بكسل ؛ الارتفاع: 200 بكسل ؛ المساحة المتروكة: 20 بكسل 50 بكسل ؛)

    محاذاة المربعات الموضوعة تمامًا

    إذا تم تعيين الكتلة على " الموقف: مطلق"، ثم يمكن وضعه بالنسبة إلى أقرب الأبوين باستخدام" position: النسبي ". للقيام بذلك ، تحتاج جميع الخصائص (" أعلى","الصحيح","الأسفل","اليسار") قم بتعيين نفس القيمة للوحدة الداخلية ، بالإضافة إلى" margin: auto ".

    * هناك فارق بسيط: يجب ألا يتجاوز عرض (ارتفاع) الكتلة الداخلية + قيمة اليسار (يمين ، أسفل ، أعلى) حجم الكتلة الأصلية. من الآمن تعيين الخصائص اليسرى (اليمنى ، السفلية ، العلوية) على 0 (صفر).

    .example-wrapper2 (الموضع: نسبي ؛ الارتفاع: 250 بكسل ؛ الخلفية: url (space.jpg) ؛) .cat-king (العرض: 200 بكسل ؛ الارتفاع: 200 بكسل ؛ الموضع: مطلق ؛ أعلى: 0 ؛ يسار: 0 ؛ أسفل: 0؛ يمين: 0؛ هامش: تلقائي؛ خلفية: url (king.png)؛)

    محاذاة أفقية

    محاذاة مع "محاذاة النص: الوسط"

    هناك خاصية خاصة لمحاذاة النص في كتلة " محاذاة النص". عند تعيين القيمة" المركز"سيتم محاذاة كل سطر من النص أفقيًا. بالنسبة للنص متعدد الأسطر ، نادرًا ما يتم استخدام هذا الحل ، وغالبًا ما يمكن العثور على هذا الخيار لمحاذاة الامتدادات أو الروابط أو الصور.

    بمجرد أن أضع نصًا لإظهار كيفية عمل محاذاة النص مع CSS ، لكن لم يخطر ببالي شيء مثير للاهتمام. في البداية قررت نسخ أغنية حضانة في مكان ما ، لكنني تذكرت أن هذا قد يفسد تفرد المقالة ، ولن يتمكن قرائنا الأعزاء من العثور عليها على Google. ثم قررت كتابة هذه الفقرة هنا - بعد كل شيء ، النقطة ليست معها ، لكن النقطة في محاذاة.

    .example-text (text-align: center ؛ padding: 10px ؛ background: # FF90B8 ؛)

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

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

    .example-wrapper3 (text-align: center؛ background: # FF90B8؛) .inline-text (display: inline-block؛ width: 40٪؛ padding: 10px؛ text-align: left؛ background: # FFEfee؛)

    محاذاة المربعات مع الهوامش

    تتم محاذاة عناصر الكتلة ذات العرض المعروف أفقيًا بسهولة إذا تم ضبطها على "margin-left: auto ؛ margin-right: auto". عادة ما يتم استخدام الترميز المختصر: " الهامش: 0 تلقائي"(يمكن استخدام أي قيمة بدلاً من الصفر). لكن هذه الطريقة لن تعمل مع المحاذاة الرأسية.

    .lama-wrapper (الارتفاع: 200 بكسل ؛ الخلفية: # F1BF88 ؛) .lama1 (الارتفاع: 200 بكسل ؛ العرض: 200 بكسل ؛ الخلفية: url (lama.jpg) ؛ الهامش: 0 تلقائي ؛)

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

    انحياز عمودي

    هناك الكثير من المشكلات المتعلقة بالمحاذاة الرأسية - على ما يبدو ، لم يتم توفير ذلك في CSS. هناك عدة طرق لتحقيق النتيجة المرجوة ، لكنها كلها ليست جميلة جدًا.

    المحاذاة مع خاصية خط الطول

    في حالة وجود سطر واحد فقط في الكتلة ، يمكنك تحقيق محاذاة رأسية من خلال تطبيق " ارتفاع خط"وضبطه على الارتفاع المطلوب. لكي تكون آمنًا ، يجب عليك أيضًا تعيين" الارتفاع "، الذي ستكون قيمته مساوية لقيمة" ارتفاع الخط "، لأن الأخير غير مدعوم في جميع المتصفحات.

    .example-wrapper4 (ارتفاع السطر: 100 بكسل ؛ اللون: # DC09C0 ؛ الخلفية: # E5DAE1 ؛ الارتفاع: 100 بكسل ؛ محاذاة النص: المركز ؛)

    من الممكن أيضًا تحقيق محاذاة الكتلة مع خطوط متعددة. للقيام بذلك ، سيتعين عليك استخدام كتلة غلاف إضافية ، وضبط ارتفاع الخط عليها. يمكن أن تكون الكتلة الداخلية متعددة الخطوط ، ولكن "مضمنة" مطلوبة. تحتاج إلى تطبيق "محاذاة عمودية: وسط" عليها.

    .example-wrapper5 (ارتفاع السطر: 160 بكسل ؛ الارتفاع: 160 بكسل ؛ حجم الخط: 0 ؛ الخلفية: # FF9B00 ؛) .example-wrapper5 .text1 (display: inline-block؛ font-size: 14px؛ line-height: 1.5 ؛ محاذاة رأسية: وسط ؛ الخلفية: # FFFAF2 ؛ اللون: # FF9B00 ؛ محاذاة النص: المركز ؛)

    يجب أن تحتوي كتلة الغلاف على "حجم الخط: 0". إذا لم تقم بتعيين حجم الخط على صفر ، فسيضيف المتصفح بضع وحدات بكسل إضافية من نفسه. سيتعين عليك أيضًا تحديد حجم الخط وارتفاع الخط للكتلة الداخلية ، لأن هذه الخصائص موروثة من الأصل.

    المحاذاة الرأسية في الجداول

    ملكية " محاذاة عمودية"يؤثر أيضًا على خلايا الجدول. مع مجموعة القيمة" الأوسط "، يتم توسيط المحتوى داخل الخلية. بالطبع ، يعتبر تخطيط الجدول قديمًا هذه الأيام ، ولكن في حالات استثنائية يمكنك محاكاته عن طريق تحديد" العرض: خلية الجدول".

    عادةً ما أستخدم هذا الخيار للمحاذاة الرأسية. فيما يلي مثال على التخطيط المأخوذ من مشروع جاهز. الاهتمام هو الصورة التي تتمحور عموديًا بهذه الطريقة.

    .one_product .img_wrapper (display: table-cell؛ height: 169px؛ vertical-align: middle؛ overflow: hidden؛ background: #fff؛ width: 255px؛) .one_product img (max-height: 169px؛ max-width: 100 ٪؛ min-width: 140px؛ display: block؛ margin: 0 auto؛)

    يجب أن نتذكر أنه إذا كان العنصر يحتوي على "عائم" بخلاف "لا شيء" ، فسيكون على أي حال كتلة (عرض: كتلة) - ثم سيتعين عليك استخدام كتلة غلاف إضافية.

    المحاذاة مع عنصر مضمن إضافي

    وبالنسبة للعناصر المضمنة ، يمكنك تطبيقها " محاذاة عمودية: وسط". في هذه الحالة ، جميع العناصر ذات" عرض: مضمنة"الموجودة على نفس الخط ستتماشى مع خط الوسط المشترك.

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

    .example-wrapper6 (height: 300px؛ text-align: center؛ background: # 70DAF1؛) .pudge (display: inline-block؛ vertical-align: middle؛ background: url (pudge.png)؛ background-color: # fff ؛ العرض: 200 بكسل ؛ الارتفاع: 200 بكسل ؛) .riki (العرض: كتلة مضمنة ؛ الارتفاع: 100٪ ؛ المحاذاة الرأسية: الوسط ؛)

    العرض: ثني ومحاذاة

    إذا كنت لا تهتم كثيرًا بمستخدمي Explorer 8 ، أو تهتم كثيرًا لدرجة أنك على استعداد لإدخال بعض جافا سكريبت إضافي من أجلهم ، فيمكنك استخدام "display: flex". تقوم المربعات المرنة بعمل رائع في التعامل مع مشكلات المحاذاة ، وكل ما عليك هو كتابة "margin: auto" لتوسيط المحتوى بالداخل.

    حتى الآن ، لم تصادفني هذه الطريقة عمليًا ، لكن لا توجد قيود خاصة عليها.

    .example-wrapper7 (display: flex؛ height: 300px؛ background: # AEB96A؛) .example-wrapper7 img (margin: auto؛)

    حسنًا ، هذا كل ما أردت كتابته عن محاذاة CSS. الآن لن يكون تركيز المحتوى مشكلة!

    هناك عدة طرق مختلفة جوهريًا لتوسيط كائن ما عموديًا باستخدام CSS ، ولكن قد يكون من الصعب اختيار الطريقة الصحيحة. سننظر في بعضها ، وننشئ أيضًا موقعًا صغيرًا باستخدام المعرفة المكتسبة.

    ليس من السهل تحقيق المحاذاة الرأسية للمركز باستخدام CSS. توجد طرق عديدة ، ولا تعمل جميعها في جميع المتصفحات. دعنا نلقي نظرة على 5 طرق مختلفة وإيجابيات وسلبيات كل منها. مثال.

    الطريقة الأولى

    تفترض هذه الطريقة أننا نضع بعض العناصر

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

    بعض المعلومات المفيدة التي يجب أن تتمحور.
    # غلاف (عرض: جدول ؛) #cell (عرض: خلية جدول ؛ محاذاة عمودية: وسط ؛)

    الايجابيات

    • يمكن أن يغير المحتوى الارتفاع ديناميكيًا (الارتفاع غير محدد في CSS).
    • لا يتم اقتصاص المحتوى إذا لم تكن هناك مساحة كافية له.

    سلبيات

    • لا يعمل في IE 7 أو أقل
    • العديد من العلامات المتداخلة

    الطريقة الثانية

    تستخدم هذه الطريقة الموضع المطلق لـ div ، والذي يضبط قمته على 50٪ والهامش العلوي مطروحًا منه نصف ارتفاع المحتوى. هذا يعني أن الكائن يجب أن يكون له ارتفاع ثابت ، والذي يتم تحديده في أنماط CSS.

    نظرًا لأن الارتفاع ثابت ، يمكنك ضبط الفائض: auto ؛ بالنسبة إلى div الذي يحتوي على المحتوى ، فإذا لم يكن المحتوى مناسبًا ، فستظهر أشرطة التمرير.

    المحتوى هنا
    #content (الموضع: مطلق ؛ أعلى: 50٪ ؛ الارتفاع: 240 بكسل ؛ الهامش العلوي: -120 بكسل ؛ / * ناقص نصف الارتفاع * /)

    الايجابيات

    • يعمل في جميع المتصفحات.
    • لا داعي للتعشيش.

    سلبيات

    • عندما لا توجد مساحة كافية ، يختفي المحتوى (على سبيل المثال ، يكون div داخل الجسم ، وقد قام المستخدم بتقليص النوافذ ، وفي هذه الحالة لن تظهر أشرطة التمرير.

    الطريقة الثالثة

    في هذه الطريقة ، سنقوم بلف محتوى div مع div آخر. دعنا نضبط ارتفاعه على 50٪ (الارتفاع: 50٪ ؛) ، والهامش السفلي إلى نصف الارتفاع (الهامش السفلي: -محتوى الارتفاع ؛). المحتوى سوف يمسح العائمة ويتم توسيطها.

    ها هو المحتوى
    #floater (float: left؛ height: 50٪؛ margin-bottom: -120px؛) #content (clear: both؛ height: 240px؛ position: النسبي ؛)

    الايجابيات

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

    سلبيات

    • أعتقد أن شيئًا واحدًا فقط: استخدام عنصر فارغ إضافي.

    الطريقة الرابعة.

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

    معلومات مهمة.
    # المحتوى (الموضع: مطلق ؛ أعلى: 0 ؛ أسفل: 0 ؛ يسار: 0 ؛ يمين: 0 ؛ هامش: تلقائي ؛ ارتفاع: 240 بكسل ؛ العرض: 70٪ ؛)

    الايجابيات

    • بسيط جدا.

    سلبيات

    • لا يعمل في Internet Explorer
    • سيتم قص المحتوى بدون أشرطة تمرير إذا لم تكن هناك مساحة كافية في الحاوية.

    الطريقة الخامسة

    يمكنك استخدام هذه الطريقة لمحاذاة سطر واحد من النص في المنتصف. قمنا فقط بتعيين ارتفاع النص (ارتفاع السطر) مساويًا لارتفاع العنصر (ارتفاع). بعد ذلك ، سيتم عرض الخط في المنتصف.

    بعض سطور النص
    # المحتوى (الارتفاع: 100 بكسل ؛ ارتفاع الخط: 100 بكسل ؛)

    الايجابيات

    • يعمل في جميع المتصفحات.
    • لا يقطع النص إذا لم يكن مناسبًا.

    سلبيات

    • يعمل فقط مع النص (لا يعمل مع عناصر الكتلة).
    • إذا كان هناك أكثر من سطر من النص ، فإنه يبدو سيئًا للغاية.

    هذه التقنية مفيدة جدًا للعناصر الصغيرة ، مثل توسيط النص في زر أو مربع نص.

    الآن بعد أن عرفت كيفية تحقيق محاذاة مركزية رأسية ، فلنقم بإنشاء موقع ويب بسيط يشبه هذا في النهاية:

    الخطوة 1

    من الجيد دائمًا البدء بالترميز الدلالي. سيتم تنظيم صفحتنا على النحو التالي:

    • #floater (لتوسيط محاذاة المحتوى)
    • #centred (عنصر المركز)
      • #الجانب
        • #شعار
        • #nav (قائمة
        • #المحتوى
      • #bottom (لحقوق النشر والأشياء)

      دعنا نكتب ترميز html التالي:

      شركة متمركزة

      عنوان الصفحة

      إعادة هندسة الاستعانة بمصادر خارجية ذات قيمة مضافة بشكل شامل بعد التعاون المرتكز على العملية ومشاركة الأفكار. تبسيط الأسواق المتخصصة المؤثرة بقوة من خلال الضرورات الممكنة. تسود الابتكارات المتميزة بشكل شامل بعد سيناريوهات مقنعة. إعادة مواءمة المعايير العالية في رأس المال البشري بسلاسة من خلال المنتجات المصنعة الرائدة. قم بتجميع المخططات المتوافقة مع المعايير بشكل مميز قبل الدوامات القوية. استعد بشكل فريد استعداد الويب للاستفادة من المعلومات الجاهزة.

      العنوان 2

      تبني جاهزية الويب المخصصة بكفاءة بدلاً من العمليات الموجهة للعملاء. تنمو بحزم متطلبات عبر الأنظمة الأساسية مقابل التقنيات الاستباقية. تمكين الخدمات الوصفية متعددة التخصصات بسهولة دون واجهات على مستوى المؤسسة. قم بتبسيط مجالات الموضوعات الاستراتيجية التنافسية بشكل ملائم مع الأسواق الإلكترونية المركزة. نقابة مجتمعات Phosfluorescently على مستوى عالمي مقابل أسواق القيمة المضافة. إعادة ابتكار خدمات شاملة بشكل مناسب قبل تقديم خدمات إلكترونية قوية.

      يظهر إشعار حقوق النشر هنا



      الخطوة 2

      سنكتب الآن أبسط CSS لوضع العناصر على الصفحة. يجب عليك حفظ هذا الرمز في ملف style.css الخاص بك. له أن الرابط مسجل في ملف html.

      Html، body (margin: 0؛ padding: 0؛ height: 100٪؛) body (background: url ("page_bg.jpg") 50٪ 50٪ no-تكرار # FC3؛ font-family: Georgia، Times، serifs؛ ) #floater (position: النسبي ؛ float: left ؛ height: 50٪ ؛ margin-bottom: -200px ؛ width: 1px ؛) #centered (position: النسبي ؛ clear: left ؛ height: 400px ؛ width: 80٪ ؛ max -width: 800px؛ min-width: 400px؛ margin: 0 auto؛ background: #fff؛ border: 4px مطلق ؛ يسار: 0 ؛ أعلى: 0 ؛ أسفل: 0 ؛ يمين: 70٪ ؛ مساحة: 20 بكسل ؛ الهامش: 10 بكسل ؛) # المحتوى (الموضع: مطلق ؛ يسار: 30٪ ؛ يمين: 0 ؛ أعلى: 0 ؛ أسفل: 0 ؛ تجاوز: تلقائي ؛ ارتفاع: 340 بكسل ؛ الحشو: 20 بكسل ؛ الهامش: 10 بكسل ؛)

      قبل أن نتمكن من جعل المحتوى الخاص بنا مركزًا ، نحتاج إلى ضبط ارتفاع النص و html على 100٪. نظرًا لأنه يتم حساب الارتفاع بدون هوامش داخلية وخارجية (المساحة المتروكة والهامش) ، قمنا بتعيينها (الهوامش) على 0 بحيث لا توجد أشرطة تمرير.

      الحشوة السفلية للعنصر "العائم" -a تساوي ناقص نصف ارتفاع المحتوى (400 بكسل) ، أي -200 بكسل ؛

      يجب أن تبدو صفحتك الآن كما يلي:

      عرض العنصر #centered 80٪. هذا يجعل موقعنا بالفعل على شاشات صغيرة وأوسع على الشاشات الكبيرة. تبدو معظم المواقع فاحشة على الشاشات العريضة الجديدة في الزاوية اليسرى العليا. تعمل خصائص min-width و max-width أيضًا على تقييد صفحتنا بحيث لا تبدو واسعة جدًا أو ضيقة جدًا. لا يدعم Internet Explorer هذه الخصائص. تحتاج إلى تحديد عرض ثابت لذلك.

      نظرًا لأن العنصر #centered مضبوطًا على الموضع: نسبي ، يمكننا استخدام الوضع المطلق للعناصر بداخله. ثم قم بتعيين الفائض: تلقائي ؛ للعنصر #content ، بحيث تظهر أشرطة التمرير في حالة عدم احتواء المحتوى.

      الخطوه 3

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

      #nav ul (list-style: none؛ padding: 0؛ margin: 20px 0 0 0؛ text-indent: 0؛) #nav li (padding: 0؛ margin: 3px؛) #nav li a (display: block؛ لون الخلفية: # e8e8e8 ؛ الحشو: 7 بكسل ؛ الهامش: 0 ؛ زخرفة النص: لا شيء ؛ اللون: # 000 ؛ الحد السفلي: 1 بكسل صلب #bbb ؛ محاذاة النص: يمين ؛) #nav li a :: after ( content: "" "؛ color: #aaa؛ font-weight: bold؛ display: inline؛ float: right؛ margin: 0 2px 0 5px؛) #nav li a: hover، #nav li a: focus (background: # f8f8f8؛ border-bottom-color: # 777؛) #nav li a: hover :: after (margin: 0 0 0 7px؛ color: # f93؛) #nav li a: active (padding: 8px 7px 6px 7px؛)

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

      لاحظ أننا بعد ذلك وجهنا الروابط ليتم عرضها كعناصر حظر. الآن ، عند عرضها ، فإنها تمتد عبر كامل عرض العنصر الذي توجد فيه.

      شيء آخر مثير للاهتمام استخدمناه في القائمة هو: قبل و: بعد الفصول الزائفة. أنها تسمح لك بإضافة أي شيء قبل وبعد عنصر. هذه طريقة جيدة لإضافة أيقونات أو رموز مثل سهم في نهاية كل رابط. هذه الحيلة لا تعمل في Internet Explorer 7 وما بعده.

      الخطوة 4

      أخيرًا وليس آخرًا ، سنضيف بعض التحولات إلى تصميمنا لمزيد من الجمال.

      #centered (-webkit-border-radius: 8px؛ -moz-border-radius: 8px؛ border-radius: 8px؛) h1، h2، h3، h4، h5، h6 (font-family: Helvetica، Arial، sans- serif؛ font-weight: normal؛ color: # 666؛) h1 (color: # f93؛ border-bottom: 1px solid #ddd؛ letter-spacing: -0.05em؛ font-weight: bold؛ margin-top: 0؛ padding-top: 0؛) #bottom (padding: 10px؛ font-size: 0.7em؛ color: # f03؛) #logo (font-size: 2em؛ text-align: center؛ color: # 999؛) #logo strong (font-weight: normal؛) #logo span (display: block؛ font-size: 4em؛ line-height: 0.7em؛ color: # 666؛) p، h2، h3 (line-height: 1.6em؛) أ (اللون: # f03 ؛)

      في هذه الأنماط ، قمنا بتعيين الزوايا الدائرية للعنصر #centered. في CSS3 ، ستكون هذه مسؤولية خاصية border-radius. لم يتم تنفيذ ذلك من قبل بعض المتصفحات حتى الآن ، إلا إذا كنت تستخدم البادئات -moz و -webkit لموزيلا فايرفوكس و Safari / Webkit.

      التوافق

      كما خمنت على الأرجح ، فإن المصدر الرئيسي لمشاكل التوافق هو Internet Explorer:

      • يجب ضبط عنصر #floater على عرضه.
      • يحتوي IE 6 على حشوة إضافية حول القوائم

      237152 المشاهدات

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

      ولكن يطرح سؤال معقول ، هل من الممكن الاستغناء عن جدول ، دون زيادة تحميل ترميز الصفحة بعلامات غير ضرورية؟ الإجابة هي "يمكنك" ، ولكن نظرًا لضعف دعم CSS بواسطة مستعرض MSIE ، سيختلف حل المشكلة عن حل المتصفحات الشائعة الأخرى.

      ضع في اعتبارك المقتطف التالي كمثال:



      بعض النصوص

      وحاول محاذاة النص عموديًا مع مركز الكتلة والحافة السفلية للكتلة.

      حل المشكلة

      المتصفحات "الصحيحة" (بما في ذلك MSIE

      تدعم معظم المتصفحات الحديثة CSS2.1 ، وهي قيمة خلية الجدول لخاصية العرض. يمنحنا هذا القدرة على جعل الكتلة مع النص تظهر كخلية جدول ، والاستفادة من ذلك ، محاذاة النص عموديًا:

      div (
      عرض: خلية الجدول.
      محاذاة عمودية: وسط ؛
      }

      div (
      عرض: خلية الجدول.
      محاذاة عمودية: أسفل ؛
      }

      Internet Explorer (حتى الإصدار السابع شاملًا)

      لحل مشكلة محاذاة النص مع الحافة السفلية للكتلة في MSIE ، يمكنك استخدام تحديد الموضع المطلق (نحتاج هنا إلى عنصر مضمّن متداخل في كتلة):

      div (
      الموقف: نسبي ؛
      }
      سبان div (
      العرض محجوب؛
      الموقف: مطلق.
      أسفل: 0٪؛
      اليسار: 0٪؛
      العرض: 100٪؛
      }

      تعمل مجموعة القواعد هذه أيضًا في المتصفحات "الصحيحة".

      حدد الخصائص

      سبان (
      العرض محجوب؛
      العرض: 100٪؛
      }

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

      من أجل المحاذاة الرأسية للنص في وسط الكتلة ، سيظل الجزء الأصلي معقدًا - سنقدم عنصرًا مضمّنًا آخر:

      المواد الدراسية:

      • التمركز الرأسي في CSS (www.jakpsatweb.cz/css/css-vertical-center-solution.html)
      • التمركز الرأسي باستخدام CSS (www.student.oulu.fi/٪7Elaurirai/www/css/middle/)
      • محاذاة عمودية (www.cssplay.co.uk/ie/valign.html)
      • محاذاة رأسية: الوسط (cssing.org.ua/2005/07/14/vertical-align-middle/)
      • طريقة أخرى للمحاذاة الرأسية في CSS (cssing.org.ua/2007/04/26/another-css-valign-method)