Этот макет можно сделать с помощью CSS? - PullRequest
4 голосов
/ 30 июля 2009

Возможно ли сделать следующий макет с помощью CSS, но не используя абсолютное / относительное позиционирование?
Мы пытались разгадать эту загадку в течение нескольких дней, но не смогли уместить коробку 10.

Пожалуйста, предоставьте также css + html файлы вашего решения. Таким образом, мы можем обсудить решения.

is it possible?

Ответы [ 6 ]

8 голосов
/ 30 июля 2009

Я только что решил эту проблему, используя этот исходный код .

альтернативный текст http://rabu4g.bay.livefilestore.com/y1p4IhbA7NzQWn7G3wY8dkhOEGawswOMPZQ8MXUotkWtx9ppwfcILzwVb3xXKL19d1J-U5d6G7jaftIHjdcwU8_fTFYyJWtaj6t/css.png

Обновление

Можете ли вы объяснить, как браузер отображает плавающий элемент?

PS. Мои основные приемы - отрицательный левый край и группировка. Это единственный способ решить эту проблему без использования относительной и абсолютной позиции.

2 голосов
/ 30 июля 2009

Вы можете попробовать плавать: оставил все коробки. Затем дайте рамкам 6-9 отрицательный верхний край. И ясно: левая коробка 5.

Не совсем уверен, сработает ли это, но стоит попробовать.

0 голосов
/ 30 июля 2009
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <link rel="stylesheet" type="text/css" href="css/reset.css" />
        <style type="text/css">
            div#container { width: 500px; height: 143px; }
            div#container div { float: left; text-align: center; color: #ffffff; }
            div#t01 { width: 85px;  height: 85px;  background-color: #ee4727; }
            div#t02 { width: 138px; height: 49px;  background-color: #cab6c2; }
            div#t03 { width: 160px; height: 35px;  background-color: #d7446e; }
            div#t04 { width: 113px; height: 27px;  background-color: #2cda54; }
            div#t05 { width: 159px; height: 51px;  background-color: #e1abcf; clear: left; }
            div#t06 { width: 111px; height: 87px;  background-color: #5de1b0; margin-top: -36px; }
            div#t07 { width: 62px;  height: 101px; background-color: #323fbf; margin-top: -50px; }
            div#t08 { width: 120px; height: 77px;  background-color: #234457; margin-top: -50px; }
            div#t09 { width: 44px;  height: 85px;  background-color: #1f5a82; margin-top: -58px; }
            div#t10 { width: 164px; height: 24px;  background-color: #eb2cf4; }
        </style>
        <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
    </head>
    <body>
        <div id="container">
            <div id="t01">T01</div>
            <div id="t02">T02</div>
            <div id="t03">T03</div>
            <div id="t04">T04</div>
            <div id="t05">T05</div>
            <div id="t06">T06</div>
            <div id="t07">T07</div>
            <div id="t08">T08</div>
            <div id="t09">T09</div>
            <div id="t10">T10</div>
        </div>
    </body>
</html>

Работает в IE8, FF2, FF3, Chrome, Safari, Opera. Не работает в IE6 и IE7 по неизвестным мне причинам.

(ширина и поля могут быть немного смещены, изображение было низкого качества, и я только что использовал инструмент волшебной палочки в фотошопе)

0 голосов
/ 30 июля 2009

В качестве отправной точки вы можете использовать Photoshop или другое программное обеспечение для определения регионов и создания HTML + CSS.

Сгенерированный код не очень чистый, но он станет хорошей основой для начала внесения изменений.

0 голосов
/ 30 июля 2009

Мое решение:

<style type="text/css">

div { width:524px; height:142px; }
div div { float:left; color:white; text-align:center;}

#objX01  {  background:#ed4728; width:91px;height:90px; }
#objX02  {  background:#c9b7c3; width:145px;height:50px; }
#objX03  {  background:#d7446d; width:168px;height:37px; }
#objX04  {  background:#2cdb54; width:120px;height:29px; float: right;}
#objX09  {  background:#1e5a82; width:47px;height:90px; float: right;}
#objX08  {  background:#224456; width:128px;height:82px; float: right;}
#objX07  {  background:#3240c0; width:64px;height:105px; float: right;}
#objX06  {  background:#5ee1b1; width:118px;height:92px; float: right;}
#objX05  {  background:#e0abce; width:167px;height:52px; }
#objX10  {  background:#ec2df6; width:175px;height:23px; float: right;}
</style>

<div style="position:relative; margin:0 auto">
  <div id="objX01">01</div>
  <div id="objX02">02</div>
  <div id="objX03">03</div>
  <div id="objX04">04</div>
  <div id="objX09">09</div>
  <div id="objX08">08</div>
  <div id="objX07">07</div>
  <div id="objX06">06</div>
  <div id="objX05">05</div>
  <div id="objX10" style="position:absolute; left:349px; top:119px">10</div>
</div>
0 голосов
/ 30 июля 2009

Все это должно быть выполнимо. Как упоминал Джим Нит, вы можете делать поля 1-9 с плавающей запятой слева, очищая и отрицательные верхние поля.

Для поля 10 вы можете плавать влево так, чтобы он обычно отображался справа от поля 9, но применить отрицательное левое поле, чтобы переместить его рядом с 7 (на основе ширины 8 и 9).

...