- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的网页上有Gridster其中包含多个图像的小部件。可以使用 +
按钮添加图像。小部件也可以调整大小。
我在带有 class=imagewrap
的 div 中显示这些图像,并且这些图像具有 images
类。
我的总体目标
我想在调整小部件大小时动态地增加/减少 div 宽度和高度。我还希望保留图像的宽高比。
到目前为止我已经取得/尝试过什么
我目前已将 div width
和 height
声明为 80px
并且我能够将所有图像完美地放入其中并保持其外观比率。
.imagewrap {
display:inline-block;
position:relative;
width: 80px;
height: 80px;
margin-top: 1px;
margin-right: 1px;
margin-left: 1px;
margin-bottom: 1px;
}
.images {
max-width:100%;
max-height:100%;
}
<div class="imagewrap"><img class="images" src='+ images[j] +' title="' + titles[j]+ '"><input type="button" class="removediv" value="X" /></div></div>
最佳答案
添加了 Flex CSS 来调整内容。然后添加最小宽度和高度。然后添加'img-responsive'
类别为 <img class='images'>
使用 JQuery addClass()
.让我知道这是否适合你
var gridster;
//Initializing Gridster
gridster = $(".gridster ul").gridster({
widget_base_dimensions: [100, 100],
widget_margins: [5, 5],
helper: 'clone',
serialize_params: function($w, wgd) {
return {
images: $w.find('.imagenames').val().trim(),
title: $w.find('.hoverinformation').val().trim(),
col: wgd.col,
row: wgd.row,
size_x: wgd.size_x,
size_y: wgd.size_y
}
},
resize: {
enabled: true
}
}).data('gridster');
//JSON which I get from backend
var json = [{
"images": "https://png.icons8.com/metro/2x/boy.png,https://png.icons8.com/metro/2x/boy.png,https://png.icons8.com/metro/2x/chapel.png",
"title": "AB,DE,EF",
"infoonwidgets": "Some Info",
"col": 1,
"row": 1,
"size_y": 2,
"size_x": 2
}
];
//Loop which runs over JSON to generate <li> elements in HTML
for (var index = 0; index < json.length; index++) {
var images = json[index].images.split(',');
var titles = json[index].title.split(',');
var imageOutput = "";
for (var j = 0; j < images.length; j++) {
imageOutput += '<div class="imagewrap"><img class="images" src=' + images[j] + ' title="' + titles[j] + '"> <input type="button" class="removediv" value="X" /></div></div>';
}
gridster.add_widget('<li class="new" ><button class="addmorebrands" style="float: left;">+</button><button class="delete-widget-button" style="float: right;">-</button><textarea class="info-on-widgets">' + json[index].infoonwidgets + '</textarea><div class="content"><div class="row">' + imageOutput + '</div></div><textarea class="imagenames">' + json[index].images + '</textarea><textarea class="hoverinformation">' + json[index].title + '</textarea></li>', json[index].size_x, json[index].size_y, json[index].col, json[index].row);
}
function trimChar(string, charToRemove) {
while (string.charAt(0) == charToRemove) {
string = string.substring(1);
}
while (string.charAt(string.length - 1) == charToRemove) {
string = string.substring(0, string.length - 1);
}
return string;
}
function updateTextarea(imageNames, imageSrc) {
var imageNamesValue = imageNames.val();
imageNamesValue = imageNamesValue.replace(imageSrc, '');
imageNamesValue = trimChar(imageNamesValue, ',');
imageNamesValue = imageNamesValue.trim();
imageNames.val(imageNamesValue.replace(/,,/g, ","));
}
//Function to delete an image from widget
$(document).on('click', '.removediv', function() {
var imageDelete = $(this).closest('div.imagewrap');
var imgTag = imageDelete.find('img');
var imageTitle = imgTag.attr('title');
var imageSrc = imgTag.attr('src');
var textareaName = $(this).closest('li').find('.imagenames');
var textareaTitle = $(this).closest('li').find('.hoverinformation');
updateTextarea(textareaName, imageSrc);
updateTextarea(textareaTitle, imageTitle);
//Here I want that will remove the content from both the textareas
imageDelete.remove();
});
//Function to delete a widget
$(document).on("click", ".delete-widget-button", function() {
var gridster = $(".gridster ul").gridster().data('gridster');
gridster.remove_widget($(this).parent());
});
//Adding Images from Modal
var parentLI;
var selectedImageSRC = "";
$(document).on("click", ".addmorebrands", function() {
parentLI = $(this).closest('li');
$('#exampleModalCenter').modal('show');
});
$('#exampleModalCenter img').click(function() {
parentdiv = $(this).closest('div.outerdiv');
if (parentdiv.hasClass('preselect')) {
parentdiv.removeClass('preselect');
selectedImageSRC = selectedImageSRC.replace($(this).attr('src'), "");
selectedImageSRC = trimChar(selectedImageSRC, ',');
selectedImageSRC = (selectedImageSRC.replace(/,,/g, ","));
console.log("In remove");
console.log(selectedImageSRC);
console.log("Parent Div in remove");
console.log(parentdiv);
} else {
parentdiv.addClass('preselect');
if (selectedImageSRC === '') {
selectedImageSRC += $(this).attr('src');
} else {
selectedImageSRC += ',' + $(this).attr('src');
}
console.log("In add");
console.log(selectedImageSRC);
console.log("Parent Div in Add");
console.log(parentdiv);
}
});
$('#add-image').click(function() {
console.log("In add image");
console.log(selectedImageSRC);
var multipleImageSRC = "";
multipleImageSRC = selectedImageSRC.split(',');
console.log("Splitted Images");
console.log(multipleImageSRC);
var multipleImages = "";
for (var j = 0; j < multipleImageSRC.length; j++) {
multipleImages += '<div class="imagewrap"><img class="images" src="' + multipleImageSRC[j] + '" title="Manual Addition"> <input type="button" class="removediv" value="X" /></div>'
console.log("Multiple Images SRC");
console.log(multipleImages);
}
parentLI.append(multipleImages);
var imageNameValue = parentLI.children('.imagenames').val();
var imageTitleValue = parentLI.children('.hoverinformation').val();
//Loop for Updating Textarea with ImageNames
var imageNameInTextarea = "";
for (var j = 0; j < multipleImageSRC.length; j++) {
imageNameInTextarea += multipleImageSRC[j].replace("/static/images/brands/", "") + ",";
}
//To remove last ',' after the names
imageNameInTextarea = trimChar(imageNameInTextarea, ',');
console.log(imageNameInTextarea);
//Loop calculating lenght of number of images added and correspondingly putting "Manual Addition"
manualAddition = "";
for (var j = 0; j < multipleImageSRC.length; j++) {
manualAddition += "Manual Addition" + ",";
}
//To remove last ',' after the names
manualAddition = trimChar(manualAddition, ',');
console.log("Manual Textarea");
console.log(manualAddition);
if (imageNameValue === '') {
parentLI.children('.imagenames').val(imageNameInTextarea);
} else {
parentLI.children('.imagenames').val(imageNameValue + ',' + imageNameInTextarea);
}
if (imageTitleValue === '') {
parentLI.children('.hoverinformation').val(manualAddition);
} else {
parentLI.children('.hoverinformation').val(imageTitleValue + ',' + manualAddition);
}
$('#exampleModalCenter').modal('hide');
removeclasses()
});
function removeclasses() {
//Removing preselect class from all the div's when close button or add brand button is clicked.
a = $('div .outerdiv').removeClass('preselect');
selectedImageSRC = "";
console.log(a);
}
$('document').ready(function() {
$('img[class*="images"]').addClass('img-responsive');
});
.info-on-widgets {
width: 90%;
}
.removediv {
position: absolute;
right: 1%;
top: 1%;
}
.preselect {
background: lightgreen
}
.modal-body {
width: 100%;
position: relative;
text-align: center;
}
.outerdiv {
height: 30%;
width: 30%;
display: inline-block;
}
.imagenames,
.hoverinformation,
.widget-color {
display: none;
}
/* CSS for increasing image aspect ratio when resized */
.content {}
.row {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
box-orient: horizontal;
flex-direction: row;
-webkit-box-pack: center;
-moz-box-pack: center;
box-pack: center;
justify-content: center;
-webkit-box-align: center;
-moz-box-align: center;
box-align: center;
align-items: center;
}
.imagewrap {
-webkit-box-flex: 1;
-moz-box-flex: 1;
box-flex: 1;
-webkit-flex: 1 1 auto;
flex: 1 1 auto;
padding: 2%;
margin: 1%;
text-align: center;
}
.images {
max-width: 100%;
margin: 0px auto;
text-align: center;
min-width: 100%;
height: auto;
}
<link href="https://dsmorse.github.io/gridster.js/demos/assets/css/demo.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.gridster/0.5.6/jquery.gridster.css" rel="stylesheet"/>
<div class="gridster">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.gridster/0.5.6/jquery.gridster.min.js"></script>
<!-- <li> from JSON are placed here -->
<ul>
</ul>
</div>
<!-- Declaration of Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Add Icons</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close" onclick="removeclasses()">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<!-- Images which I retrieve from backend for now they are
hardcoded paths and actually are dynamic(No fixed number)-->
<div class="outerdiv"><img src="https://cdnd.icons8.com/wp-content/uploads/2015/07/Run-Command-100.png"></div>
<div class="outerdiv"><img src="https://png.icons8.com/metro/2x/chapel.png"></div>
<div class="outerdiv"><img src="https://png.icons8.com/metro/2x/boy.png"></div>
<div class="outerdiv"><img src="https://png.icons8.com/metro/2x/wacom-tablet.png"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="removeclasses()">Close</button>
<button id="add-image" type="button" class="btn btn-primary">Add Image</button>
</div>
</div>
</div>
</div>
阅读更多关于 Flex CSS(又名:Flexbox CSS)的信息:Typical use cases of Flexbox (https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Typical_Use_Cases_of_Flexbox)
关于javascript - 动态增加div的宽度和高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49637948/
我有下面的图表,它填充了显示器的宽度和高度。高度始终只比屏幕大一点,因此会出现滚动条以显示底部 20 像素左右。 有没有办法让 Kendo UI 显示 100%,而不是 105% 的高度? 在线示例:
这个问题在这里已经有了答案: Why doesn't height: 100% work to expand divs to the screen height? (12 个答案) 关闭 9 年前
此页面 ( http://purcraft.com/madeinla/) 有问题,我正在尝试使用 iframe 元素显示此页面的内容:( http://purcraft.com/madeinla/ho
我在一个父 div 中有 2 个子 div。 Child1 是标题,Child2 是正文。我希望将 Child 2 的高度设置为 Parent - Child1 的高度。 Child2 有内容,所以它
我正在尝试用图像填充窗口。我正在使用 CSS 来尝试解决这个问题,但我想知道是否有一种方法可以最大化图像的宽度/高度,直到所有空白区域都被填满,但又不会破坏质量。 .rel-img-co
这个问题在这里已经有了答案: How to make a div 100% height of the browser window (41 个回答) 关闭 8 年前。
这可能是一个新手问题,但是是否可以将 Sprite 图标添加到带有文本的标签中? 例如: labeltext .icon { width: 30px height: 30px;
我有 3 个 div,分别是 header、content 和 footer。页眉和页脚具有固定的高度,并且它们被设计为 float 在顶部和底部。我想要使用 jquery 自动计算中间的 con
我有一个外部 div,其指定的宽度/高度(以毫米为单位)。 (mm只是赋值,不用于渲染)。 里面有另一个 div,其实际宽度/高度(以 px 为单位)。 两个 div 可以具有不同的比例。 我想要做的
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我正在为一个非常简单的画廊 webapp 进行布局排序,但是当我使用 HTML5 文档类型声明时,我的一些 div(100%)的高度会立即缩小,我不能似乎使用 CSS 将它们丰满起来。 我的 HTML
我想更改 UISearchBar。文本字段的高度和宽度。我的问题是如何更改 iphone 中 UISearchBar 中的 UiSearchbar 高度、宽度、颜色 和 Uitextfield 高度?
我想要两个宽度和高度均为 100% 的 div。我知道子 div 不会工作,因为父 div 没有特定的高度,但有没有办法解决这个问题? HTML: CSS: body
我有几个带有“priceText”类的 div,我试图实现如果 div.priceText 高度小于 100px,则隐藏 this div 中的图像。 我无法让它工作。我已成功隐藏所有 .priceT
我正在尝试从 Image 列中列出的图像中获取实际图像尺寸,并将其显示在 Image Size 列中。 我遇到的问题是,我只能获取第一张图片的大小,该图片会添加到 Image Size 列的每个单元格
我正在使用一个插件,它要求我在加载图像后获取图像的宽度和高度,而不管图像的尺寸是如何确定的。
我有一个示例 pdf(已附),它包括一个文本对象和一个高度几乎相同的矩形对象。然后我使用 itextrup 检查了 pdf 的内容,如下所示: 1 1 1 RG 1 1 1 rg 0.12 0 0 0
我是 WPF 新手。我试图解决的一个问题是如何在运行时获得正确的高度。 在我的应用程序中,我将用户控件动态添加到代码隐藏中的 Stackpanel。 Usercontrol 包含一些 Texblock
在自定义 WPF 控件中,我想将控件的宽度设置为高度的函数。例如:Width = Height/3 * x; 实现此目的的最佳方法是什么,以便控件正确且流畅地调整大小(和初始大小)? 最佳答案 您可以
好吧,我本以为这是一个简单的问题,但显然它让我感到困惑。 当我尝试设置 RibbonComboBox 的高度时,它不会移动它的实际大小,而是移动它周围的框。 这是我的 XAML:
我是一名优秀的程序员,十分优秀!