Jump to content
  • 0

Возможно ли горизонтальное центрирование блока относительно соседних блоков


Belovsan
 Share

Question

Вот пытаюсь понять как "думает" CSS. Есть три блока, которые выстроены по горизонтали. Ширина страницы резиновая. Значит как я их выстраиваю. Один блок float:right; второй - float:left;. Тот что посредине - падает в середину сам при заданном margin:0 auto;

И всё бы хорошо, но центрирование среднего блока происходит не относительно соседних, а относительно общей ширины страницы. А мне бы хотелось чтобы отступы от соседних блоков до центрального были одинаковыми. Можно это как-то сделать?

На пальцах рассказал, а вот сам код CSS:

#telo {width:100%; height:150px; background:#00FF33;}

#blok1 {width:100px; height:80px; border: 1px solid #000000; float:left; margin:0 10px;}

#blok2 {width:150px; height:15px; border: 1px solid #000000; float:right; margin:0 10px;}


#blok3 {width:250px; height:100px; border: 1px solid #000000; margin:0 auto;}

А это HTML:

<body>

<div id="telo">

<div id="blok1"></div>

<div id="blok2"></div>

<div id="blok3"></div>
</div>


</body>

Link to comment
Share on other sites

Recommended Posts

  • 0
среднему блоку overflow:hidden;

Реально помогло. Спасибо.

Только ж вот хочу разобраться и не могу понять почему ж таки оно помогло :D?

Читаю про overflow: Свойство overflow управляет отображением содержания блочного элемента, если оно целиком не помещается и выходит за область заданных размеров.

Читаю про hidden: hidden Отображается только область внутри элемента, остальное будет скрыто.

Походу ничего о позиционировании не пишется. Если можно, объясните принцип работы этого заклинания :). Или дайте "наколочку", где почитать об этом.

И ещё вопросик. Вот смотрите. Если у меня в третьем блоке записаны такие параметры: #blok3 {width:250px; height:100px; border: 1px solid #000000;} Почему получается так, что этот третий блок "налазит" на первый, а не становится рядом с ним? Ведь вроде не задано никакое позиционирование и следовательно блоки не должны наезжать друг на друга.

Ещё хочу конечно же извиниться за такие вопросы, но чувствую без понимания этого, нет смысла двигаться дальше ;)

Edited by Belovsan
Link to comment
Share on other sites

  • 0
Походу ничего о позиционировании не пишется. Если можно, объясните принцип работы этого заклинания . Или дайте "наколочку", где почитать об этом.

Спецификация W3C по CSS2.1, раздел 9.5:

The border box of a table, a block-level replaced element, or an element in the normal flow that establishes a new block formatting context (such as an element with 'overflow' other than 'visible') must not overlap any floats in the same block formatting context as the element itself. If necessary, implementations should clear the said element by placing it below any preceding floats, but may place it adjacent to such floats if there is sufficient space.

Link to comment
Share on other sites

  • 0
Ну ничего страшного, а объясни плиз своими словами, как ты себе это представляешь, вот что на самом деле происходит? :D

Ага, и если можно - по русски. Стыдно признаться, но с английским не сложилось у меня по жизни.

Но в принципе, с помощью онлайн-переводчика мне удалось немного понять смысл написанного :)

Правда читая перевод онлайн переводчика я теперь начинаю понимать почему китайцы не отвечали на мои письма о сотрудничестве, написанные на русском языке и переведённые на англ с помощью онлайн-переводчика. Ведь не исключено, что они мои письма тож переводили с помощью такой программки, но, правда уже на китайский ;)

Edited by Belovsan
Link to comment
Share on other sites

  • 0

Ещё такой вопрос возник по данной раскладке. Если, например, я начинаю уменьшать размер экрана, то до тех пор, пока блоки вмещаются на экране, они как бы нормально расположены в один ряд. Ну а когда им становится мало места, они начинают смещаться один под другого. Но это же не всегда уместно. Я нашёл такое решение, как задать параметр min-width. Вот интересно, правильное ли это решение, и самое главное -есть ли другие (более красивые) способы решить данный вопрос?

Link to comment
Share on other sites

  • 0
Ещё такой вопрос возник по данной раскладке. Если, например, я начинаю уменьшать размер экрана, то до тех пор, пока блоки вмещаются на экране, они как бы нормально расположены в один ряд. Ну а когда им становится мало места, они начинают смещаться один под другого. Но это же не всегда уместно. Я нашёл такое решение, как задать параметр min-width. Вот интересно, правильное ли это решение, и самое главное -есть ли другие (более красивые) способы решить данный вопрос?

Это правильное решение.

Link to comment
Share on other sites

  • 0

min-width - самое правильное и красивое решение. Только оно в ИЕ6 не работает... там его придется эмулировать экспрешнами или распоркой (распорка мне лично нравится больше).

Link to comment
Share on other sites

  • 0
min-width - самое правильное и красивое решение. Только оно в ИЕ6 не работает... там его придется эмулировать экспрешнами или распоркой (распорка мне лично нравится больше).

По поводу распорки - имеется ввиду однопиксельная картинка? Или можно и просто блок вставить? Сейчас пробую блок, что-то не выходит пока ничего ;)

Блин, не могу понять. Сделал ещё один блок <div id="rasporka"></div>

Задал ему фикс ширину. Уменьшаю размер окна. Когда ширина окна становится меньше ширины распорки, то появляется гориз полоса прокрутки. Но блоки всё равно друг под друга выстраиваются. Что я не так делаю?

Edited by Belovsan
Link to comment
Share on other sites

  • 0
Дай ссылку на страницу с примером.

Да это не страница, а просто позиционированные блоки.

Вот CSS:

html, body {width:100%; height: 100%; margin:0; padding:0;}

#telo {min-width:550px; width:100%; height:150px; background:#00FF33; }

#blok1 {width:100px; height:80px; border: 1px solid #000000; float:left; margin:0 10px;}

#blok2 {width:150px; height:15px; border: 1px solid #000000; float:right; margin:0 10px;}


#blok3 {width:250px; height:100px; border: 1px solid #000000; margin:0 auto; overflow:hidden;}

#rasporka {width:550px; border: 1px solid #000000;}

А это html:

<body>

<div id="telo">


<div id="blok1"></div>

<div id="blok2"></div>

<div id="blok3"></div>

<div id="rasporka"></div>
</div>

</body>

Получается, что при уменьшении ширины есть прокрутка, а блоки всё равно в ИЕ6 один под другого становятся ;).

Edited by Belovsan
Link to comment
Share on other sites

  • 0

Вот самая лучшая кроссбраузерная реализация min-width, которую я встречал. Пользуйтесь, дарю:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ru">

<head>
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />

<style type="text/css">
* {
margin: 0;
padding: 0;
}

html {
font-size: 100.1%;
}

body {
margin: 20px;
font: 62.5% 'Trebuchet MS', Arial, Tahoma, Verdana, sans-serif;
}

.wrapper {
overflow: hidden;
min-width: 950px;
margin: 0 auto;
font-size: 1.4em;
}

.left {
float: left;
width: 178px;
padding: 10px;
background: #abcdef;
border: #123456 1px solid;
}

.right {
margin-left: 210px;
padding: 10px;
background: #abcdef;
border: #123456 1px solid;
}
</style>

<!--[if lt IE 7]>
<style type="text/css">
.ie-hack-table {
width: 100%;
border: 0;
border-spacing: 0;
border-collapse: collapse;
}

.ie-min-width {
overflow: hidden;
width: 950px;
font-size: 0;
line-height: 0;
}
</style>
<![endif]-->
</head>

<body>

<!--[if lt IE 7]>
<table class="ie-hack-table" cellspacing="0"><tr><td><div class="ie-min-width"></div>
<![endif]-->

<div class="wrapper">
<div class="left">
text text text
</div>
<div class="right">
text text text
</div>
</div>

<!--[if lt IE 7]>
</td></tr></table>
<![endif]-->

</body>
</html>

Link to comment
Share on other sites

  • 0
Так естественно, выше же дружище написал, что min-width в ИЕ6 не пашет.

Так понятно, что не пашет. Но я ж поставил распорку. Только она почему-то не работает (. И я не могу понять почему блоки один под другого подлазят при наличии этой распорки и что характерно ещё и полосы прокрутки.

Edited by Belovsan
Link to comment
Share on other sites

  • 0
Хорошо, тогда приведи работающий пример при доктайпе XHTML 1.0 Strict.

(экспрешны, как ты конечно же помнишь, вешают ИЕ6 при этом доктайпе)

Я конечно извиняюсь, а вот Вы говорили о распорке. И я читал, что вроде её как-то ставят. Причём вроде ставят див распорки или картинки прозрачные. Но мне вроде как див показалось наиболее интересное. Как видите, сам пока что криво это сделал. Я походу вообще не правильно всё понял да?

Или лучше всего именно табличная, которую Вы выложили?

Edited by Belovsan
Link to comment
Share on other sites

  • 0

Мой пример таков, что я как правило всегда прописываю минимальную ширину body. Считаю это правильным вариантом. И для ИЕ6 также есть проверенный годами эксрешан.

Link to comment
Share on other sites

  • 0
И для ИЕ6 также есть проверенный годами эксрешан.

Он вешает браузер Internet Explorer 6 при доктайпе XHTML 1.0 Strict! Могу по слогам повторить ;)

Я конечно извиняюсь, а вот Вы говорили о распорке. И я читал, что вроде её как-то ставят. Причём вроде ставят див распорки или картинки прозрачные. Но мне вроде как див показалось наиболее интересное. Как видите, сам пока что криво это сделал. Я походу вообще не правильно всё понял да?

См. сообщение №17

Link to comment
Share on other sites

  • 0
Он вешает браузер Internet Explorer 6 при доктайпе XHTML 1.0 Strict! Могу по слогам повторить ;)

Да ни хрена он не вешает, у меня все работы на нём сделаны и ни одна не повисла, вот тебе пример любой http://psywalker.ru/Portfolio/BestHome/main-page.html

А вот экспрешан, который тут используется для ИЕ6

*html body { width:expression(document.documentElement.clientWidth < 750 ? "750px" : "auto");}

Проверяй :D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy