Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   3 колонки % px % (https://javascript.ru/forum/xhtml-html-css/23186-3-kolonki-%25-px-%25.html)

Артем125 15.11.2011 15:56

3 колонки % px %
 
Здравствуйте!

Подскажет, пожалуйста, как можно получить такую резиновую верстку: 3 колонки % px %. Примерный эквивалент
<table width="100%"><tr><td width="50%">ляля</td><td width=100><td width="50%">ляля</td></tr></table>


например так не работает, поскольку left-block и right-block блоки набегают на central-block-const при масштабировании браузера


body {
margin: 0px;
padding: 0px;
background-color: #f0f0f0;
}

#main {
border: 1px solid #f00;
width:100;
padding:0px;
margin:0px;
position:relative;
overflow:hidden;
}

#central-block-const {
border: 1px solid #ff0;
width:100px;
margin: 0px auto;
}

#left-block {
border: 1px solid #ff0;
width: 40%;
position:absolute;
top:0px;
left:0px;
margin:0px;
padding: 5px;
}


#right-block {
border: 1px solid #ff0;
width: 40%;
position:absolute;
top:0px;
right:0px;
margin:0px;
padding: 5px;
}

<div id="main">
        <div id = "central-block-const"><BR><BR><BR><BR><BR>
<BR></div>
        <div id="left-block">
left blockleft blockleft blockleft blockleft blockleft block
        </div>

        <div id="right-block">
left blockleft blockleft blockleft blockleft blockleft block
        </div>

</div>





Спасибо!

Kolyaj 15.11.2011 15:58

40% + 40% + 100px будет равно 100% только если вся ширина 500px. При любой другой ширине поведение будет непредсказуемое.

Артем125 15.11.2011 16:00

но ведь как то можно сделать дивами такое

Примерный эквивалент
<table width="100%"><tr><td width="50%">ляля</td><td width=100><td width="50%">ляля</td></tr></table>

ksa 15.11.2011 16:05

Цитата:

Сообщение от Артем125
но ведь как то можно сделать дивами такое

Будет 40% + 100px + все_остальное. И никак иначе... :D

ksa 15.11.2011 16:07

Либо просто 100px в центре, а остальное (лево и право) просто "пополам" от оставшегося...

Артем125 15.11.2011 16:13

Будет 40% + 100px + все_остальное.


может получиться, я понял, ksa - спасибо)!

Артем125 15.11.2011 16:37

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

Aetae 15.11.2011 16:40

Элементарно:
<!DOCTYPE HTML>
<html>
<body>   
<style>
.left{
float:left;
width:50%;
height:100%;
margin-left:-50px;
background-color: #fcc;
}
.right{
float:right;
margin-right:-50px;
width:50%;
height:100%;
background-color: #ccf;
}
.fixer{
margin:0 50px;
height:100%;
background-color: #cfc;
}

.main{
height:200px;
}
</style>
<div class="main">
  <div class="fixer">
    <div class="left">left</div>
    <div class="right">right</div>
    <div class="center">center</div>
  </div>
</div>
</body>
</html>

Kolyaj 15.11.2011 16:43

Цитата:

Сообщение от Артем125
по какому принципу задавать имена селекторам

http://vitaly.harisov.name/article/i...nt-blocks.html

Артем125 15.11.2011 16:48

Здорово! все спасибо!

ksa 15.11.2011 16:50

Цитата:

Сообщение от Aetae
Элементарно

Предложу еще вот такой вариант... :)

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
* {
	margin: 0;
	padding: 0;
}
#left {
	float: left;
	width: 50%;
	background-color: blue;
}
#center {
	float: left;
	width: 100px;
	margin-left: -50px;
	background-color: green;
}
#right {
	margin-left: 50%;
	padding-left: 50px;
	background-color: silver;
}
#left .box {
	margin-right: 50px;
	background-color: red;
}
#right .box {
	background-color: orange;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<div id='left'>
	<div class='box'>left</div>
</div>
<div id='center'>center</div>
<div id='right'>
	<div class='box'>right</div>
</div>
</body>
</html>

Aetae 15.11.2011 16:56

ksa, таких как ваш вариант можно придумать можно много, но достоинство моего - он симметричен.)

ksa 15.11.2011 16:58

Цитата:

Сообщение от Aetae
достоинство моего - он симметричен

Ох, ёёё! :D

Ну не выкидывать же мне свой, раз я его таки сделал... :)

Rootpassword 15.11.2011 19:44

А не подскажут ли мне, как сделать аналог?
Левый блок-100 px. правый- 20%. Как сделать, что бы центральный блок при изменении <div class="fixer"> занимал все свободное место между левым и правым блоком. Грубо говоря, что бы его размер был 80%-100px без JS

Aetae 15.11.2011 20:39

Так тут вообще нет никаких подводных камней.0_o
<!DOCTYPE HTML>
<html>
<body>   
<style>
.left{
float:left;
width:100px;
height:100%;
background-color: #fcc;
}
.right{
float:right;
width:20%;
height:100%;
background-color: #ccf;
}
 
.main{
height:200px;
background-color: #cfc;
}
</style>
<div class="main">
  <div class="left">left</div>
  <div class="right">right</div>
  <div class="center">center</div>
</div>
</body>
</html>

Rootpassword 15.11.2011 21:25

Не сработает, к сожалению. Не все так просто.
если не указывать у центрального дива размеров, он выпихивает два левых-правых дива за пределы основного контейнера.

Aetae 15.11.2011 21:49

0_o Нажмите "Посмотреть".

Rootpassword 16.11.2011 00:37

неправильно выразился. Эта идея в мой код не инкапсулируется.
вот код, к примеру. блок номер 3 у меня "уезжает".
<div><div style="position: relative;	border: 1px #aaaaaa solid;	width: 95%;	height: 30px;	opacity: 0.5;       background:#000000;       margin: 0 auto; ">
<div style="float:left;  background:#555555; width: 100px;	 ">1</div><div  style="background:#777777; " >222</div><div style="float:right; background:#999999; width: 20%;	">3</div></div>

<style type="text/css">
* {margin:0; padding:0}
html,body{height:100%}
</style>

Aetae 16.11.2011 01:35

Фокус-покус:
<style type="text/css">
* {margin:0; padding:0}
html,body{height:100%}
</style>

<div><div style="position:  relative;   border: 1px #aaaaaa solid;  width: 95%; height: 30px;    opacity: 0.5;       background:#000000;       margin: 0 auto; "><div style="float:left;  background:#555555; width: 100px;    ">1</div><div style="float:right; background:#999999; width: 20%; ">3</div><div  style="background:#777777; " >222</div></div>

Pavel M. 16.11.2011 11:16

Всем кто ищет как сделать раскладку
Наберите в поисковике что-то вроде 'css layouts'
и будет куча ссылок на готовые шаблоны

Seva1986 16.11.2011 11:29

Цитата:

Сообщение от Pavel M.
Всем кто ищет как сделать раскладку
Наберите в поисковике что-то вроде 'css layouts'
и будет куча ссылок на готовые шаблоны

И попадёте в рай для говнокодеров :lol:

Я несколько видов раскладок придумал, там где seo учтена (без лишних тегов и контент находиться сверху), ещё один способ прижать футер вниз (под ie6 и 7 я не верстаю. хотя в 7 может и работает) так ввобщем в интернете нет ничего подобного (я не нашёл по крайней мере именно готовый вариант)

Pavel M. 16.11.2011 11:41

Цитата:

Сообщение от Seva1986
И попадёте в рай для говнокодеров

думаете, что все в сети глупее вас ?

Seva1986 16.11.2011 13:10

Цитата:

Сообщение от Pavel M.
думаете, что все в сети глупее вас ?

Не знаю не сравнивал, а к чему вопрос про глупее умнее?

Я в своё время искал вес эти штуки, и не нашёл того до чего потом сам додумался вот и всё...

А по запросу 'css layouts' дейтсвительно куча примеров которые можно сделать лучше и иначе, они с лишними тегами и / или неудовлетворяют SEO вёрстке. поэтому так и говорю...

Seva1986 16.11.2011 13:18

Pavel M.,


Кстати, подскажите пожалуйста, может знаете хороший форум профессиональных верстальщиков?

P.S. это не предлагать.

Pavel M. 16.11.2011 13:25

Цитата:

Сообщение от Seva1986
Кстати, подскажите пожалуйста, может знаете хороший форум профессиональных верстальщиков?

какой форум хороший не знаю не изучал,
если есть проблема, то поиском пользуюсь, обычно нахожу что надо, потом что-то переделываю как мне нужно

Seva1986 16.11.2011 13:27

Цитата:

Сообщение от Pavel M.
какой форум хороший не знаю не изучал,
если есть проблема, то поиском пользуюсь, обычно нахожу что надо, потом что-то переделываю как мне нужно


Ясно спасибо... дал Вам плюсик! :)

Rootpassword 16.11.2011 15:09

Не выходит. Фокус в том, что центральный див не учитывает два крайних дива из-за свойств float:right; float:left; , которые необходимы.
Вот как это обойти?

<style type="text/css">
* {margin:0; padding:0}
html,body{height:100%}
</style>

<div style="position: relative;	border: 1px #aaaaaa solid;	width: 95%;	height: 50px;	opacity: 0.5;      background:#000000;       margin: 0 auto; ">
<div style="float:left;  background:#555555; width: 100px; 	height: 25px;	  position: relative;   ">1</div><div style="float:right; background:#999999; width: 20%; position: relative;	">3</div><div  style="        height: 10px;
        position: relative;
        background: #555;
        padding: 5px;
margin-left: auto;
margin-right: auto; 
 " >222<span style="width:10%"><span></div></div>

Rootpassword 16.11.2011 15:12

и table cell тоже нельзя, иначе внутренности уедут.

ksa 16.11.2011 15:26

Rootpassword, ты бы картинкой чёле показал, что тебе нужно получить в итоге... :)

Rootpassword 16.11.2011 15:39

Типа паравозик с вагонами ))). Вагон посередине- вроде как занимает все оставшееся место между двумя крайними.

ksa 16.11.2011 15:51

Rootpassword, т.е. картинки с размерами не будет? :D

ksa 16.11.2011 15:56

Цитата:

Сообщение от Rootpassword
Левый блок-100 px. правый- 20%. Как сделать, что бы центральный блок при изменении <div class="fixer"> занимал все свободное место между левым и правым блоком. Грубо говоря, что бы его размер был 80%-100px без JS

Как вариант...

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
* {
	margin: 0;
	padding: 0;
}
#right {
	float: right;
	width: 20%;
	background-color: red;
}
#left {
	float: left;
	width: 100px;
	background-color: silver;
}
#center {
	margin-left: 100px;
	margin-right: 20%;
	background-color: orange;
}
</style>
<script type="text/javascript">
</script>
</head>
<body onload='Go(30)'>
<div id='right'>right</div>
<div id='left'>left</div>
<div id='center'>center</div>
</body>
</html>

ksa 16.11.2011 15:59

Цитата:

Сообщение от Rootpassword
Так размеров-то и нету, в том и загвоздка.

Так небывает.
Нельзя сделать то, не знаю что... :D На всё должно быть точное указание.

Rootpassword 16.11.2011 16:03

Благодарю. Все гениальное-просто.

ksa 16.11.2011 16:06

Rootpassword, для новичков есть вот такой "генератор страниц" ;)
http://csstemplater.com/


Часовой пояс GMT +3, время: 04:51.