|
|
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Имеется некое подобие меню с адаптивной вёрсткой (см.рисунок ниже): Код: 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. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 1. Иконка должна быть центрирована с надписью по горизонтали 2. Красный блок должен быть ровно в центре синего блока 3. По возможности упростить html-код Условия: 1. Никакой привязки к размерам красного и синего блоков (вёрстка адаптивная). Т.е. размеры блоков заранее неизвестны 2. Размеры иконок могут быть произвольными (к их размерам также не привязываться) 3. Иконка и надпись должны располагаться на одном постоянном расстоянии друг от друга 4. При изменении размера синего блока размер красного блока меняться не должен 5. Кликабельной ссылкой должен быть весь синий блок Что касается центрирования блоков, то здесь сильно связывает руки тот факт, что практически все блоки приходится делать плавающими. В этих условиях варианты с [display: inline] и [display: table-cell] не работают. P.S. Весь вчерашний день (для меня ещё сегодняшний) потратил на это чудо-меню. Ниасилил... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 04:51 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
аффтарЧто касается центрирования блоков, то здесь сильно связывает руки тот факт, что практически все блоки приходится делать плавающими. Пригрозили пытать раскалённым железом, если позабудешь о float? inline-block и table-cell нормальный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 09:26 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
st_stаффтарЧто касается центрирования блоков, то здесь сильно связывает руки тот факт, что практически все блоки приходится делать плавающими. Пригрозили пытать раскалённым железом, если позабудешь о float? inline-block и table-cell нормальный вариант. Если все так просто предложи рабочий вариант ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 10:55 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейЕсли все так просто предложи рабочий вариант ) Телепатией не обладаю. Иконка, которая центрирована по горизонтали хрен поймёшь от чего, толи внутри красного блока она вместе с текстом центрируется, хотя красный блок обжимает контент и нечего там центровать, толи красный блок относительно синего блока должен центрироваться по горизонтали, но тогда это перекликается с пунктом 2, где уже об этом сказано, короче про первый пункт вообще не понял. Второй пункт, как один блок отцентровать относительно другого - ну это все знают. Третий пункт - философский, видимо лишняя строка в html/css на что-то влияет. А вообще, картинка, и то, что надо сделать согласно пунктам - две разные вещи. Такие вот дела ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 11:23 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
На самом деле задача не сложная =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 11:31 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейНа самом деле задача не сложная =) Если понимаешь, что хочет получить в итоге автор, а иначе это просто гадание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 11:41 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
авторТелепатией не обладаю. Иконка, которая центрирована по горизонтали хрен поймёшь от чего, толи внутри красного блока она вместе с текстом центрируется, хотя красный блок обжимает контент и нечего там центровать, толи красный блок относительно синего блока должен центрироваться по горизонтали, но тогда это перекликается с пунктом 2, где уже об этом сказано, короче про первый пункт вообще не понял.1. Иконка должна быть расположена не слева вверху красного блока, а слева в середине красного блока. 2. Красный блок должен быть расположен строго в середине синего блока (в середине по горизонтали и в середине по вертикали). авторТретий пункт - философский, видимо лишняя строка в html/css на что-то влияет.Вообще-то в самом начале у меня было что-то вроде такого: Код: html 1. 2. 3. 4. 5. Ели сравнить этот html-код с тем, что приведён в моём первом посте, то станет понятно, что задача #3 имеет как раз-таки очевидное практическое значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 11:53 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
авторА вообще, картинка, и то, что надо сделать согласно пунктам - две разные вещи.Картинка - это то, что у меня пока получилось сделать. Как должно быть: 1. Иконка должна быть расположена не слева вверху красного блока, а слева в середине красного блока. 2. Красный блок должен быть расположен строго в середине синего блока (в середине по горизонтали и в середине по вертикали). авторНа самом деле задача не сложная =)Рад это услышать. Только вот я ожидал готового решения. Если бы это было так просто, я бы не мудохался всю ночь. авторВторой пункт, как один блок отцентровать относительно другого - ну это все знают... Пригрозили пытать раскалённым железом, если позабудешь о float? inline-block и table-cell нормальный вариант. Повторюсь: Что касается центрирования блоков, то здесь сильно связывает руки тот факт, что практически все блоки приходится делать плавающими. В этих условиях варианты с [display: inline] и [display: table-cell] не работают. Вам известен способ реализовать задачу без float'ов ? Поделитесь знаниями с сообществом (без иронии, серьёзно). При этом обратите внимание на условие №2 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 12:02 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Вот что нужно получить: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 12:15 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Я всё равно не въезжаю, вот как на рисунке . Высоту и ширину синих блоков задал от балды, она может быть любой. Иконку также можно заменить на img, если фоном не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 13:58 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, Сделайте ваш пример на фиддле, больше людей найдется поковырять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 14:16 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
st_stЯ всё равно не въезжаю, вот как на рисунке . Высоту и ширину синих блоков задал от балды, она может быть любой.В Вашем промежуточном примере: 1. Для синего прямоугольника (ссылки) [display:inline-block;] нужен для того, чтобы: - синие прямоугольники следовали друг за другом по горизонтали (свойство встроенного элемента) - можно было задать горизонтальное выравнивание (text-align) красного прямоугольника внутри (свойство блочного элемента) - в свойствах красного прямоугольника можно было задать вертикальное выравнивание красного прямоугольника в синем прямоугольнике (свойство блочного элемента) 2. Для красного прямоугольника [display:inline-block;] нужен для того, чтобы: - красный прямоугольник не занимал всю ширину синего прямоугольника (свойство встроенного элемента) - в свойствах дочерних span'ов можно было задать их вертикальное выравнивание внутри красного прямоугольника (свойство блочного элемента) 3. Для пустого span'а класса "valign", вертикально выравнивающего текст внутри красного прямоугольника, [display:inline-block;] нужен для того, чтобы: - чтобы он был расположен справа от красного прямоугольника, а не на новой строке (свойство встроенного элемента) - можно было задать ему высоту, равную высоте синего прямоугольника (свойство блочного элемента) Примечательно то, что inline-block в данном примере будет работать даже в IE6/7, т.к. применяется он только к встроенным элементам (к ссылкам и span'ам) st_stИконку также можно заменить на img, если фоном не нравится. А фоном и не получится . Размер картинки в этом случае не будет участвовать в позиционировании надписи (красного прямоугольника). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:19 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Вариант st_st : Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:20 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Неужели так сложно сделать таблицу в таблице? решение интуитивное и элементарное )) Ну или псевдо таблицу на блоках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:21 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
авторСделайте ваш пример на фиддле, больше людей найдется поковырять. Не знаю, что это такое и не хочу знать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:21 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Малыхин СергейНеужели так сложно сделать таблицу в таблице? решение интуитивное и элементарное )) Ну или псевдо таблицу на блокахСогласно нашим локальным стандартам, предпочтение отдаётся блочной вёрстке как более гибкой. Сабж табличной вёрсткой реализовать можно, только при этом будет куча дополнительных тегов (table, tr, td и пр.), а также куча дополнительных CSS-стилей для них. Более того, при усложнении структуры меню легко можно упереться в потолок возможностей табличной вёрстки - в этом случае придётся переделывать структуру на блочный вариант. А псевдо-таблица/псевдо-ячейки - не вариант, т.к. поддерживаются не всеми браузерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:30 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, как задаётся высота синего блока? Помню ещё давным давно видел такое вот решение (кстати, на будущее, это и есть тот самый fiddle... правда так обсуждать удобнее?) Единственное ограничение - высоту внешнего блока надо знать заранее. P.S. насчёт таблиц - это вы напридумывали... Какие такие ограничения табличной вёрстки? Какие стили для разных tr и td? Пишем таблице скласс, а в этом классе определяем tr и td с нужными стилями... и проблема решена. По сути для такого решения многоуровневого меню надо всего 2 класса-селектора (внешняя и вложенная таблица), и ещё 4 для tr и td... И далее любая структура вкладывается в этот список элементов... ЛЮБАЯ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:40 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Фоновую иконку можно убрать, впихнуть её в img и аналогично выровнять по вертикали. Если старые IE не интересуют, то вспомогательные спаны можно поубирать и добавить их через after, что ещё больше сократит html. А ещё есть table-cell, но html увеличится и старые IE в пролёте (хотя многие уже забивают на них). p.s. там ещё <title> добавить надо в пример, а то на html5 не валидируется, не солидно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:56 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
И это, у того, кто знает сей факт (баг ранних IE и соответственно верстал под них, а значит не первый год в вебе) - аффтарПримечательно то, что inline-block в данном примере будет работать даже в IE6/7, т.к. применяется он только к встроенным элементам (к ссылкам и span'ам) обычно проблем с вёрсткой не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:59 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 16:59 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Cyrax_02Малыхин СергейНеужели так сложно сделать таблицу в таблице? решение интуитивное и элементарное )) Ну или псевдо таблицу на блокахСогласно нашим локальным стандартам, предпочтение отдаётся блочной вёрстке как более гибкой. Сабж табличной вёрсткой реализовать можно, только при этом будет куча дополнительных тегов (table, tr, td и пр.), а также куча дополнительных CSS-стилей для них. Более того, при усложнении структуры меню легко можно упереться в потолок возможностей табличной вёрстки - в этом случае придётся переделывать структуру на блочный вариант. А псевдо-таблица/псевдо-ячейки - не вариант, т.к. поддерживаются не всеми браузерами. ... Мы тут столялры и плотники поэтому дрель не предлагать мы топорами будем дырки сверлить .... (шутка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 17:18 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
авторЕсли старые IE не интересуют, то вспомогательные спаны можно поубирать и добавить их через after, что ещё больше сократит html.Почему без вспомогательных span'ов (высота которых = высоте родительского блока) красный span выравнивается по верху ? Ведь у красных span'ов указывется [vertical-align: middle] . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:23 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
И для чего красному span'у необходимо указывать [display: inline-block] ? Изначально красный span - встроенный элемент. Какое блочное свойство этим правилом мы ему придаём ? Без [display: inline-block] красную многострочную надпись неслабо колбасит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:30 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
st_st , задавая [text-align: center] синему прямоугольнику (ссылке), мы тем самым центрируем по горизонтали не только группу встроенных элементов внутри ссылки (иконка + надпись), но и каждый из этих элементов в отдельности. В частности, строки многострочной надписи тоже центрируются по горизонтали, а должны центрироваться по левому краю. Т.е. сам красный прямоугольник должен центрироваться по горизонтали, а многострочная надпись в составе красного прямоугольника - по левому краю. Возможно это сделать без усложнения html-кода ? В jsfiddle.net нарисовал, только не знаю, как ссылку получить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:57 |
|
||
|
Простая задача центрирования блока в непростом окружении
|
|||
|---|---|---|---|
|
#18+
Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2014, 18:58 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38687986&tid=1446929]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 493ms |

| 0 / 0 |
