التخطّي إلى المحتوى
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
البدءWebReactSwiftUIJetpack ComposeFlutterReact Nativeالإعدادات الجاهزةنظام التصميم الخاص بكاستخدام Tanrei مع وكلاء الذكاء الاصطناعيالعلامة التجاريةرموز التصميمأنظمة التصميم والتخصيصTheme Studioاللونالطباعةالأيقوناتالشكلالارتفاعالحركةحالات التفاعلالسلوكالتخطيطإمكانية الوصولالكلماترموز الألوانرموز السلّم الطباعيرموز الشكلرموز الارتفاعرموز الحركةرموز الحالةرموز التباعد والقياسالمكوّناتالزرزر الإجراء الرئيسيالزر المقسَّممجموعة الأزرارزر مع قائمةشريط الأدواتزر النسخخانة الاختيارزر الاختيارمفتاح التبديلالرقاقةقائمة الخياراتشريط التمريرحقل شريط التمريرالتقويمDateTimePickerمجموعة الحقولمجموعة أزرار الاختيارمجموعة خانات الاختيارعنصر الاختيارحقل الاختيارشريط القوائمرفع الملفاتمنتقي الملفات متقدّمساحة الإفلاتحقل إدخال النص متقدّمحقل النصحقل الرقاقاتالحقلمربع التحرير والسرد متقدّمحقل التحرير والسردحقل إدخال العدد متقدّمحقل العددحقل إدخال اللون متقدّمحقل اللونحقل إدخال الرمز لمرة واحدة متقدّمحقل الرمز لمرة واحدةحقل إدخال النص المدمج متقدّممربع كتابة الرسائلالبطاقةالفاصلالطبقة النمطية متقدّممربع الحوارالقائمة (list)صف القائمةاللوحة السفليةاللوحة الجانبيةالعرض الدوّاركتلة الشيفرةالجدولاللوحة المنبثقةالخطواتالأكورديونقائمة الوصفالشكل التوضيحيهيكل التطبيقرأس الصفحةالعرض الشجريالخط الزمنيمعاينة الصورمقبض تغيير الحجمالإطار القابل لتغيير الحجممنطقة التمريرالشارةمؤشر التقدمالعدّادعارض الأرقام المتحرّكمؤشر التحميلشريط الإشعار (Snackbar)التلميحاختصار لوحة المفاتيحالوسمالشيفرة المضمَّنةالتنويهالصورة الرمزيةالحالة الفارغةمجموعة الوسومهيكل التحميلعنصر الملفمربع اللونالنص المتحركعلامات التبويبعرض التبويباتشريط التطبيقشريط التنقلدرج التنقلالبحثالرابطالتنقل بين الصفحاتروابط السابق والتاليمؤشر الخطواتمسار التنقلجدول المحتوياتبطاقة الرابطقائمة FABالحالةكيف يُبنى Tanreiالمساهمةالترخيص والإسناد
الرئيسيةالمكوّناتالفاصل

الفاصل

يفصل بخط رفيع بين مجموعات المحتوى في قائمة أو تخطيط أو شريط أدوات.

content_copyعرض بتنسيق Markdown
الفئة
الاحتواء
الرموز
comp.divider
المستوى
أساسي

نظرة عامة

Web
tanrei-divider
schedule
SwiftUI
TanreiDivider
schedule
Jetpack Compose
TanreiDivider
schedule
Flutter
TanreiDivider
schedule
React Native
Divider
schedule

مولَّد من docs/status/status.json, specs/divider.spec.json

في قائمة وفي شريط أدوات

الواردالأرشيفالمهملات
format_boldformat_italiclink

الاستخدام

تعرض عيّنتا Web و React المواصفة الحالية. أما SwiftUI و Compose و Flutter و React Native فمتأخرة: ما زالت تقدّم المراجعة السابقة من الفاصل، وهي ترسم خطوطًا متصلة فقط ولا تقبل أطوالًا ولا سماكة خاصة بفاصل واحد، وتعرض عيّناتها تلك المراجعة إلى أن تلحق بالبقية.

<tanrei-divider></tanrei-divider>
<tanrei-divider inset="start"></tanrei-divider>

<!-- محاذاة مع قائمة يبدأ نصها بعد 72 px. -->
<tanrei-divider inset="start" inset-length="72"></tanrei-divider>

<!-- خط قطع فوق قسيمة، وفاصل خفيف بين قسمين. -->
<tanrei-divider line-style="dashed" line-cap="round"></tanrei-divider>
<tanrei-divider line-style="wavy" amplitude="4" wavelength="24"></tanrei-divider>

<!-- خط أسمك لهذا الفاصل وحده: تحتفظ نقاطه وشرطاته وموجته بنسبها. -->
<tanrei-divider thickness="2"></tanrei-divider>
<tanrei-divider line-style="dotted" line-cap="round" thickness="4"></tanrei-divider>

<!-- لمجموعات شريط الأدوات معنى: اعرض الفاصل بدور separator. -->
<div role="toolbar" aria-label="التنسيق" style="display: flex">
  <tanrei-button variant="text" label="غامق"><span slot="icon">format_bold</span></tanrei-button>
  <tanrei-divider orientation="vertical" decorative="false"></tanrei-divider>
  <tanrei-button variant="text" label="إدراج رابط"><span slot="icon">link</span></tanrei-button>
</div>

<script type="module">
  import '@tanrei/web/components/divider';
</script>
import { Divider } from '@tanrei/react';

<Divider />
<Divider inset="start" insetLength={72} />
<Divider lineStyle="dashed" lineCap="round" />
<Divider lineStyle="wavy" amplitude={4} wavelength={24} />
<Divider lineStyle="dotted" lineCap="round" thickness={4} />
<Divider orientation="vertical" decorative={false} />
import Tanrei

VStack(spacing: 0) {
  inboxRow
  TanreiDivider(inset: .start)
  archiveRow
}

// المحور يُذكر صراحة، ولا يؤخذ من الحاوية المحيطة.
HStack { formattingButtons; TanreiDivider(axis: .vertical, isDecorative: false); insertLinkButton }
import androidx.compose.foundation.gestures.Orientation
import io.github.chnotchy.tanrei.components.TanreiDivider
import io.github.chnotchy.tanrei.components.TanreiDividerInset

Column {
    InboxRow()
    TanreiDivider(inset = TanreiDividerInset.Start)
    ArchiveRow()
}

// الفاصل العمودي يملأ ارتفاع الصف، فأعطِ الصف ارتفاعًا.
Row(Modifier.height(IntrinsicSize.Min)) {
    FormattingButtons()
    TanreiDivider(orientation = Orientation.Vertical, decorative = false)
    InsertLinkButton()
}
import 'package:tanrei/tanrei.dart';

Column(
  children: <Widget>[
    inboxRow,
    const TanreiDivider(inset: TanreiDividerInset.start),
    archiveRow,
  ],
);

// IntrinsicHeight يعطي الفاصل العمودي ارتفاع الصف.
IntrinsicHeight(
  child: Row(
    children: <Widget>[
      ...formattingButtons,
      const TanreiDivider(axis: Axis.vertical, excludeFromSemantics: false),
      insertLinkButton,
    ],
  ),
);
import { Divider, IconButton } from '@tanrei/react-native';

<Divider />
<Divider inset="start" />

<View style={{ flexDirection: 'row' }}>
  <IconButton accessibilityLabel="غامق" onPress={toggleBold}>format_bold</IconButton>
  <Divider orientation="vertical" decorative={false} />
  <IconButton accessibilityLabel="إدراج رابط" onPress={insertLink}>link</IconButton>
</View>

المواصفات

الاتجاهات والإزاحات

أنماط الخط

السماكة: سماكة خاصة بفاصل واحد، مع نهايات مستديرة على الأنماط الأسمك

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

أطوال النقاط والشرطات والموجة رموز (tokens) مشتقة من سماكة الخط، فنظام التصميم الذي يرسم فواصل أسمك يحصل على نمط أكبر بالمظهر نفسه. والخاصية thickness تفعل الشيء نفسه لفاصل واحد: تحلّ محل الرمز حيثما تُقرأ السماكة، وتحتفظ النقاط والشرطات والموجة بنسبها إليها. أما الإزاحة فلا يتغيّر مقاسها. والخصائص الخاصة بفاصل واحد (insetLength و thickness و dashLength و gap و amplitude و wavelength) تُستخدم كما أُعطيت، بوحدة المنصة، ولا يغيّر مقاسها أي قرص ضبط (dial). القيمة السالبة أو غير المنتهية، والقيمة 0 للخاصية thickness أو dashLength أو wavelength، تُستبدل بها قيمة الرمز ويُبلَّغ عنها في بنيات التنقيح (debug). والخاصية التي لا يرسمها النمط الحالي تُهمَل.

البنية

البنية

مرسوم فوق نموذج الاختبار horizontal كما ترسمه حزمة الويب.
الجزء الوصف
1 line The one line, horizontal or vertical: solid, dotted, dashed or wavy. Its thickness is the system's, or the one given for this divider. It is the whole component: there is no container, and no space around it.

الخصائص

الخاصية النوع القيمة الافتراضية الوصف
orientation horizontal | vertical "horizontal" Horizontal separates stacked content and spans the container's width; vertical separates content in a row and spans its height.
inset none | start | both "none" Shortens the line to align with content: none spans the full length, start leaves the inset at the start (to line up with an inset list's text), both leaves it at both ends (a middle divider).
insetLength number null The length of the inset for this divider, in the platform's unit (CSS px, pt, dp, logical pixels); null takes comp.divider.line.inset. Used only while inset is start or both: set it to line the divider up with content whose inset differs from the rest of the product's lists.
thickness number null How thick this divider's line is, in the platform's unit (CSS px, pt, dp, logical pixels); null takes comp.divider.line.thickness. Set it where one divider of a product carries more weight than the rest (the line under a page's header, a break between two sections of a long form); a product whose every divider is heavier changes the token in its layer instead.
lineStyle solid | dotted | dashed | wavy "solid" How the line is drawn: solid, a row of dots, a row of dashes, or a wave. Most dividers are solid; the others mark a different kind of boundary in the same product (a tear line, the edge of something provisional, a light section break).
lineCap butt | round "butt" How the line's ends, and every dot's and dash's ends, are drawn: butt ends square at the length, round ends in a half-disc inside it (round dots, rounded dashes). The difference shows only on a line thicker than a hairline.
dashLength number null The length of one dash of a dashed line, in the platform's unit; null takes comp.divider.line.dash.length. Ignored by the other styles.
gap number null The least space between two dots of a dotted line or two dashes of a dashed line, in the platform's unit; null takes comp.divider.line.dot.gap or comp.divider.line.dash.gap. Ignored by solid and wavy.
amplitude number null How far a wavy line's crests lie from its midline, in the platform's unit; null takes comp.divider.line.wave.amplitude. Ignored by the other styles.
wavelength number null The length of one wave of a wavy line, a crest and a trough, in the platform's unit; null takes comp.divider.line.wave.wavelength. Ignored by the other styles.
decorative boolean true Hides the divider from assistive technology. Set it to false only when the grouping is meaningful (a toolbar's or a menu's groups): the divider is then exposed as a separator.

الحالات

السلوك

متطلبات بصيغة EARS. يُختبر تنفيذ كل منصة مقابل هذه المعرّفات. يُعرض نص المتطلبات كما ورد في ملف المواصفة، بالإنجليزية.

المعرّف المتطلب
DIV-1 THE divider SHALL draw one line of comp.divider.line.thickness, or of thickness while that is not null (DIV-16), in comp.divider.line.color, in the style lineStyle names (DIV-9 to DIV-12), along the full inline size of its container when orientation is horizontal, and along the full block size of its container when orientation is vertical.
DIV-2 THE divider SHALL take exactly comp.divider.line.thickness on its cross axis, or, WHERE lineStyle is wavy, twice its amplitude (DIV-12) plus comp.divider.line.thickness, whatever its length; it SHALL add no margin or padding of its own, and the space on either side of the line belongs to the layout that places it.
DIV-3 WHERE inset is start THE divider SHALL shorten the line by insetLength, or by comp.divider.line.inset while insetLength is null, at its start (the inline-start of a horizontal divider, the top of a vertical one), and WHERE inset is both it SHALL shorten the line by that length at each end; the inset stretch SHALL draw nothing, the style of DIV-9 to DIV-12 SHALL be laid out over the stretch that remains, and where the insets leave no length the divider SHALL draw nothing.
DIV-4 WHERE the layout direction is right-to-left THE divider SHALL apply the start inset of a horizontal divider at its right end and SHALL start a horizontal wavy line at its right end, mirroring it; a vertical divider's inset and wave SHALL NOT change with the direction.
DIV-5 WHILE decorative is true THE divider SHALL be hidden from assistive technology and SHALL NOT be focusable.
DIV-6 WHILE decorative is false THE divider SHALL expose the separator role and its orientation to assistive technology, SHALL have no accessible name of its own, and SHALL NOT be focusable.
DIV-7 WHEN orientation, inset, lineStyle or lineCap names a value that the divider does not define THE divider SHALL render with the default value, and in debug builds report the unknown value.
DIV-8 THE divider SHALL draw its line at least one device pixel thick; WHERE lineStyle is solid, dotted or dashed it SHALL align the line's two edges across its axis to the device pixel grid, so that the line is never spread over two partial rows or columns of pixels, and WHERE lineStyle is wavy it SHALL draw the curve antialiased.
DIV-9 WHERE lineStyle is solid THE divider SHALL draw the line as one unbroken stroke over the whole drawn stretch.
DIV-10 WHERE lineStyle is dotted THE divider SHALL draw a row of dots, each comp.divider.line.thickness long and comp.divider.line.thickness across, separated by at least gap, or comp.divider.line.dot.gap while gap is null; it SHALL draw as many dots as fit the drawn stretch with that gap between them, the first at the stretch's start and the last at its end, and SHALL widen every gap by the same amount to make them meet those ends; WHERE only one dot fits it SHALL draw that dot at the stretch's center.
DIV-11 WHERE lineStyle is dashed THE divider SHALL draw a row of dashes, each dashLength long (comp.divider.line.dash.length while dashLength is null, and never shorter than comp.divider.line.thickness) and comp.divider.line.thickness across, separated by at least gap, or comp.divider.line.dash.gap while gap is null; it SHALL draw as many dashes as fit the drawn stretch with that gap between them, the first at the stretch's start and the last at its end, and SHALL widen every gap by the same amount to make them meet those ends; WHERE only one dash fits it SHALL draw one dash, no longer than the stretch, at the stretch's center.
DIV-12 WHERE lineStyle is wavy THE divider SHALL stroke a wave about the midline of its cross axis at comp.divider.line.thickness, made of circular arcs that each span half a wavelength and alternate from one side of the midline to the other, meeting on the midline without a corner; the wavelength is wavelength, or comp.divider.line.wave.wavelength while wavelength is null, stretched or shrunk so that a whole number of waves (at least one, the nearest number) fills the drawn stretch; each arc's crest SHALL lie amplitude, or comp.divider.line.wave.amplitude while amplitude is null, from the midline to the stroke's center, but never more than a quarter of the stretched wavelength (a half circle); the wave SHALL start and end on the midline, and its first arc SHALL rise toward the top of a horizontal divider and toward the left of a vertical one.
DIV-13 WHERE lineCap is round THE divider SHALL end the solid line, every dot, every dash and the wave in half-discs of diameter comp.divider.line.thickness that lie inside the lengths DIV-9 to DIV-12 give them, so that a dot is a disc and no rounded end reaches into an inset or past the container; the wave's rounded ends SHALL be drawn at its first and last points, laid out over the drawn stretch shortened by half comp.divider.line.thickness at each end. WHERE lineCap is butt every end SHALL be square and flush with those lengths.
DIV-14 WHEN thickness, insetLength, dashLength, gap, amplitude or wavelength is null THE divider SHALL use the token that prop names; IF one of them is not a finite number, or is negative, or thickness, dashLength or wavelength is 0, THE divider SHALL use that token instead and in debug builds report the value; a value it uses SHALL be used as given, in the platform's unit, and not scaled by any dial; a prop the current lineStyle does not draw SHALL be ignored and not reported.
DIV-15 THE divider SHALL take its layout direction from where it is used — the direction of the nearest ancestor that sets one, and the platform's own where none does — and SHALL have no direction setting of its own; WHEN that direction changes while the divider is shown THE divider SHALL draw itself for the new direction at once, without a motion of its own, keeping what it shows and its state.
DIV-16 WHILE thickness is not null THE divider SHALL use it wherever DIV-1, DIV-2 and DIV-10 to DIV-13 name comp.divider.line.thickness — the line's extent across its axis, the side of a dot, the width of a dash and its least length, the wave's stroke, the diameter of a round cap and the divider's own size across its axis — and SHALL scale each pattern length it takes from a token rather than from a prop (comp.divider.line.dot.gap, comp.divider.line.dash.length, comp.divider.line.dash.gap, comp.divider.line.wave.amplitude and comp.divider.line.wave.wavelength) by thickness divided by comp.divider.line.thickness, so that a thicker divider keeps the pattern's proportions, as a layer that thickens the line keeps them; a pattern length given by a prop SHALL be used as given. DIV-8 holds for it: a thickness below one device pixel is drawn one device pixel thick. The thickness changes nothing that assistive technology is told, and comp.divider.line.inset and insetLength are not scaled.

مطابقة الأسماء بين المنصات

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

المواصفة Web SwiftUI Jetpack Compose Flutter React Native
المكوّن tanrei-divider TanreiDivider TanreiDivider TanreiDivider Divider
orientation · الخاصية orientation axis orientation axis orientation
inset · الخاصية inset inset inset inset inset
insetLength · الخاصية insetLength insetLength insetLength insetLength insetLength
thickness · الخاصية thickness thickness thickness thickness thickness
lineStyle · الخاصية lineStyle lineStyle lineStyle lineStyle lineStyle
lineCap · الخاصية lineCap lineCap cap strokeCap lineCap
dashLength · الخاصية dashLength dashLength dashLength dashLength dashLength
gap · الخاصية gap gap gap gap gap
amplitude · الخاصية amplitude amplitude amplitude amplitude amplitude
wavelength · الخاصية wavelength wavelength wavelength wavelength wavelength
decorative · الخاصية decorative isDecorative decorative excludeFromSemantics decorative
ملاحظات Not an <hr>: an hr is horizontal only and always a separator. The host takes role="separator" and aria-orientation when decorative is false (set to false by decorative="false" or the property), and aria-hidden="true" otherwise. Attributes are line-style, line-cap, inset-length, dash-length, gap, amplitude and wavelength; the lengths are numbers of CSS px. A solid line stays a border (DIV-8). A dotted or dashed line is not border-style: dotted | dashed, whose dash lengths and spacing each engine chooses and which has no round cap: it is drawn from the tokens (for example a mask repeated with mask-repeat: space over a box one gap longer than the line, which places whole dashes at both ends and widens the gaps as DIV-10 and DIV-11 say). A wavy line cannot be a border at all: it is an SVG path of arcs in the shadow root, measured on resize (DIV-12). In forced-colors mode every style is drawn in the system's text color, as the border is. SwiftUI's own Divider takes its axis from the enclosing stack; TanreiDivider(axis: .horizontal) states it (default .horizontal) so a divider looks the same wherever it is placed and its snapshot is deterministic. isDecorative: false adds the separator semantics SwiftUI's Divider does not have. Ships the previous revision (solid only). Owes DIV-1 to DIV-4, DIV-7 and DIV-8 as revised, and DIV-9 to DIV-14: lineStyle, lineCap: CGLineCap (.butt, .round) and the lengths as CGFloat?, drawn as a Path stroked with StrokeStyle(lineWidth:lineCap:dash:) (arcs with addArc). One composable with orientation: Orientation (foundation's Orientation.Horizontal / .Vertical, as Modifier.scrollable takes it) instead of Material's two composables HorizontalDivider and VerticalDivider. Ships the previous revision (solid only). Owes DIV-1 to DIV-4, DIV-7 and DIV-8 as revised, and DIV-9 to DIV-14: lineStyle, cap: StrokeCap (StrokeCap.Butt, StrokeCap.Round, as Stroke names it) and the lengths as Dp?, drawn on a Canvas with PathEffect.dashPathEffect for dots and dashes and Path.arcTo for the wave. One widget with axis: Axis instead of Flutter's Divider and VerticalDivider. inset is an enum resolved from comp.divider.line.inset, not Flutter's indent / endIndent lengths; insetLength replaces that length for one divider at both ends it applies to. excludeFromSemantics (as Image and GestureDetector name it) has the same polarity as decorative and defaults to true. Ships the previous revision (solid only). Owes DIV-1 to DIV-4, DIV-7 and DIV-8 as revised, and DIV-9 to DIV-14: lineStyle, strokeCap: StrokeCap (StrokeCap.butt, StrokeCap.round, as Paint names it) and the lengths as double?, drawn by a CustomPainter; dart:ui has no dash effect, so each dot and dash is its own segment, and the wave is Path.arcToPoint. Decorative: accessible={false} and importantForAccessibility="no-hide-descendants". Not decorative: role="separator"; how far iOS and Android announce it (neither has a native separator trait) is for the package's README to state. Ships the previous revision (solid only). Owes DIV-1 to DIV-4, DIV-7 and DIV-8 as revised, and DIV-9 to DIV-14, drawn with views only (the package takes no SVG): not borderStyle: 'dotted' | 'dashed', whose spacing is the OS's and which has no length or cap; each dot and dash is a view (a round cap is its corner radius), and the wave is the package's Arc primitive, one arc per half wave, which is why DIV-12 builds the wave from circular arcs.

الرموز

الرمز يشير إلى القيمة المحلولة (فاتح)
--tanrei-comp-divider-line-color sys.color.outline-variant #000000 · 8%
--tanrei-comp-divider-line-dash-gap — 4px
--tanrei-comp-divider-line-dash-length — 4px
--tanrei-comp-divider-line-dot-gap — 2px
--tanrei-comp-divider-line-inset sys.space.space200 16px
--tanrei-comp-divider-line-thickness sys.border.hairline 1px
--tanrei-comp-divider-line-wave-amplitude — 2px
--tanrei-comp-divider-line-wave-wavelength — 16px

نماذج الاختبار

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

مولَّد من specs/divider.spec.json, tokens/comp/divider.tokens.json, design/tokens/

الإرشادات

متى يُستخدم

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

خط رفيع واحد

خط الفاصل هو الخط الرفيع في نظام التصميم: sys.color.outline-variant، بعرض الخط الرفيع. في النظام الافتراضي تأخذ الخطوط الرفيعة الأخرى التي يراها الشخص ذلك اللون نفسه: حافة الزر من الطراز (variant) outlined، وحدّ الرقاقة، والخط بين مجموعات قائمة الخيارات، وحافة شريط التنقل أو درج التنقل، والخط تحت صف القائمة (list). تحتفظ هذه برموزها الخاصة، ويعطيها النظام الافتراضي قيمة واحدة، ليكون في الشاشة نوع واحد من الخطوط. والفاصل الذي تضعه أنت لا يحتاج إلى لون خاص به ليطابقها.

حيث يفصل المكوّن بين أجزائه

بعض المكوّنات تفصل بين أجزائها بنفسها، وهناك لا تضف فاصلًا:

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

أما مكوّن الفاصل نفسه فليس جزءًا من ذلك الاختيار. العنصر <tanrei-divider> الذي تضعه بين محتواك أنت خط دائمًا.

اختيار الإزاحة

الإزاحة (inset) يُستخدم لـ
بلا إزاحة حدّ يمتد على الحاوية كلها: بين الأقسام، تحت ترويسة.
من البداية بين صفوف قائمة تبدأ صفوفها بأيقونة أو صورة رمزية. يبدأ الخط حيث يبدأ النص، فيُقرأ عمود البداية كتلة واحدة.
من الجهتين فاصل داخل مجموعة لا ينبغي أن يبدو حدًّا للحاوية: فاصل أوسط.

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

اختيار نمط الخط

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

النهايات المستديرة (lineCap="round") تجعل كل نقطة قرصًا وكل شرطة قضيبًا مستدير الطرفين، وتدوّر طرفي الخط المتصل أو المتموّج. تبقى الأطراف المستديرة داخل طول الخط، فتبقى الإزاحة دقيقة. على الخط الرفيع الافتراضي لا تُرى النهاية المستديرة: فهي موضوعة للفاصل الذي له قيمة thickness خاصة به، ولأنظمة التصميم التي ترسم خطوطًا أسمك.

افعل

  • ضع المسافة حول الفاصل في التخطيط: تباعد الحاوية التي ترصّ عناصرها، فجوة القائمة. الفاصل لا يضيف مسافة من عنده، فلا يضاعف فجوة أبدًا.
  • أبقِه زخرفيًّا (وهو الافتراضي) في القوائم والبطاقات. الصفوف تقول أصلًا أين تبدأ وأين تنتهي.
  • اضبط decorative على القيمة false فقط حيث يعني التجميع شيئًا للشخص، كمجموعات شريط أدوات أو قائمة خيارات.
  • التزم نمط خط واحدًا لنوع واحد من الحدود في المنتج كله، ليعني الخط المتقطع الشيء نفسه دائمًا.

لا تفعل

  • لا ترسم خطًّا بين كل عنصرين. استخدم التباعد أولًا، والفاصل حيث لا يكفي التباعد.
  • لا تستخدم الفاصل إطارًا أو حدًّا لحاوية. ليست له حاوية ولا شكل.
  • لا تجعله أسمك أو ملوّنًا لتعطيه معنى. الخاصية thickness موضوعة لنمط يحتاج إلى الحيّز ليُرى، أو لخط يطابق خطوطًا أسمك حوله. ولون الفاصل غير مقيَّد بنسبة تباين، لأن المحتوى الذي يفصله يجب أن يُفهم من دونه.
  • لا تضف فاصلًا داخل مكوّن يفصل بين أجزائه بنفسه، كما بين مجموعات قائمة خيارات أو صفوف قائمة (list). استخدم خاصية المكوّن نفسه.
  • لا تضع فاصلًا على حافة صندوق يُمرَّر لتقول إن وراءها مزيدًا من المحتوى. فـمنطقة التمرير تعلّم تلك الحافة، ما دام وراءها محتوى فقط، بالهيئة التي اختارها نظام التصميم.
  • لا تدع نمط الخط يحمل معنى وحده. إن كان الخط المتقطع يعني «اقطع هنا» فقل ذلك نصًّا أيضًا.
  • لا تعتمد عليه مكان عنوان. «— أو —» بين نموذجين فاصلان وتسمية، والتسمية هي التي تحمل المعنى.

إمكانية الوصول

الدور
separator
التسمية
A divider has no accessible name. Decorative (the default), it is not in the accessibility tree; otherwise it is a separator whose orientation is exposed, and the groups on either side carry their own names.
الحد الأدنى للهدف
تستوفي مساحة اللمس الحد الأدنى لحجم الهدف حتى لو كان الحجم المرئي أصغر. minimum 32px · pointer 44px · spacing 8px · touch 48px

لوحة المفاتيح

المفاتيح الإجراء

ملاحظات

  • Not interactive: a divider has no hit area, so the minimum target holds without extending anything. It never receives focus, even when it is exposed as a separator (a focusable separator is a splitter, which is a different component).
  • The line is decorative for contrast purposes: comp.divider.line.color is not held to 3:1, because the content it separates must be understandable without it. A dotted or dashed line covers less of its length and reads fainter than a solid one in the same color; that is accepted for the same reason. In the default system the line is sys.color.outline-variant, the one hairline color every line of the system shares, between 1.19:1 and 3.83:1 against the surface roles depending on the scheme: visible, and never the only thing that tells two groups apart.
  • The line's style carries nothing to assistive technology: a dotted, dashed or wavy divider that is not decorative is the same separator as a solid one. A product that gives a style a meaning (a tear line, a provisional section) states that meaning in text.
  • Text size does not change the line: it is not text.

مولَّد من specs/divider.spec.json, tokens/sys/measure.tokens.json

ما يتكفل به المكوّن

  • حين يكون زخرفيًّا (وهو الافتراضي) يُخفى عن التقنيات المساعدة على كل المنصات.
  • حين لا يكون زخرفيًّا يُعرَض على الويب بدور الفاصل (separator) مع اتجاهه. منصات Apple و Android و Flutter لا دور فاصل فيها: هناك يبقى في شجرة إمكانية الوصول بلا اسم، ويقول ما تستطيع كل منصة أن تقوله.
  • لا يقبل التركيز أبدًا ولا يستقبل إدخالًا، فلا يعترض أبدًا عناصر التحكم على جانبيه.
  • سماكة خطه بكسل واحد من بكسلات الجهاز على الأقل. الخط المتصل أو المنقّط أو المتقطع يُحاذى إلى شبكة البكسلات عرضيًّا على محوره، فلا يظهر مغبَّشًا أبدًا؛ أما الموجة فتُرسم بتنعيم الحواف (antialiasing).
  • نمط الخط لا يقول شيئًا للتقنيات المساعدة: الفاصل المنقّط أو المتقطع أو المتموّج غير الزخرفي هو الفاصل نفسه الذي يكونه المتصل.
  • على الويب، يعيد وضع الألوان المفروضة (forced colors) رسم كل أنماط الخط بلون نص النظام.

ما عليك فعله

  • اذكر نصًّا أي معنى تعطيه لنمط خط، كخط القطع. التقنيات المساعدة لا تنقل النمط، والخط المنقّط أو المتقطع يبدو أبهت من المتصل.
  • أعطِ كل مجموعة اسمها الخاص حين يكون التجميع مهمًّا. الفاصل بلا اسم، فلا يستطيع أن يقول ما هي المجموعات.
  • لا تستخدم الفاصل ليحمل بنية الصفحة. العناوين والمعالم (landmarks) تفعل ذلك؛ أما الخط فيُرى فقط.