Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sibling combinators #320

Open
skip405 opened this issue Oct 26, 2017 · 18 comments
Open

Sibling combinators #320

skip405 opened this issue Oct 26, 2017 · 18 comments

Comments

@skip405
Copy link
Collaborator

skip405 commented Oct 26, 2017

  • adjacent sibling combinator — комбинатор непосредственного соседства, +.
  • general sibling combinator — комбинатор соседства, ~.

КМК, использование слова «соседство» вместо «соседа» немного искажает.

Понимая всю сложность передачи в русском языке слова sibling в отношении элементов имеющих общего родителя, предлагаю вариант сиблинг. Генетический термин в качестве подтверждения наличия такого слова в языке :)

  • adjacent sibling combinator — комбинатор непосредственного примыкающего сиблинга, +
  • general sibling combinator — комбинатор сиблинга, ~
@pepelsbey
Copy link
Member

Слово сиблинг при довольно близком соседе и нулевом (важно!) употреблении — это что-то странное.

@SelenIT
Copy link
Contributor

SelenIT commented Oct 26, 2017

С этим «соседством» и раньше были вопросы, но именно на нем (не без труда) сошелся консенсус в прошлый раз.

На мой взгляд, оно логично: селектор соседа строится с помощью простых селекторов, объединенных комбинатором соседства. Но можно пересмотреть всю систему еще раз, если найдутся варианты лучше.

@skip405
Copy link
Collaborator Author

skip405 commented Oct 26, 2017

Сильно в спор идти не буду, но sibling «соседом» вы не переведёте ни в какой иной ситуации, а фронтенд почему-то будет исключением?

ОК, ладно, sibling — это сосед... а сосед — это sibling? Кто вообще такой сосед? Только тот, кто с твоего же этажа? Или этаж не важен? Может из соседнего дома? А через семь кварталов на одной и той же улице он тоже ещё сосед? А через 15? Сплошные вопросы ))

@pepelsbey
Copy link
Member

Давайте не скатываться в изобретение языка. Мы не минобр или минкульт какой-нибудь, мы просто фиксируем, направляем. Ну напишем мы «сиблинг» в словаре, останемся довольны. Но никто так как ни говорил, так и не будет. Толку-то?

@SelenIT
Copy link
Contributor

SelenIT commented Oct 26, 2017

Что такое соседний элемент в DOMе, по-моему, понятно интуитивно. Мало кому придет в голову называть соседними элементы из разных родителей. А вот кто такой «сиблинг», боюсь, сходу поймут разве что генетики или те, кто и так знает английский...

Вот что, имхо, можно уточнить, так это то, что это селекторы/комбинаторы не просто соседа/соседей, а именно следующих соседей, что поиск идет только вперед. Кстати, на MDN с какого-то перепугу «селектором следующего элемента» обозвали как раз комбинатор ~, что лично меня бы запутало, т.к. для меня «следующий» — это следующий непосредственно (как «следующий год», «на следующей остановке» и т.п.). Может, заодно и там исправить? :)

@skip405
Copy link
Collaborator Author

skip405 commented Oct 27, 2017

По делу:
Есть вариант с сестринскими элементами, который в принципе встречается в русскоязычном сегменте.

adjacent sibling вполне может быть «примыкающим/прилегающим элементом». На мой взгляд фраза «непосредственный сосед» точно так же ничего не объясняет для новичков, как и «примыкающий сиблинг». adjacent sibling combinator был бы «комбинатором примыкающего элемента». М?

Было бы как-то так:

  • adjacent sibling combinator — комбинатор примыкающего элемента, +
  • general sibling combinator — комбинатор сестринских элементов, ~

Не по делу (с уважением):
Вадим, я не удивлён, что так (сосед) говорят, а так (сиблинг) — нет. Не этот ли словарик «зафиксировал» и «направлял»? Мне кажется, что ты довольно скромно описываешь, мол, «мы не минобр». Такого репозитория второго же нет, тем более с таким высоким качеством. То есть влияние авторов этого словаря колоссальное, как мне кажется, и порядок прилагательных я бы поменял.

Говоря про изобретение языка, а как ты думаешь это должно происходить; кто, если не разработчики должны изобретать варианты, профессора в минобре? Оно ж не «само» в язык попадает, так чего отмахиваться?
К примеру, я сегодня собираюсь открыть ишью Worklet, поскольку статьи про Гудини скоро будут как грибы появляться, и начнётся обсуждение. И ты думаешь, что «ворклет» (или любой другой придуманный вариант вроде «работничка») не будет изобретением? Будет, конечно. И пусть.

@pepelsbey
Copy link
Member

Ворклет — это что-то новое, на это есть все шансы повлиять. Этим селекторам сто лет в обед, мы можем только зафиксировать в этом случае. Если говорить про задачу назвать разные селекторы, то важно решать её в контексте — не по одному, а в списке всех типов селекторов.

См. также как мы в Академии назвали селекторы: ч. 1, ч. 2, ч. 3.

@SelenIT
Copy link
Contributor

SelenIT commented Oct 27, 2017

Конечно, это сильно opinionated;), но лично меня (в роли новичка) «примыкающий/прилегающий» могло бы ввести в ступор, направив мысли в сторону визуальной близости. В DOM-инспекторе лично я никакого прилегания не вижу, там просто соседние строчки кода, а «примыкающим» сбоку к родителю мне мог бы показаться и первый потомок. Понятно, что это вопрос привычки...

@pepelsbey, а кстати, почему в словарик не попали термины из Академии? На мой взгляд, какой-то селектор действительно звучит и запоминается лучше, чем селектор/комбинатор чего-то (причем если у селекторов что-то — это сами элементы, то у комбинаторов — отношения между ними). Может, действительно внедрить удачный вариант «сестринский» для ~, «соседа» ограничить ближайшим соседом (имхо, вполне интуитивно), и получить стройную схему, где каждый селектор/комбинатор характеризуется одним прилагательным?

  • descendant selector/combinator — контекстный селектор/комбинатор (пробел)
  • child selector/combinator — дочерний селектор/комбинатор (>)
  • general sibling selector/combinator — сестринский селектор/комбинатор (~)
  • adjacent sibling selector/combinator — соседний* селектор/комбинатор (+)
    * или всё-таки «соседский»?

А альтернативные варианты, употребимые и не очень, можно указать в скобках после «тж.».

Ну и MDN привести в соответствие, на всякий случай:)

@pepelsbey
Copy link
Member

Можно обсудить и сделать второй заходи по селекторам вот прямо здесь, в рамках обсуждения сиблингов. Если найдём что-то лучше, чем варианты Академии, то и в Академии поменять сможем.

@SelenIT
Copy link
Contributor

SelenIT commented Oct 27, 2017

Мне варианты Академии очень нравятся краткостью и запоминаемостью (в сочетании с употребимостью, что называется, in the wild), а также тем, что одним словом можно назвать и комбинатор, и весь селектор с ним (уходит проблема сосед/соседство). Смущает только выбивающийся из ряда «селектор последующих элементов», но это не критично, к тому же он в любом случае намного лучше MDNовского варианта. Ну и совсем мелочь... «соседний селектор» лично для меня тоже скорее соседнее правило в CSS-файле, чем селектор соседнего элемента, но это уже «opinionated» дальше некуда и с этим я вполне могу жить:)

P.S. Для + еще существует (в т.ч. в MDN) вариант «смежный селектор/комбинатор» (хотя лично я едва ли могу назвать этот вариант идеальным).

@skip405
Copy link
Collaborator Author

skip405 commented Oct 27, 2017

Почему важно перевести слово adjacent, вы спросите? А я отвечу :)
Потому что оно противопоставлено слову general. То есть — есть general, есть adjacent. Тот же «сосед» поэтому и выкручивался через «непосредственный» и посредственный просто.
Продолжаю считать «примыкающий элемент» и «сестринский элемент» вполне подходящими вариантами перевода adjacent sibling и general sibling.

Лингв. справка:
В английском языке если существительное (или герундий/глагол) поясняет другое существительное, то оно становится типо «главным» и принимает на себя ударение. Напр. knitting kit, hot water bottle — ударными словами при чтении должны быть knitting и water, как бы кто ни хотел иначе. Переводятся в русский язык они обычно тоже соответствующе — бутылка с горячей водой, набор для вязания. Если поясняющим словом является прилагательное, то такого сдвига не происходит. Напр. beautiful girl, interesting book, существительные получают ударения и переводятся как обычные фразы.

Это я к чему — это к тому, что во фразе adjacent sibling selector ключевым словом является sibling, а не selector. Переводить его, как «какой-то там селектор» нежелательно, он «селектор чего-то». Хотите верьте, хотите — нет :)

@SelenIT мнение про визуальное прилегание справедливо в полной мере. Давай попробуем перевести ситуацию на английскую почву, как английский новичок воспринимает слово adjacent? Точно также как и мы воспринимаем «примыкающий»... наверное ))) Про инспектор и ДОМ речь же не идёт пока.

@SelenIT
Copy link
Contributor

SelenIT commented Oct 27, 2017

И всё-таки главное слово в compound noun — именно последнее, определяемое. А существительные в роли определений, AFAIK, постепенно дрейфуют в сторону прилагательных до степени смешения с ними (passenger plane, конечно, можно перевести как плоскость пассажира самолёт с пассажирами/для пассажиров, но привычнее и естественнее по-русски всё-таки пассажирский самолёт).

Насчет, того, как англоговорящие воспринимают adjacent — хороший вопрос! Кембриджский словарь дает варианты very near, next to, or touching. Как по мне, первые два значения ближе-таки к нашему «соседнему» (жалко, нет прилагательного от «рядом»)... но тут уже я пристрастен:).

А насчет DOM и инспектора — имхо, зря речь не идет:). На мой взгляд, F12 — это первое, с чем надо освоиться новичку, т.к. в HTML нельзя слепо полагаться на теги в разметке, и надо как можно раньше приучаться рассматривать ту структуру, с которой реально имеет дело браузер, в подходящем для этого инструменте.

@skip405
Copy link
Collaborator Author

skip405 commented Oct 30, 2017

Попытался сделать понятное описание и разложить по полочкам.

sibling (также general sibling), сестринский элемент. В CSS так называют элементы, следующие после формирующего (англ. former element). Напр. в селекторе code ~ p code является формирующим элементом, p является сестринскими (одного уро��ня) элементами, следующими в HTML после code. ~ является комбинатором сестринских элементов. Целевым элементом являются элементы p.

adjacent sibling, примыкающий элемент. В CSS так называют первый из сестринских элементов. Напр. в селекторе code + p code является формирующим элементом, p является первым сестринским элементом, примыкающим к code, + является комбинатором примыкающего элемента. Целевым элементом является элемент p.

adjacent sibling selector, селектор примыкающего элемента, см. примыкающий элемент.
adjacent sibling combinator, +, комбинатор примыкающего элемента, см. примыкающий элемент.

general sibling selector, селектор сестринских элементов, см. сестринский элемент.
general sibling combinator, ~, комбинатор сестринских элементов, см. сестринский элемент.

Ну норм же описание, люди ))) Единственное, что режет глаз, (нет, не бревно) — это фразы вида «элементом являются элементы». И да, продолжаю пропихивать «примыкающий» (не прилегающий) в качестве точного аналога слова adjacent, зная, что так пока никто не говорит и вариант не нашёл широкого применения. Считаю, что никому неизвестный, но правильно передающий смысл вариант куда важнее, чем неправильный, но популярный.


@SelenIT твой классный пример с самолётом (как и очевидная разница между swimming pool и swimming girl) является подтверждением, что под такие фразы нельзя подобрать один паттерн перевода. Переходя к sibling combinator и sibling selector, я всё же настроен предлагать «селектор чего-то», как в примерах выше и как написан текущий вариант с соседом, поскольку ты и сам заметил, как звучит «соседний селектор». Он действительно отражает соседство двух правил в одном файле. Похожая проблема представляется и в browsing context, хоть я и предложил «браузерный», а не какой-нибудь «браузинговый» контекст, нужно будет разрулить перевод browser context (если такое сочетание вообще встречается), который тоже вполне может быть «браузерным».

@SelenIT
Copy link
Contributor

SelenIT commented Oct 30, 2017

@skip405, моё главное возражение против комбинатора сестринских элементов и т.п. в том, что если селектор действительно выбирает элементы, то комбинатор не комбинирует элементы — он выражает отношение между элементами, соответствующими простым селекторам, которые он комбинирует, чтобы полученный с его помощью сложный селектор мог выбрать соответствующий элемент. Именно поэтому был селектор соседнего элемента, но комбинатор соседства. А любая неточность в определении, на мой взгляд, мешает и пониманию.

Варианты с прилагательным, на мой взгляд, этой проблемы лишены — прилагательное само по себе более абстрактно, а существительное задает ему контекст, в котором интуитивно понятно, что сестринский селектор — это селектор сестринских элементов, а сестринский комбинатор — это комбинатор, выражающий отношение сестринства между частями селектора. Поскольку при этом они еще и 1) короче, 2) легче для запоминания, 3) больше распространены в обиходе — на мой взгляд, этого достаточно для того, чтобы предпочесть их.

И, увы, я не могу согласиться, что примыкающий — более точный перевод для adjacent element (в контексте DOM-дерева, к которому применяется CSS), чем соседний элемент. Начиная с меньшей благозвучности (корень -мык- часто несет негативную окраску — «помыкать», «умыкнуть» и т.п.), совершенно лишнего здесь, на мой взгляд, причастного суффикса -ющ- (элемент ведь ничего не делающий, он просто сидит себе рядом с другим, по соседству с ним!), и заканчивая оттенком не просто близости, а тесного касания, которое у adjacent, согласно кембриджскому словарю, никак не основное и вообще факультативное. Смысл adjacent element в контексте DOM не в том, что они касаются или прилегают/примыкают друг к другу вплотную, а всего лишь в том, что между ними нет других элементов — они соседствуют напрямую. Проблему с двусмысленностью соседнего селектора я предложил решить заменой его на соседский селектор — но опять же, не стоит эту проблему преувеличивать (в конце концов, читатель веб-стандартов явно не идиот и понимает контекст:). В общем, я не вижу от введения этого термина выигрыша ни в точности, ни в выразительности. Полагаю, именно поэтому он и не прижился (хотя попытки бывали и ��аньше).

На правах конструктивного оффтопа, в CSS слово adjacent встречается в еще одном контексте — как adjacent margins (те самые внешние отступы, которые могут «схлопываться»). Вот для этого случая, по-моему, варианты примыкающие или смежные вполне уместны — там действительно есть оттенок именно соприкосновения.

P.S. Ну и former element, по-моему, явно предыдущий/предшествующий, а вовсе не «формирующий» (тогда было бы forming).

@skip405
Copy link
Collaborator Author

skip405 commented Oct 30, 2017

Спасибо за пояснение позиции, @SelenIT я не буду аргументы уже подбирать, надо закруглиться, как мне кажется :) Переведи, пожалуйста, типичный разговор в типичной компании, если не затруднит, чтобы и в контексте разговора были понятны твои варианты, не только в контексте словарной статьи.

Dev 1: Damn, why are all the spans red and not just the first one?
Dev 2: Hm, that's because you target general siblings, not the adjacent one.

@skip405
Copy link
Collaborator Author

skip405 commented Oct 30, 2017

«сестринский комбинатор» :) без улыбки я не могу это читать )) да и «комбинатор сестринских элементов» не лучше )) блин, почему так сложно?!

@SelenIT
Copy link
Contributor

SelenIT commented Oct 30, 2017

без улыбки я не могу это читать ))

Может, это не минус, а плюс? Вызвало эмоциональную реакцию (тем более позитивную) — легче запомнилось?)

Разговор я перевел бы примерно так:

1: Блин, почему у меня все спаны покраснели, а не только первый?
2: Гм, это потому что ты выбираешь все сестринские элементы, а не только ближайшего соседа.

На мой взгляд, то, что в живой речи термин может использоваться в вариациях — это нормально. В репликах ведь не было слов селектор и комбинатор, так что «в лоб» словарная статья сюда бы всё равно не подошла))

@skip405
Copy link
Collaborator Author

skip405 commented Oct 30, 2017

@SelenIT по поводу former мне так тоже сначала показалось, но я чёт потом подумал, что может это form-former как work-worker. Да, это мой бзик )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
3 participants