• 关于

    对字体的简单设置

    的搜索结果

回答

通过对boostrap.css源码简单的阅读,了解Boostrap的核心设计理念。 为了增强浏览的兼容性,Boostrap内整合了Normalize.css(链接)这个文件的重要内容,从该版本boostrap.css的第6行一直到262行都主要是Normalize.css的内容,这在boostrap.css文件的第6行的代码注释上有明确标明。 从代码263到1067行都是Boostrap对“Glyphicon Halflings”这个字体图标的使用,这个一个收费的字体图标,在Boostrap的官网上的“组件”导航内第一节“Glyphicons 字体图标”有描述。若你不喜欢这个字体图标,想使用其它字体图标(如:Font Awesome、Iconfont、Iconmoon、Ionicons等),可以将这部分的代码删除掉,或者是在以后对Boostrap足够熟悉之后去进行Boostrap的自定义构建,使boostrap.css文件最小化。 从1068行开始到1614是Bootstrap的一些自己的样式初始化以及一些自定义的Class样式类进行设置(包含了部分样式的响应式设置)的部分。 从1615行一直到2250行为止都是Boostrap被很多人“误会”为核心功能的“栅格化布局”部分。不过对于单纯对行布局的CSS代码来讲,600多行的代码也算是比较重视了。 而后续的代码都是对表格、表单、按钮、图片,以及自己的一些组件如下拉菜单、按钮组、输入框组、导航等样式类的设置了,另外还包含对这些样式类的响应式设计。 需要注意的是,对于Boostrap的组件部分来讲,很多样式类都是用了Glyphicons字体图标,若没有引用字体图标,某些组件的样式可能无法正常显示。

问问小秘 2020-04-29 16:14:35 0 浏览量 回答数 0

回答

query_cache_size  在 5.6 版本貌似无效######回复 @王铁锤 : 5.6.14 设置这个参数 提示错误######回复 @chinatop : 求验证结果 ######版本差异没注意,都可以设置的,可以查查文档相应属性,或者百度一下,######简单有效 不错 ######感觉缓存不开白不开,没有副作用######@逝水fox 反正是不开白不开######@逝水fox 不变的放静态缓存,变化的放二级缓存,hibernate说的######缓存失效或者清理缓存是会造成服务挂起,所以查询缓存不宜过大,经常变化的应该不让他进缓存######仁兄所言极是######数据库保持连接也要开销,网站用缓存插件不是更好么?######缓存不开白不开######mark######这字体颜色 太霸道了############不错,保留了 ###### 不错谢谢你的共享 ######设置了,不过发现没有命中过。######不会吧,查询下都开启了没,###### 表上有任何ddl或者dml,整个表相关的所有数据都将从qc里失效掉. 这玩儿一般线上环境基本是个负担,建议不要用,除非整个库只读. ######算了,第一次是对的~~######次奥,说错了,事倍功半,这么多成语~~######只读还需要mysql作甚~~,查询比较频繁可以使用这种简单快捷的做法。事半功倍。

kun坤 2020-06-11 10:46:08 0 浏览量 回答数 0

问题

请教JQ中attr()和css()的区别?我老是分不清楚

杨冬芳 2019-12-01 19:47:50 1298 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

ios9字体、阿里云oss、个人企业域名备案等常见问题和答案汇总

问问小秘 2020-01-02 10:31:59 36 浏览量 回答数 1

问题

移动应用应具备的13个特性

chaipanpan 2019-12-01 21:02:53 7638 浏览量 回答数 0

回答

XML 配置首先,先写一套UI界面出来,上方左边是两个 TextView,右边是两个 CheckBox,下方是一个 RecyclerView ,实现很简单,这里我不贴代码了。 接着,在 styles 文件中添加两个 Theme,一个是日间主题,一个是夜间主题。它们的属性都是一样的,唯一区别在于颜色效果不同。 <!--白天主题--> <style name="DayTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="clockBackground">@android:color/white</item> <item name="clockTextColor">@android:color/black</item> </style> <!--夜间主题--> <style name="NightTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/color3F3F3F</item> <item name="colorPrimaryDark">@color/color3A3A3A</item> <item name="colorAccent">@color/color868686</item> <item name="clockBackground">@color/color3F3F3F</item> <item name="clockTextColor">@color/color8A9599</item> </style> 需要注意的是,上面的 clockTextColor 和 clockBackground 是我自定义的 color 类型属性<?xml version="1.0" encoding="utf-8"?> <attr name="clockBackground" format="color" /> <attr name="clockTextColor" format="color" /> 然后再到所有需要实现夜间模式功能的 xml 布局文件中,加入类似下面设置,比如我在 RecyclerView 的 Item 布局文件中做了如下设置 稍稍解释下其作用,如 TextView 里的 android:textColor="?attr/clockTextColor" 是让其字体颜色跟随所设置的 Theme。到这里,xml 需要做的配置全部完成,接下来是 Java 代码实现了。Java 代码实现大家可以先看下面的实现代码,看不懂的童鞋可以边结合我代码下方实现思路解说。 package com.clock.study.activity; import ... /** 夜间模式实现方案* @author Clock @since 2016-08-11*/ public class DayNightActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { private final static String TAG = DayNightActivity.class.getSimpleName(); /**用于将主题设置保存到SharePreferences的工具类**/ private DayNightHelper mDayNightHelper; private RecyclerView mRecyclerView; private LinearLayout mHeaderLayout; private List<RelativeLayout> mLayoutList; private List<TextView> mTextViewList; private List<CheckBox> mCheckBoxList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE); initData(); initTheme(); setContentView(R.layout.activity_day_night); initView(); } private void initView() { mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(layoutManager); mRecyclerView.setAdapter(new SimpleAuthorAdapter()); mHeaderLayout = (LinearLayout) findViewById(R.id.header_layout); mLayoutList = new ArrayList<>(); mLayoutList.add((RelativeLayout) findViewById(R.id.jianshu_layout)); mLayoutList.add((RelativeLayout) findViewById(R.id.zhihu_layout)); mTextViewList = new ArrayList<>(); mTextViewList.add((TextView) findViewById(R.id.tv_jianshu)); mTextViewList.add((TextView) findViewById(R.id.tv_zhihu)); mCheckBoxList = new ArrayList<>(); CheckBox ckbJianshu = (CheckBox) findViewById(R.id.ckb_jianshu); ckbJianshu.setOnCheckedChangeListener(this); mCheckBoxList.add(ckbJianshu); CheckBox ckbZhihu = (CheckBox) findViewById(R.id.ckb_zhihu); ckbZhihu.setOnCheckedChangeListener(this); mCheckBoxList.add(ckbZhihu); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { int viewId = buttonView.getId(); if (viewId == R.id.ckb_jianshu) { changeThemeByJianShu(); } else if (viewId == R.id.ckb_zhihu) { changeThemeByZhiHu(); } } private void initData() { mDayNightHelper = new DayNightHelper(this); } private void initTheme() { if (mDayNightHelper.isDay()) { setTheme(R.style.DayTheme); } else { setTheme(R.style.NightTheme); } } /** * 切换主题设置 */ private void toggleThemeSetting() { if (mDayNightHelper.isDay()) { mDayNightHelper.setMode(DayNight.NIGHT); setTheme(R.style.NightTheme); } else { mDayNightHelper.setMode(DayNight.DAY); setTheme(R.style.DayTheme); } } /** * 使用简书的实现套路来切换夜间主题 */ private void changeThemeByJianShu() { toggleThemeSetting(); refreshUI(); } /** * 使用知乎的实现套路来切换夜间主题 */ private void changeThemeByZhiHu() { showAnimation(); toggleThemeSetting(); refreshUI(); } /** * 刷新UI界面 */ private void refreshUI() { TypedValue background = new TypedValue();//背景色 TypedValue textColor = new TypedValue();//字体颜色 Resources.Theme theme = getTheme(); theme.resolveAttribute(R.attr.clockBackground, background, true); theme.resolveAttribute(R.attr.clockTextColor, textColor, true); mHeaderLayout.setBackgroundResource(background.resourceId); for (RelativeLayout layout : mLayoutList) { layout.setBackgroundResource(background.resourceId); } for (CheckBox checkBox : mCheckBoxList) { checkBox.setBackgroundResource(background.resourceId); } for (TextView textView : mTextViewList) { textView.setBackgroundResource(background.resourceId); } Resources resources = getResources(); for (TextView textView : mTextViewList) { textView.setTextColor(resources.getColor(textColor.resourceId)); } int childCount = mRecyclerView.getChildCount(); for (int childIndex = 0; childIndex < childCount; childIndex++) { ViewGroup childView = (ViewGroup) mRecyclerView.getChildAt(childIndex); childView.setBackgroundResource(background.resourceId); View infoLayout = childView.findViewById(R.id.info_layout); infoLayout.setBackgroundResource(background.resourceId); TextView nickName = (TextView) childView.findViewById(R.id.tv_nickname); nickName.setBackgroundResource(background.resourceId); nickName.setTextColor(resources.getColor(textColor.resourceId)); TextView motto = (TextView) childView.findViewById(R.id.tv_motto); motto.setBackgroundResource(background.resourceId); motto.setTextColor(resources.getColor(textColor.resourceId)); } //让 RecyclerView 缓存在 Pool 中的 Item 失效 //那么,如果是ListView,要怎么做呢?这里的思路是通过反射拿到 AbsListView 类中的 RecycleBin 对象,然后同样再用反射去调用 clear 方法 Class<RecyclerView> recyclerViewClass = RecyclerView.class; try { Field declaredField = recyclerViewClass.getDeclaredField("mRecycler"); declaredField.setAccessible(true); Method declaredMethod = Class.forName(RecyclerView.Recycler.class.getName()).getDeclaredMethod("clear", (Class<?>[]) new Class[0]); declaredMethod.setAccessible(true); declaredMethod.invoke(declaredField.get(mRecyclerView), new Object[0]); RecyclerView.RecycledViewPool recycledViewPool = mRecyclerView.getRecycledViewPool(); recycledViewPool.clear(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } refreshStatusBar(); } /** * 刷新 StatusBar */ private void refreshStatusBar() { if (Build.VERSION.SDK_INT >= 21) { TypedValue typedValue = new TypedValue(); Resources.Theme theme = getTheme(); theme.resolveAttribute(R.attr.colorPrimary, typedValue, true); getWindow().setStatusBarColor(getResources().getColor(typedValue.resourceId)); } } /** * 展示一个切换动画 */ private void showAnimation() { final View decorView = getWindow().getDecorView(); Bitmap cacheBitmap = getCacheBitmapFromView(decorView); if (decorView instanceof ViewGroup && cacheBitmap != null) { final View view = new View(this); view.setBackgroundDrawable(new BitmapDrawable(getResources(), cacheBitmap)); ViewGroup.LayoutParams layoutParam = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); ((ViewGroup) decorView).addView(view, layoutParam); ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f); objectAnimator.setDuration(300); objectAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); ((ViewGroup) decorView).removeView(view); } }); objectAnimator.start(); } } /** * 获取一个 View 的缓存视图 * * @param view * @return */ private Bitmap getCacheBitmapFromView(View view) { final boolean drawingCacheEnabled = true; view.setDrawingCacheEnabled(drawingCacheEnabled); view.buildDrawingCache(drawingCacheEnabled); final Bitmap drawingCache = view.getDrawingCache(); Bitmap bitmap; if (drawingCache != null) { bitmap = Bitmap.createBitmap(drawingCache); view.setDrawingCacheEnabled(false); } else { bitmap = null; } return bitmap; } } 实现思路和代码解说: DayNightHelper 类是用于保存夜间模式设置到 SharePreferences 的工具类,在 initData 函数中被初始化,其他的 View 和 Layout 都是界面布局,在 initView 函数中被初始化;在 Activity 的 onCreate 函数调用 setContentView 之前,需要先去 setTheme,因为当 View 创建成功后 ,再去 setTheme 是无法对 View 的 UI 效果产生影响的;onCheckedChanged 用于监听日间模式和夜间模式的切换操作; refreshUI 是本实现的关键函数,起着切换效果的作用,通过 TypedValue 和 Theme.resolveAttribute 在代码中获取 Theme 中设置的颜色,来重新设置控件的背景色或者字体颜色等等。需要特别注意的是 RecyclerView 和 ListView 这种比较特殊的控件处理方式,代码注释中已经说明,大家可以看代码中注释;refreshStatusBar 用于刷新顶部通知栏位置的颜色; showAnimation 和 getCacheBitmapFromView 同样是本实现的关键函数,getCacheBitmapFromView 用于将 View 中的内容转换成 Bitmap(类似于截屏操作那样),showAnimation 是用于展示一个渐隐效果的属性动画,这个属性作用在哪个对象上呢?是一个 View ,一个在代码中动态填充到 DecorView 中的 View(不知道 DecorView 的童鞋得回去看看 Android Window 相关的知识)。知乎之所以在夜间模式切换过程中会有渐隐效果,是因为在切换前进行了截屏,同时将截屏拿到的 Bitmap 设置到动态填充到 DecorView 中的 View 上,并对这个 View 执行一个渐隐的属性动画,所以使得我们能够看到一个漂亮的渐隐过渡的动画效果。而且在动画结束的时候再把这个动态添加的 View 给 remove 了,避免了 Bitmap 造成内存飙升问题。 作者:D_clock爱吃葱花链接:https://www.jianshu.com/p/3b55e84742e5

auto_answer 2019-12-02 01:49:54 0 浏览量 回答数 0

回答

前言 前两天在 echarts 上寻找灵感的时候,看到了很多有关地图类似的例子,地图定位等等,但是好像就是没有地铁线路图,就自己花了一些时间捣鼓出来了这个交互式地铁线路图的 Demo,地铁线路上的点是在网上随便下载了一个,这篇文章记录自己的一些收获(毕竟我还是个菜鸟)以及代码的实现,希望能够帮到一些朋友。当然,如果有什么意见的可以直接跟我说,大家一起交流才会进步。 效果图 地图稍微内容有点多,要全部展示,字显得有点小了,但是没关系,可以按照需求放大缩小,字体和绘制的内容并不会失真,毕竟都是用矢量绘制的~ 界面生成 底层的 div 是通过 ht.graph.GraphView 组件生成的,然后就可以利用 HT for Web 提供好的方法,调用 canvas 画笔随便绘制就好,先来看看怎么生成底层 div: var dm = new ht.DataModel();//数据容器 var gv = new ht.graph.GraphView(dm);//拓扑组件 gv.addToDOM();//将拓扑图组件添加进body中 addToDOM 函数声明如下: addToDOM = function(){ var self = this, view = self.getView(), style = view.style; document.body.appendChild(view); //将组件底层div添加到body中 style.left = '0';//默认组件是绝对定位,所以要设置位置 style.right = '0'; style.top = '0'; style.bottom = '0'; window.addEventListener('resize', function () { self.iv(); }, false); //窗口变化事件 } 现在我就可以在这个 div 上乱涂乱画了~首先我获取下载好的地铁线路图上的点,我将它们放在 subway.js 中,这个 js 文件全部都是下载的内容,我没有做其他的改动,主要是将这些点根据线路来分分配添加到数组中,比如: mark_Point13 = [];//线路 数组内包含线路的起点和终点坐标以及这条线路的名称 t_Point13 = [];//换成站点 数组内包含线路中的换乘站点坐标以及换成站点名称 n_Point13 = [];//小站点 数组内包含线路中的小站点坐标以及小站点名称 mark_Point13.push({ name: '十三号线', value: [113.4973,23.1095]}); mark_Point13.push({ name: '十三号线', value: [113.4155,23.1080]}); t_Point13.push({ name: '鱼珠', value: [113.41548,23.10547]}); n_Point13.push({ name: '裕丰围', value: [113.41548,23.10004]}); 接下来来描绘地铁线路,我声明了一个数组 lineNum,用来装 js 中所有的地铁线路的编号,以及一个 color 数组,用来装所有的地铁线的颜色,这些颜色的 index 与 lineNum 中地铁线编号的 index 是一一对应的: var lineNum = ['1', '2', '3', '30', '4', '5', '6', '7', '8', '9', '13', '14', '32', '18', '21', '22', '60', '68']; var color = ['#f1cd44', '#0060a1', '#ed9b4f', '#ed9b4f', '#007e3a', '#cb0447', '#7a1a57', '#18472c', '#008193', '#83c39e', '#8a8c29', '#82352b', '#82352b', '#09a1e0', '#8a8c29', '#82352b', '#b6d300', '#09a1e0']; 接着遍历 lineNum,将 lineNum 中的元素和颜色传到 createLine 函数中,根据这两个参数来绘制地铁线路以及配色,毕竟 js 文件中的命名方式也是有规律的,哪一条线路,则命名后面一定会加上对应的数字,所以我们只需要将字符串与这个编号结合即可获得 js 中对应的数组了: let lineName = 'Line' + num; let line = window[lineName]; createLine 的定义也非常简单,我的代码设置了不少的样式,所以看起来有点多。创建一个 ht.Polyline 管线,我们可以通过 polyline.addPoint() 函数向这个变量中添加具体的点,通过 setSegments 可以设置点的连接方式。 function createLine(num, color) {//绘制地图线 var polyline = new ht.Polyline();//多边形 管线 polyline.setTag(num);//设置节点tag标签,作为唯一标示 if(num === '68') polyline.setToolTip('A P M');//设置提示信息 else if(num === '60') polyline.setToolTip('G F'); else polyline.setToolTip('Line' + num); if(color) { polyline.s({//s 为 setStyle 的简写,设置样式 'shape.border.width': 0.4,//设置多边形的边框宽度 'shape.border.color': color,//设置多边形的边框颜色 'select.width': 0.2,//设置选中节点的边框宽度 'select.color': color//设置选中节点的边框颜色 }); } let lineName = 'Line' + num; let line = window[lineName]; for(let i = 0; i < line.length; i++) { for(let j = 0; j < line[i].coords.length; j++) { polyline.addPoint({x: line[i].coords[j][0]*300, y: -line[i].coords[j][1]*300}); if(num === '68'){//APM线(有两条,但是点是在同一个数组中的) if(i === 0 && j === 0) { polyline.setSegments([1]); } else if(i === 1 && j === 0) { polyline.getSegments().push(1); } else { polyline.getSegments().push(2); } } } } polyline.setLayer('0');//将线设置在下层,点设置在上层“top” dm.add(polyline);//将管线添加进数据容器中储存,不然这个管线属于“游离”状态,是不会显示在拓扑图上的 return polyline; } 上面代码中添加地铁线上的点有分为几种情况,是因为 js 中设置线的时候 Line68 有一个“跳跃”点的现象,所以我们必须“跳跃”过去,篇幅有限 Line68 数组具体的声明自行看 subway.js。 这里说明一点,如果用的是 addPoint 函数,不设置 segments 时,默认将添加进的点用直线连接,segments 的定义如下: 1: moveTo,占用 1 个点信息,代表一个新路径的起点 2: lineTo,占用 1 个点信息,代表从上次最后点连接到该点 3: quadraticCurveTo,占用 2 个点信息,第一个点作为曲线控制点,第二个点作为曲线结束点 4: bezierCurveTo,占用 3 个点信息,第一和第二个点作为曲线控制点,第三个点作为曲线结束点 5: closePath,不占用点信息,代表本次路径绘制结束,并闭合到路径的起始点 所以我们要做“跳跃”的行为设置 segments 为 1 即可。 最后绘制这些地铁线上的点,这个部分 subway.js 中也分离出来了,命名以“mark_Point”、“t_Point”以及“n_Point”开头,我在前面 js 的展示部分有对这些数组进行解释,大家动动中指划上去看看。 我们在这些点的位置添加 ht.Node 节点,当节点一添加进 dm 数据容器中时,就会在拓扑图上显示,当然,前提是这个拓扑图组件 gv 设置的数据容器是这个 dm。篇幅有限,添加地铁线上的点的代码部分我只展示添加“换乘站点”的点: var tName = 't_Point' + num; var tP = window[tName];//大站点 if(tP) {//有些线路没有“换乘站点” for(let i = 0; i < tP.length; i++) { let node = createNode(tP[i].name, tP[i].value, color[index]);//在获取的线路上的点的坐标位置添加节点 node.s({//设置节点的样式style 'label.scale': 0.05,//文本缩放,可以避免浏览器限制的最小字号问题 'label.font': 'bold 12px arial, sans-serif'//设置文本的font }); node.setSize(0.6, 0.6);//设置节点大小。由于js中每个点之间的偏移量太小,所以我不得不把节点设置小一些 node.setImage('images/旋转箭头.json');//设置节点的图片 node.a('alarmColor1', 'rgb(150, 150, 150)');//attr属性,可以在这里面设置任何的东西,alarmColor1是在上面设置的image的json中绑定的属性,具体参看 HT for Web 矢量手册(http://www.hightopo.com/guide/guide/core/vector/ht-vector-guide.html#ref_binding) node.a('alarmColor2', 'rgb(150, 150, 150)');//同上 node.a('tpNode', true);//这个属性设置只是为了用来区分“换乘站点”和“小站点”的,后面会用上 } }

问问小秘 2020-01-07 11:16:33 0 浏览量 回答数 0

问题

如何从用户的角度来测试Web应用软件

技术小菜鸟 2019-12-01 21:41:25 3176 浏览量 回答数 1

问题

【精品问答】前端开发必懂之CSS技术八十问

茶什i 2019-12-01 22:00:52 1642 浏览量 回答数 1

问题

Web测试方法

技术小菜鸟 2019-12-01 21:41:32 7022 浏览量 回答数 1

问题

MathML 介绍:报错

kun坤 2020-06-08 11:09:17 2 浏览量 回答数 1

问题

价值888元的wordpress性能优化方案 全面提升wordpress打开速度

元芳啊 2019-12-01 21:46:14 36113 浏览量 回答数 12

回答

"主题前提 多语言站点包含三个不同方面: 界面翻译 内容 网址路由 尽管它们都以不同的方式互连,但是从CMS的角度来看,它们是使用不同的UI元素进行管理的,并且存储方式也不同。您似乎对自己的实现和对前两个的理解充满信心。问题是关于后一个方面的问题:“ URL转换?我们应该这样做吗?应该以什么方式进行?” URL可以由什么组成? 一个非常重要的事情是,不要对IDN感兴趣。取而代之的是支持音译(也:转录和罗马化)。乍一看,IDN似乎是国际URL的可行选择,但实际上,它不能按广告宣传工作,原因有两个: 某些浏览器会将非ASCII字符(例如'ч'或)'ž'转换为'%D1%87'和'%C5%BE' 如果用户具有自定义主题,则主题的字体很可能没有这些字母的符号 实际上,几年前,我在一个基于Yii的项目(可怕的框架,恕我直言)中尝试了IDN方法。在抓取该解决方案之前,我遇到了上述两个问题。另外,我怀疑这可能是攻击媒介。 可用选项...如我所见。 基本上,您有两个选择,可以抽象为: http://site.tld/[:query]:[:query]决定语言和内容选择的地方 http://site.tld/[:language]/[:query]:[:language]URL的一部分定义语言的选择,[:query]仅用于标识内容 查询是Α和Ω.. 假设您选择http://site.tld/[:query]。 在这种情况下,您有一种主要的语言来源:[:query]段的内容;以及另外两个来源: $_COOKIE['lang']该特定浏览器的价值 HTTP Accept-Language (1),(2)标头中的语言列表 首先,您需要将查询与定义的路由模式之一进行匹配(如果您选择的是Laravel,请在此处阅读)。成功匹配模式后,您需要查找语言。 您将必须遍历模式的所有部分。找到所有这些片段的潜在翻译,并确定使用哪种语言。当(不是“如果”)发生冲突时,将使用两个其他来源(cookie和标头)来解决路由冲突。 例如:http://site.tld/blog/novinka。 那是音译""блог, новинка"",在英语中大约是""blog"", ""latest""。 您已经注意到,俄语中的“блог”将译为“博客”。这意味着对于您的第一部分[:query](在最佳情况下),最终会['en', 'ru']列出可能的语言。然后您进入下一个片段-“ novinka”。可能的列表中可能只有一种语言:['ru']。 当列表中有一项时,您已经成功找到该语言。 但是,如果最终得到2种(例如:俄语和乌克兰语)或更多种可能性..或0种可能性(视情况而定)。您将必须使用Cookie和/或标题才能找到正确的选项。 如果其他所有方法均失败,则选择站点的默认语言。 语言作为参数 替代方法是使用URL,可以将其定义为http://site.tld/[:language]/[:query]。在这种情况下,翻译查询时,您无需猜测语言,因为此时您已经知道要使用哪种语言。 还有另一种语言来源:cookie值。但是,这里没有必要弄乱Accept-Language标头,因为在“冷启动”的情况下(当用户第一次使用自定义查询打开网站时),您不会处理未知数量的可能的语言。 相反,您有3个简单的优先选项: 如果[:language]设置了细分,请使用它 如果$_COOKIE['lang']设置,使用它 使用默认语言 使用该语言时,您只需尝试翻译查询,如果翻译失败,请对该特定段使用“默认值”(基于路由结果)。 这不是第三种选择吗? 是的,从技术上讲,您可以将两种方法结合使用,但这会使过程复杂化,并且只适合那些想要手动更改URL http://site.tld/en/news到http://site.tld/de/news并希望新闻页面更改为德语的人员。 但是即使是这种情况,也可以使用cookie值(其中包含有关先前选择语言的信息)缓解,以减少魔术和希望。 使用哪种方法? 您可能已经猜到了,我建议您将其http://site.tld/[:language]/[:query]作为更明智的选择。 同样在真实的单词情况下,URL中将包含第三大部分:“标题”。如在线商店中的产品名称或新闻站点中的文章标题。 例: http://site.tld/en/news/article/121415/EU-as-global-reserve-currency 在这种情况下'/news/article/121415'将是查询,而'EU-as-global-reserve-currency'标题是。纯粹用于SEO。 可以在Laravel中完成吗? Kinda,但默认情况下不是。 我不太熟悉它,但是据我所知,Laravel使用简单的基于模式的路由机制。要实现多语言URL,您可能必须扩展核心类,因为多语言路由需要访问不同形式的存储(数据库,缓存和/或配置文件)。 已路由。现在怎么办? 结果,您最终将获得两条有价值的信息:当前语言和查询的翻译段。然后,这些值可用于调度将产生结果的类。 基本上,以下网址:(http://site.tld/ru/blog/novinka或不含的版本'/ru')变成了类似 $parameters = [ 'language' => 'ru', 'classname' => 'blog', 'method' => 'latest', ]; 您仅用于调度的对象: $instance = new {$parameter['classname']}; $instance->{'get'.$parameters['method']}( $parameters ); ..或它的某些变体,具体取决于特定的实现。"来源:stack overflow

保持可爱mmm 2020-05-18 10:09:50 0 浏览量 回答数 0

回答

做网页时,我们通常需要考虑到不同电脑屏幕尺寸,以及不同手机屏幕大小等问题,解决样式发生改变的情况,那么如何解决呢?现在主要是采用自适应来解决高度,宽度的,以及图片自适应问题,下面就PC端和移动端来总结一下,通常进行自适应高度和宽度,图片时,一般与页面的布局存在关系。 1、最小尺寸分辨率1024*768(传统17寸显示器),则可以采用940px、960px、或者常用的980px作为最小宽度 2、1024768之后稍大的分辨率就是1280768了,则可以采用1200px或者1220px作为稍大的网页宽度 3、支持css3、html5的高级浏览器可以利用CSS3 Media Queries让网页在不同分辨率下自动调节布局标签 4、不支持css3、html5的脑残浏览器特别是<=ie8系列则需要用js以及resize事件来控制html的布局标签宽度了 5、宽度自适应需要对每个显示模块进行不同宽度的计算,在做html布局时需要大量的计算与适配。 6、宽度自适应为不同宽度显示器写布局元素时常用的css 下面我们看下,如何用js和css来自适应屏幕的大小。 一:了解高度和宽度的基础 下面用图片来说明: 网页可见区域高宽为:document.body.clientHeight||document.body.clientWidth 网页正文的区域高宽为:document.body.scrollHeight||document.body.scrollWidth(包括滚轮的长度) 网页被卷去的上左区域:document.body.scrollTop||document.body.scrollLeft 二: css自适应高度 1.两栏布局,左边固定,右边宽度自适应 方法一: //html部分 左边 正文 //css部分 *{margin:0;padding:0} #left{float:left;width:200px;background:red;} #bodyText{margin-left:200px;background:yellow; 方法二: //html部分 左边 正文 //css部分 #left{float:left;width:200px;background:red;margin-right:-100%;} #body{width:100%;float:left;} #bodyText{margin-left:200px;background:yellow;} 2.三栏布局,两边定宽,中间自适应宽度 方法一: <div id="left">左边</div>----注意和div的位置有关系 <div id="right">右边</div> <div id="center">中间</div> //css部分 #left{width:200px;background:red;float:left;} #center{width:auto;background:blue;} #right{width:200px;background:yellow;float:right;} 方法二: html部分: <div id="body"> <div id="center">中间</div> </div> <div id="left">左边</div> <div id="right">右边</div> css部分: #body{width:100%;float:left;} //设置浮动和width:100% #body #center{background:red;margin-left:200px;margin-right:300px;} //margin-left:100%的使用方法 #left{width:200px;background:yellow;margin-left:-100%;float:left} #right{width:300px;background:blue;margin-left:-300px;float:left} -----如果设置为margin-left:-100%,则会跑到body的左边。 -----如果设置为margin-left:-300px(即right的宽度),则会跑到body的右边 3.关于最小宽度和最大宽度 这里依然结合布局来看,如下面的代码:自适应宽度,从而改变布局。 //html部分 <div id='container'> <div class='one'></div> <div class='two'></div> <div class='three'></div> </div> //css部分 #container{width:100%;} .one{width:20%;background:red;} .one,.two,.three{float:left; height:100px;} .two{width:60%;background:yellow;} .three{width:20%;background:blue;} @media (max-width:800px){--如果浏览器小于800px .one{width:40%;} .two{width:60%} .three{width:100%} } @media (max-width:400px)--如果浏览器宽度小于400px { .one{width:100%} .two{width:100%} .three{width:100%} } 理解什么叫最小宽度和最大宽度,最小宽度指为元素设置的最小宽度,到达最小宽度后,缩放文本不会起到任何作用 最大宽度是所有元素所能达到的一个上限,不能再继续往上增加。 三: css处理自适应高度 //html部分代码 <div id="fit"></div> //css代码 html,body{margin:0;height:100%;} #fit{width:200px;background:yellow;height:100%;border:1px solid red;} --这里同时给html和body加样式,是为了兼容各大浏览器。 IE 处于混杂模式时,body以窗口为高度参照,body设置为100%就可以使得页面和窗口一样高,body里面的嵌套div也可以扩展到窗口高度, 这样的话可以使布局适应浏览器窗口大小。窗体 》body》div (html ,body {overflow:scroll} 一层滚动条) 但是当处于标准模式时,body以html标签为高度参照,html标签才以窗口为参照,所以仅仅body 100%,并不能使它的子div100% 占据整个屏幕 还要使得 html 100%使得 html获得窗口大小才行。窗体》html》body》div (html ,body {overflow:scroll} 两层滚动条 ,html的滚动条从来不会用到) 父级随子级高度变化而自适应变化与子级随父级高度变化而变化 <div id="fj"> 我是父级 <div id="zj1">我是子级1</div> <div id="zj2">我是子级2</div> </div> //css部分 #fj{border:4px solid red;} #zj1{border:2px solid yellow;} #zj2{border:2px solid blue;}----这种情况下,父级高度随着子级div的高度自适应的改变 如果子div使用了float属性,此时已经脱离标准流,父div不会随内容的高度变化而变化,解决的办法是在浮动的div下面,加一个空div,设置clear属性both <div id="fj"> 我是父级 <div id="zj1">我是子级11111111111111111111111111</div> <div id="zj2">我是子级222222222222222222222222222222222222222222 222222222222222222222222222</div> <div id="clear" style="clear:both"></div>------如果去掉这句话,则父级div高度,不会随着子级的高度变化而变化 </div> //css部分 #fj{border:4px solid black;} #zj1{border:2px solid yellow;float:left} #zj2{border:2px solid blue;float:left} 高度的自适应的方法还有很多,这里不再列举。像height:auto等等。 四:js处理高度和宽度自适应问题 <div id="div1" >222222222222222222222</div> //js部分 function setHeight(obj) { var temHeight=null; //FF if(window.innerHeight) { temHeight=window.innerHeight;//包括页面高度和滚动条高度 } else { temHeight=document.body&&document.body.clientHeight; } if(temHeight>document.body.clientHeight)//页面高度 { oDiv.style.height=temHeight+"px"; } else { oDiv.style.height=document.body.clientHeight+"px"; } } window.onload=function() { var oDiv=document.getElementById("div1"); getHeight(oDiv); } 宽度自适应代码: function setWidth(obj) { var screenWidth = window.screen.width; var width; var imgURL ; if (screenWidth >= 1440) { width = "1400px"; imgURL = "1400.png";//设置不同分辨率下的图片 } else if (1024 < screenWidth && screenWidth < 1440) { width = "1200px"; imgURL = "1200.png"; } else { width = "980px"; imgURL = "980.png"; } obj.style.width=width ; obj.style.backgroundImage="url(" + imgURL + ")"; }) 五:移动端的自适应高度和宽度 移动端的相对要简单些,首先,在网页代码的头部,加入一行viewport标签。 <meta name=”viewport” content=”width=device-width, initial-scale=1″ /> viewport是网页默认的宽度和高度,上面的意思表示,网页的宽度默认等于设备屏幕的宽度,原始缩放比例为1,即网页初始大小占屏幕面积的100%。 1:由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素。这一条非常重要。具体说,CSS代码不能指定像素宽度:width:xxx px;只能指定百分比宽度:width: xx%;或者width:auto; 2:一般使用em,尽量少使用px字体 3:使用流动布局 4:自适应网页设计”的核心,就是CSS3引入的media query模块。下载地址: http://download.csdn.net/download/song_121292057/8031781 自动探测屏幕宽度,然后加载相应的CSS文件。 <link rel="stylesheet" type="text/css" media="screen and (max-device-width: 400px)" href="style.css" /> -------当屏幕小于400时,就加载style.css这个文件 5:除了用html标签加载CSS文件,还可以在现有CSS文件中加载。 @import url("style2.css") screen and (max-device-width: 800px);//当小于800px屏幕时,就加载style2.css文件 6:图片的自动缩放,比较简单。只要一行CSS代码:img{ max-width: 100%;}建议根据不同的屏幕分辨率,加载不同大小像素的图片。 移动端的自适应,大体上差不多就这么多,主要核心是利用mediaquery,根据不同的屏幕大小,实现不同的布局。代码可看上面的列子。这里不再重复写。

问问小秘 2020-05-12 18:08:22 0 浏览量 回答数 0

问题

创建定制的jQuery Mobile主题 - jQuery报错

montos 2020-06-04 14:18:42 5 浏览量 回答数 1

回答

你好,可以参考如下文档解决,望采纳。 对象存储 OSS-图片处理指南-图片水印 水印操作可以在图片上设置另外一张图片或者文字做为水印。 参数 操作名称:watermark 基础参数 名称 描述 参数类型 t 参数意义:透明度, 如果是图片水印,就是让图片变得透明,如果是文字水印,就是让水印变透明。默认值:100, 表示 100%(不透明) 取值范围: [0-100] 可选参数 g 参数意义:位置,水印打在图的位置,详情参考下方区域数值对应图。取值范围:[nw,north,ne,west,center,east,sw,south,se] 可选参数 x 参数意义:水平边距, 就是距离图片边缘的水平距离, 这个参数只有当水印位置是左上,左中,左下, 右上,右中,右下才有意义。默认值:10取值范围:[0 – 4096]单位:像素(px) 可选参数 y 参数意义:垂直边距, 就是距离图片边缘的垂直距离, 这个参数只有当水印位置是左上,中上, 右上,左下,中下,右下才有意义 默认值:10 取值范围:[0 – 4096] 单位:像素(px) 可选参数 voffset 参数意义: 中线垂直偏移,当水印位置在左中,中部,右中时,可以指定水印位置根据中线往上或者往下偏移 默认值:0 取值范围:[-1000, 1000] 单位:像素(px) 可选参数 说明 水平边距、垂直边距、中线垂直偏移不仅可以调节水印在图片中的位置,而且当图片存在多重水印时,也可以调节两张水印在图中的布局。 用到的URL安全的Base64位编码可以参考文档下方的解释。 区域数值以及每个区域对应的基准点如下图。   图片水印参数 名称 描述 参数类型 image 参数意义: 水印图片的object名字(必须编码) 说明 内容必须是URL安全base64编码 encodedObject = url_safe_base64_encode(object) 如object为”panda.png”, 编码过后的内容为”cGFuZGEucG5n” 必选参数 水印图片预处理 用户在打水印时,可以对水印图片进行预处理,支持的预处理操作有:图片缩放,图片裁剪(不支持内切圆),图片旋转(具体内容请直接查看文档相关章节)。在“resize”操作下还额外支持一个参数:P(大写P),表示水印图片按主图的比例进行处理,取值范围为[1, 100],表示百分比。 预处理示例 设置了P_10, 当主图是100x100, 水印图片大小就为10x10, 当主图变成了200x200,水印图片大小就为20x20。如果生成的图片大小不一样,而使用相同的水印处理参数,就会导致一些小图,水印图片过大。或者一些大图,水印图片过小。增加P参数,就可以解决这个问题。采用P参数,IMG会根据主图的大小来动态调整水印图片的大小。 对panda.png按30%缩放。 那么水印文件是:panda.png?x-oss-process=image/resize,P_30 (经过URL安全base64编码后是:cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA) 如果水印操作是:watermark=1&object=cGFuZGEucG5nQDMwUA&t=90&p=9&x=10&y=10 (右下角打水印)原图按宽度是400,需要缩略,再打上述水印的示例: http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_400/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA,t_90,g_se,x_10,y_10   如果原图按宽度300缩略,再打上上述水印的示例: http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMzA,t_90,g_se,x_10,y_10   文字水印参数 名称 描述 参数类型 text 参数意义:表示文字水印的文字内容(必须编码) 说明 必须是URL安全base64编码 encodeText = url_safe_base64_encode(fontText) 最大长度为64个字符(即支持汉字最多20个左右) 必选参数 type 参数意义:表示文字水印的文字类型(必须编码) 说明 注意:必须是URL安全base64编码 encodeText = url_safe_base64_encode(fontType) 取值范围:见下表(文字类型编码对应表)默认值:wqy-zenhei ( 编码后的值:d3F5LXplbmhlaQ) 可选参数 color 参数意义:文字水印文字的颜色参数的构成必须是:六个十六进制数,如:000000表示黑色。 000000每两位构成RGB颜色, FFFFFF表示的是白色默认值:000000黑色 可选参数 size 参数意义:文字水印文字大小(px)取值范围:(0,1000]默认值:40 可选参数 shadow 参数意义:文字水印的阴影透明度取值范围:(0,100] 可选参数 rotate 参数意义:文字顺时针旋转角度取值范围:[0,360] 可选参数 fill 参数意义:进行水印铺满的效果取值范围:[0,1],1表示铺满,0表示效果无效 可选参数 文字类型编码对应表 参数值 中文意思 URL安全base64编码后的值 备注 wqy-zenhei 文泉驿正黑 d3F5LXplbmhlaQ== 根据RFC,可省略填充符=变为d3F5LXplbmhlaQ wqy-microhei 文泉微米黑 d3F5LW1pY3JvaGVp fangzhengshusong 方正书宋 ZmFuZ3poZW5nc2h1c29uZw== 根据RFC,可省略填充符=变为ZmFuZ3poZW5nc2h1c29uZw fangzhengkaiti 方正楷体 ZmFuZ3poZW5na2FpdGk= 根据RFC,可省略填充符=变为ZmFuZ3poZW5na2FpdGk fangzhengheiti 方正黑体 ZmFuZ3poZW5naGVpdGk= 根据RFC,可省略填充符=变为ZmFuZ3poZW5naGVpdGk fangzhengfangsong 方正仿宋 ZmFuZ3poZW5nZmFuZ3Nvbmc= 根据RFC,可省略填充符=变为ZmFuZ3poZW5nZmFuZ3Nvbmc droidsansfallback DroidSansFallback ZHJvaWRzYW5zZmFsbGJhY2s= 根据RFC,可省略填充符=变为ZHJvaWRzYW5zZmFsbGJhY2s 文图混合 名称 描述 参数类型 order 参数意义: 文字,图片水印前后顺序取值范围:[0, 1] order = 0 图片在前(默认值); order = 1 文字在前 可选参数 align 参数意义:文字、图片对齐方式取值范围:[0, 1, 2] align = 0 上对齐(默认值) align = 1 中对齐 align = 2 下对齐 可选参数 interval 参数意义:文字和图片间的间距取值范围: [0, 1000] 可选参数 URL安全的Base64位编码 在图片处理服务里会有很多参数需要变成Base64位编码,参考RFC4648。注意这里的URL 安全Base64位编码只是用在水印操作某些特定参数(文字水印的文字内容,文字颜色,文字字体及图片水印的水印object)里,不要将其用来签名字符串(Signature)的内容。编码的格式是: 先将内容编码成Base64结果; 将结果中的加号”+”替换成中划线“-“; 将结果中的斜杠”/”替换成下划线”_”; 将结果中尾部的“=”号全部保留; 以Python为例子 import base64 input='wqy-microhei' print(base64.urlsafe_b64encode(input)) 示例 下面URL的含义,是example.jpg加上水印文件为 :panda.png (panda.png 经过URL安全base64编码后是:cGFuZGEucG5n) http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300,h_300/auto-orient,1/quality,q_90/format,jpg/watermark,image_cGFuZGEucG5n,t_90,g_se,x_10,y_10   对panda.png按宽度是50缩放。 那么水印文件是:panda.png?x-oss-process=image/resize,w_50 (经过URL安全base64编码后是:cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLHdfNTA=) http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300,h_300/auto-orient,1/quality,q_90/format,jpg/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLHdfNTA=,t_90,g_se,x_10,y_10   最简单水印:文字内容是:Hello, 图片服务 http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300,h_300/watermark,type_d3F5LXplbmhlaQ,size_30,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ   字体是文泉驿正黑,字体大小是40, 颜色是白色(#FFFFFF), 文字阴影是50, 文字水印内容是:Hello, 图片服务!, 水印位置是:右下,水平边距是:10, 中线垂直偏移是:10 http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300,h_300/watermark,type_d3F5LXplbmhlaQ,size_30,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ,color_FFFFFF,shadow_50,t_100,g_se,x_10,y_10   文图混合水印,文字内容是:Hello, 图片服务! 阴影是50, 位置在右下角,图片object 是panda.png。 水平边距和垂直边距都是10, 水印透明是100, 排版方式是图片前, 对齐方式是下对齐,间距是10 http://image-demo.img-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300,h_300/auto-orient,1/quality,q_90/format,jpg/watermark,image_cGFuZGEucG5nP3gtb3NzLXByb2Nlc3M9aW1hZ2UvcmVzaXplLFBfMjU,type_d3F5LXplbmhlaQ,size_30,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ,color_FFFFFF,shadow_50,order_0,align_2,interval_10,t_100,g_se,x_10,y_10   收起 相关推荐问题 对象存储 OSS-图片处理指南-图片水印-参数 对象存储 OSS-图片处理指南-图片缩放 对象存储 OSS-图片处理指南-图片水印-示例

老离 2019-12-02 00:02:04 0 浏览量 回答数 0

问题

如何实现图片水印?

青衫无名 2019-12-01 21:56:55 1784 浏览量 回答数 0

问题

【2013.9.5修正版图文】新手如何使用阿里云(linux)服务器建站(搬站)

姑苏公子 2019-12-01 21:11:07 103138 浏览量 回答数 78

问题

搜索引擎优化7大原理

aizhan 2019-12-01 21:00:37 6153 浏览量 回答数 0

问题

【Android学习全家桶】155道Android热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:24 2181 浏览量 回答数 2
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站