|
|
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Ниже привожу проблемный html-код. Там 2 текстовых фрагмента: - первый текстовый фрагмент " Текст выровнен по верхней границе " выровнен точно по верху (не смотря на фоновый рисунок, выходящий за пределы поля) - второй текстовый фрагмент " А этот текст расположен ниже верхней границы " - выровнен по правому краю (класс "right") и расположен несколько ниже. Задача : сделать так, чтобы 2-й текстовый фрагмент располагался на одном уровне с 1-м текстовым фрагментом и был пристыкован к верхней границе поля. При этом его выравнивание по правому краю (класс "right") должно быть сохранено. Замечание : задача должна быть решена без добавления классу "sub-title" отрицательного margin-top или padding-top, т.к. это уже будет похоже на заплатку. Если у 2-го текстового фрагмента убрать класс "right", то он будет располагаться на одном уровне с 1-м текстовым фрагментом, НО: а) 1-й текстовый фрагмент чуть-чуть опустится (этого быть не должно) б) 2-й текст не будет выровнен по правому краю Вот html-код: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 14:17 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, Читайте про разницу отображения блочных и строковых элементов. Это очень облегчит жизнь. А ещё, не знаю почему, но стиль по классу sub-title перекрывает стиль right, а потому и отступ вверху в 5 пикселей появляется. Вообще перекрываться стили с одним приоритетом так, что применённым остаётся последний стиль (в данном случае right), но получилось почему-то иначе... потому и надо !important добавить. Код: css 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:29 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02сделать так, чтобы 2-й текстовый фрагмент располагался на одном уровне с 1-м текстовым фрагментом и был пристыкован к верхней границе поля. При этом его выравнивание по правому краю (класс "right") должно быть сохранено. Достаточно? Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 15:37 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
авторЧитайте про разницу отображения блочных и строковых элементов. Что Вы хотите этим сказать - что в первоначальном варианте title был встроенным, а sub-title - блочным ? Попробуйте убрать класс "right" у sub-title => sub-title стал вcтроенным ? авторА ещё, не знаю почему, но стиль по классу sub-title перекрывает стиль right, а потому и отступ вверху в 5 пикселей появляется. Как оказалось, у меня в sub-title прямо был указан padding в 5 px. Т.е. никто никого не перекрывает (в классе right padding'а нет). Если в sub-title убрать padding, то всё встаёт на свои места. Ещё в Вашем варианте 1-я надпись опускается чуть ниже - этого быть не должно. Судя по всему, в Вашем варианте из-за добавления блочности классу title его фон целиком влезает в блок, а блок размещается внутри контейнера cont_block. А в исходном варианте 1-я надпись была встроенной и поэтому, её фон вылезает за пределы контейнера cont_block, не влияя на положение этой надписи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:26 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
krvsa , в Вашем варианте для чего нужно указывать нулевой padding в классе "right" ? Ведь в классе "sub-title" padding в 5px Вы убрали, а в самом начале стилей добавили: Код: html 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 19:29 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02авторЧитайте про разницу отображения блочных и строковых элементов. Что Вы хотите этим сказать - что в первоначальном варианте title был встроенным, а sub-title - блочным ? Попробуйте убрать класс "right" у sub-title => sub-title стал вcтроенным ? авторА ещё, не знаю почему, но стиль по классу sub-title перекрывает стиль right, а потому и отступ вверху в 5 пикселей появляется. Как оказалось, у меня в sub-title прямо был указан padding в 5 px. Т.е. никто никого не перекрывает (в классе right padding'а нет). Если в sub-title убрать padding, то всё встаёт на свои места. Ещё в Вашем варианте 1-я надпись опускается чуть ниже - этого быть не должно. Судя по всему, в Вашем варианте из-за добавления блочности классу title его фон целиком влезает в блок, а блок размещается внутри контейнера cont_block. А в исходном варианте 1-я надпись была встроенной и поэтому, её фон вылезает за пределы контейнера cont_block, не влияя на положение этой надписи. Вот :) В конце письма Вы написали то, о чём я думал, когда писал своё сообщение. Мне показалось, что такое заползание фона за пределы родителя немного неправильно, а потому Ваши слова про это я растолковал как описание проблемы. Сорри, раз так и надо, тогда про блочные и строчные элементы можно пропустить )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 20:04 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
авторМне показалось, что такое заползание фона за пределы родителя немного неправильно Так как всё-таки правильно ? В случае со встроенным элементом его фон должен "выползать" за пределы родительского элемента или нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 20:35 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, как оказалось это нормально. Если честно, сам не знал, поиск рулит. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 21:11 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 krvsa , в Вашем варианте для чего нужно указывать нулевой padding в классе "right" ? Это твой ЦСС, не мой... Cyrax_02Ведь в классе "sub-title" padding в 5px Вы убрали Ты ведь хотел уравнять элемены по верхнему краю. Cyrax_02а в самом начале стилей добавили: Код: html 1. Я это (и не только) всегда добавляю в начало, дабы был некий сброс настроек, который может давать не нужные эффекты по отступам и пр... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 23:49 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
krvsa , т.е. в классе "right" нулевой padding можно не добавлять ? Если же нулевой padding в классе "right" для чего-то и требуется, то тот же эффект необходимо получить другим способом, поскольку класс "right" имеет единственное назначение - выравнивание по правому краю. И никаких дополнительных форматирований он содержать не должен, т.к. может использоваться с различными элементами, в том числе имеющими ненулевой padding. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 13:30 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 krvsa , т.е. в классе "right" нулевой padding можно не добавлять ? Что делать в итоге решать тебе... Но я убираю отступы и делаю пр. "начальные установки" сразу, дабы не гадать потом "как все это выравнивать"... Вот статейка на эту тему http://denweb.ru/verstka/sbros-stilej-css.html Да и вообще много чего еще ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 13:41 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Тем не менее, то, что в классе "sub-title" оказался padding в 5px, не должно являться причиной сдвига 2-го текстового фрагмента вниз. Ведь 1-й текстовый фрагмент тоже имеет padding в 5px - и вниз не сдвигается. Т.е. проблема не решена. Подтверждением нерешённости проблемы является, в частности, тот факт, что при добавлении 2-му текстовому фрагменту того же самого backgroung'а, происходит сдвиг этого текста вниз, а его background целиком вписывается в родительский элемент. Тогда как background 1-го текстового элемента выходит за граница родительского элемента: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Т.е. получается, что у 1-го текстового элемента padding НЕ влияет на положение текста, а у 2-го текстового фрагмента padding влияет на положение текста. Почему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 13:50 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 , любое "выравнивание" нужно начинать с "пустых" родительских элементов... Если они выравниваются как нужно - можно приступать к добавлению дочерних элементов. У тебя верстка просто ужоснах. И с ней ты пытаешся что-то делать. Любой "дисбаланс" "выравнивания" может быть вызван как родительским, так и дочерними элементами... Каким боком у тебя в спане оказалась форма? Почему используются отступы БР-ами? Т.о. позиция "я вот тут наваял, а вы мне объясните че за фигня получилась" изначально обречена на провал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 13:57 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
полностью согласен с kvrsa. 1. Суть такая, при правильной вёрстке block и inline элементы нужно чётко разделять. Очень плохо, когда элементы разных типов лежат на одном уровне (как у Вас <div> и <br>). 2. inline позиционирование использовать только при выводе текста и всего, что связано с ним. 3. не использовать смену стандартного позиционирования для inline элементов. Я вот когда верстаю, придерживаюсь этих трёх правил, и обычно проблем с отображением не возникает. например размеры и отступы у inline элементов работают не совсем адекватно. то есть, я бы верстал вот так (вырезал всё не относящееся к делу) Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. То есть получается, что текст левого блока обтекает правый блок, при этом всё на одном уровне (надо - по верхней границе, не надо - можно с отступом). Фон бы накладывал конечно на div, но я так понимаю, что фон требуется только под текстом, потому наложил на span. А вообще, какова была задача то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 14:42 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
авторCyrax_02, любое "выравнивание" нужно начинать с "пустых" родительских элементов... Если они выравниваются как нужно - можно приступать к добавлению дочерних элементов. У меня как раз всё выравнивание начинается с пустого cont_block. Внутри него 2 span'а - один слева, другой справа. авторУ тебя верстка просто ужоснах. И с ней ты пытаешся что-то делать. Любой "дисбаланс" "выравнивания" может быть вызван как родительским, так и дочерними элементами... Каким боком у тебя в спане оказалась форма? Почему используются отступы БР-ами? Форма в span'е и br'ы - это всё, что вызывает у вас такую реакцию ? br'ы можно убрать - они здесь абсолютно ни на что не влияют. Задача такая: слева расположен заголовок страницы, справа - форма, состоящая из 2-3 полей, расположенных в ряд (форма пристыковывается к правому краю). Если форму оформить как блочный элемент, то она окажется под заголовком. Следовательно, форму нужно оформить как inline (или inline-block, но этот вариант поймут не все браузеры). Согласен, что заключать форму в span не совсем корректно. Но если заменить span на div и оформить класс "sub-title" как inline, то абсолютно ничего не поменяется: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 15:10 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
автор1. Суть такая, при правильной вёрстке block и inline элементы нужно чётко разделять. Очень плохо, когда элементы разных типов лежат на одном уровне (как у Вас <div> и <br>). 2. inline позиционирование использовать только при выводе текста и всего, что связано с ним. 3. не использовать смену стандартного позиционирования для inline элементов. Как я уже написал, компоновка должна быть следующей: слева расположен заголовок страницы, справа - форма, состоящая из 2-3 полей, расположенных в ряд (форма пристыковывается к правому краю). Да, компоновка непростая, но она должна быть именно такой. авторто есть, я бы верстал вот так (вырезал всё не относящееся к делу) У Вас здесь справа нет ни полей, ни формы, ни background'а. Т.е. пример абсолютно простой, не отвечающий задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 15:15 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
Cyrax_02автор1. Суть такая, при правильной вёрстке block и inline элементы нужно чётко разделять. Очень плохо, когда элементы разных типов лежат на одном уровне (как у Вас <div> и <br>). 2. inline позиционирование использовать только при выводе текста и всего, что связано с ним. 3. не использовать смену стандартного позиционирования для inline элементов. Как я уже написал, компоновка должна быть следующей: слева расположен заголовок страницы, справа - форма, состоящая из 2-3 полей, расположенных в ряд (форма пристыковывается к правому краю). Да, компоновка непростая, но она должна быть именно такой. авторто есть, я бы верстал вот так (вырезал всё не относящееся к делу) У Вас здесь справа нет ни полей, ни формы, ни background'а. Т.е. пример абсолютно простой, не отвечающий задаче. я хотел показать саму идею :) Но если ближе к задаче, то вот: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 15:57 |
|
||
|
(html) "паразитный" эффект у float'а
|
|||
|---|---|---|---|
|
#18+
В общем, получается так: 1. В моём первоначальном варианте (где левый текст - это span) фон не влияет на положение текста и располагается независимо от родительского элемента, в котором находится текст (т.е. фон может вылезать за его пределы). И если тексту (span'у) добавить line-height = высоте фона, то фон за пределы родительского элемента не вылезет. 2. Добавление span'у свойства float (не важно какого - left или right) выводит этот span (даже если span больше ничего не содержит кроме текста) из вышеуказанного состояния: фон, так же как и сам текст, тоже начинает строго вписываться в родительский контейнер со всеми вытекающими. Того же эффекта можно добиться заключением текста (или span'а с текстом) в div. 3. Если требуется наряду с левым текстом отображать справа какие-либо элементы с float = right, высота которых может быть равной высоте фона левого текста (как в моём сабжевом случае), то необходимо: а) либо вывести левый span из состояния, описанного в п.1: либо добавлением span'у свойства line-height, равного высоте фона, либо добавление span'у свойства float = left (последний вариант предпочтительнее); б) либо заключение левого текста (или span'а с текстом) в div. В этом случае целесообразно и правые элементы тоже заключить в div. В последнем случае (б) поведение левых и правых элементов будет идентичным. Видимо, из-за возможных проблем с различным отображением встроенных и блочных элементов, расположенных на одном уровне, в разных браузерах целесообразно будет: а) и левые, и правые элементы заключить в div; б) не пользоваться эффектом, описанным в п.1 (когда фон может вылезать за пределы родительского элемента). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2013, 17:24 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38514957&tid=1447514]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
147ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 461ms |

| 0 / 0 |
